|
| 1 | +--- |
| 2 | +title: "将 RustFS 配置为 milvus 对象存储后端" |
| 3 | +description: "milvus 默认支持 minio 作为对象存储后端,RustFS 作为 minio 的平替,可以作为 milvus 的存储后端。" |
| 4 | +--- |
| 5 | + |
| 6 | +# 在 Milvus 中配置 RustFS |
| 7 | + |
| 8 | + |
| 9 | +[Milvus](https://milvus.io/) 是一款开源的向量数据库项目,由 Zilliz 开发,目前该项目已经捐赠给了 LF AI & DATA 基金会。向量数据库是 AIGC 发展的重要基础设施,因此 [milvus 在 GitHub 上的 Star 数量](https://github.com/milvus-io/milvus)已经超过 37.5k。 |
| 10 | + |
| 11 | +Milvus 支持多种安装方式,同时支持将对象存储配置为存储后端,官方提供的配置方式中,默认的对象存储为 minio。RustFS 作为 Rust 编写的新一代分布式对象存储系统,可以完全平替 minio,因此,可以将 RustFS 作为 milvus 的对象存储后端。 |
| 12 | + |
| 13 | +## 配置流程 |
| 14 | + |
| 15 | +### Docker Compose 安装 |
| 16 | + |
| 17 | +#### `docker-compose.yaml` 文件修改 |
| 18 | + |
| 19 | +Milvus 官方提供 [`docker-compose.yml`](https://github.com/milvus-io/milvus/blob/master/docker-compose.yml)来进行部署。该文件中包含以下几个服务: |
| 20 | + |
| 21 | + |
| 22 | +- `milvus-etcd` |
| 23 | +- `milvus-minio` |
| 24 | +- `milvus-standalone` |
| 25 | + |
| 26 | + |
| 27 | +将 `milvus-minio` 替换为 `milvus-rustfs`,需要将 `docker-compose.yaml` 中的 minio 容器信息替换为 rustfs 容器信息: |
| 28 | + |
| 29 | +``` |
| 30 | + rustfs: |
| 31 | + container_name: milvus-rustfs |
| 32 | + image: rustfs/rustfs:1.0.0-alpha.58 |
| 33 | + environment: |
| 34 | + - RUSTFS_VOLUMES=/data/rustfs0,/data/rustfs1,/data/rustfs2,/data/rustfs3 |
| 35 | + - RUSTFS_ADDRESS=0.0.0.0:9000 |
| 36 | + - RUSTFS_CONSOLE_ADDRESS=0.0.0.0:9001 |
| 37 | + - RUSTFS_CONSOLE_ENABLE=true |
| 38 | + - RUSTFS_EXTERNAL_ADDRESS=:9000 |
| 39 | + - RUSTFS_CORS_ALLOWED_ORIGINS=* |
| 40 | + - RUSTFS_CONSOLE_CORS_ALLOWED_ORIGINS=* |
| 41 | + - RUSTFS_ACCESS_KEY=rustfsadmin |
| 42 | + - RUSTFS_SECRET_KEY=rustfsadmin |
| 43 | + ports: |
| 44 | + - "9000:9000" # S3 API port |
| 45 | + - "9001:9001" # Console port |
| 46 | + volumes: |
| 47 | + - rustfs_data_0:/data/rustfs0 |
| 48 | + - rustfs_data_1:/data/rustfs1 |
| 49 | + - rustfs_data_2:/data/rustfs2 |
| 50 | + - rustfs_data_3:/data/rustfs3 |
| 51 | + - logs_data:/app/logs |
| 52 | + restart: unless-stopped |
| 53 | + healthcheck: |
| 54 | + test: |
| 55 | + [ |
| 56 | + "CMD", |
| 57 | + "sh", "-c", |
| 58 | + "curl -f http://localhost:9000/health && curl -f http://localhost:9001/health" |
| 59 | + ] |
| 60 | + interval: 30s |
| 61 | + timeout: 10s |
| 62 | + retries: 3 |
| 63 | + start_period: 40s |
| 64 | +``` |
| 65 | + |
| 66 | +另外,在 `milvus-standalone` 容器信息中 `depends` 中的 minio 替换为 rustfs: |
| 67 | + |
| 68 | +``` |
| 69 | + depends_on: |
| 70 | + - "etcd" |
| 71 | + - "rustfs" |
| 72 | +``` |
| 73 | + |
| 74 | +如果想增加 milvus 的可观测性,还可以在 `docker-compose.yaml` 文件中增加 attu 服务: |
| 75 | + |
| 76 | +``` |
| 77 | + attu: |
| 78 | + container_name: milvus-attu |
| 79 | + image: zilliz/attu:v2.6 |
| 80 | + environment: |
| 81 | + - MILVUS_URL=milvus-standalone:19530 |
| 82 | + ports: |
| 83 | + - "8000:3000" |
| 84 | + restart: unless-stopped |
| 85 | +``` |
| 86 | + |
| 87 | +#### `milvus.yaml` 文件修改 |
| 88 | + |
| 89 | + |
| 90 | +minio 的信息(包括地址、access_key、access_secret 等)都写在 [`milvus.yaml`](https://github.com/milvus-io/milvus/blob/master/configs/milvus.yaml) 中,因此需要将这些信息替换为 rustfs 实例的信息: |
| 91 | + |
| 92 | +在该文件中,minio 的重点配置信息如下: |
| 93 | + |
| 94 | +``` |
| 95 | +rustfs: |
| 96 | + address: localhost:9000 |
| 97 | + port: 9000 |
| 98 | + accessKeyID: rustfsadmin |
| 99 | + secretAccessKey: rustfsadmin |
| 100 | + useSSL: false |
| 101 | + bucketName: "rustfs-bucket" |
| 102 | +``` |
| 103 | + |
| 104 | +**注意**:由于需要修改 `milvus.yaml` 文件中的默认 minio 信息,因此有两种方式: |
| 105 | + |
| 106 | +- 修改 `milvus-standalone` 容器的启动命令:在 milvus 进程启动之前,使用 `yq` 命令对 minio 信息进行替换。由于该容器中默认没有 `yq` 命令,所以需要先安装。 |
| 107 | +- 从本地挂载:将 `milvus.yaml` 文件下载到本地,修改内容后,使用 volume 进行挂载,比如 `- ${DOCKER_VOLUME_DIRECTORY:-.}/milvus.yaml:/milvus/configs/milvus.yaml:ro` |
| 108 | + |
| 109 | +### 安装部署 |
| 110 | + |
| 111 | +将官方 [`docker-compose.yml`](https://github.com/milvus-io/milvus/blob/master/docker-compose.yml) 和 [`milvus.yml`](https://github.com/milvus-io/milvus/blob/master/configs/milvus.yaml)下载到本地。根据上面的步骤进行相应修改,然后执行如下命令: |
| 112 | + |
| 113 | +```bash |
| 114 | +docker compose -f docker-compose.yaml up -d |
| 115 | +``` |
| 116 | + |
| 117 | +等服务启动之后,可查看启动的容器: |
| 118 | + |
| 119 | +```bash |
| 120 | +docker compose ps |
| 121 | +NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS |
| 122 | +milvus-attu zilliz/attu:v2.6 "docker-entrypoint.s…" attu 14 minutes ago Up 14 minutes 0.0.0.0:8000->3000/tcp, [::]:8000->3000/tcp |
| 123 | +milvus-etcd quay.io/coreos/etcd:v3.5.18 "etcd -advertise-cli…" etcd 14 minutes ago Up 14 minutes (healthy) 2379-2380/tcp |
| 124 | +milvus-rustfs rustfs/rustfs:1.0.0-alpha.58 "/entrypoint.sh rust…" rustfs 14 minutes ago Up 14 minutes (unhealthy) 0.0.0.0:9000-9001->9000-9001/tcp, [::]:9000-9001->9000-9001/tcp |
| 125 | +milvus-standalone milvusdb/milvus:v2.6.2 "/tini -- milvus run…" standalone 14 minutes ago Up 14 minutes (healthy) 0.0.0.0:9091->9091/tcp, [::]:9091->9091/tcp, 0.0.0.0:19530->19530/tcp, [::]:19530->19530/tcp |
| 126 | +``` |
| 127 | + |
| 128 | +其中,RustFS 服务在 `localhost:9000` 可用: |
| 129 | + |
| 130 | + |
| 131 | + |
| 132 | + |
| 133 | +可以看到,milvus 已经使用 rustfs 存储了一些启动过程中产生的数据。 |
| 134 | + |
| 135 | + |
| 136 | +Attu 在 `localhost:8000` 可用: |
| 137 | + |
| 138 | + |
| 139 | + |
0 commit comments