共计 2204 个字符,预计需要花费 6 分钟才能阅读完成。
背景与痛点
在 CentOS7 系统上部署 Milvus 向量数据库时,开发者常遇到以下挑战:

- 内核版本限制 :CentOS7 默认内核版本为 3.10,而 Milvus 依赖的某些特性(如 cgroup v2)需要更高版本内核支持。
- 依赖库冲突 :系统自带的 glibc 和 gcc 版本较低,可能导致编译或运行时兼容性问题。
- 资源隔离不足 :传统部署方式难以有效隔离 CPU、内存资源,影响多实例部署的稳定性。
技术选型
对比三种主流部署方式:
- 源码编译 :灵活性高但环境配置复杂,依赖管理困难
- RPM 包安装 :依赖系统库版本,易引发冲突
- Docker 容器化 :
- 优势:环境隔离、依赖打包、快速部署
- 劣势:需要掌握容器网络和存储配置
推荐选择 Docker 方案,因其能完美解决 CentOS7 的环境隔离问题。
详细实现
系统环境准备
-
升级内核至 5.x 版本:
sudo yum install -y https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm sudo yum --enablerepo=elrepo-kernel install kernel-ml -y sudo grub2-set-default 0 && reboot -
安装基础依赖:
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
Docker 安装配置
-
添加 Docker CE 仓库:
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo -
安装 Docker 组件:
sudo yum install -y docker-ce docker-ce-cli containerd.io -
配置 cgroup 驱动:
sudo mkdir /etc/docker cat <<EOF | sudo tee /etc/docker/daemon.json {"exec-opts": ["native.cgroupdriver=systemd"] } EOF
Docker Compose 部署 Milvus
-
安装 Docker Compose:
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose -
创建 docker-compose.yml:
version: '3.5' services: etcd: container_name: milvus-etcd image: quay.io/coreos/etcd:v3.5.0 environment: - ETCD_AUTO_COMPACTION_MODE=revision - ETCD_AUTO_COMPACTION_RETENTION=1000 volumes: - ./etcd_data:/etcd minio: container_name: milvus-minio image: minio/minio:RELEASE.2022-03-17T06-34-49Z environment: - MINIO_ACCESS_KEY=minioadmin - MINIO_SECRET_KEY=minioadmin volumes: - ./minio_data:/data standalone: container_name: milvus-standalone image: milvusdb/milvus:v2.2.3 ports: - "19530:19530" environment: - ETCD_ENDPOINTS=etcd:2379 - MINIO_ADDRESS=minio:9000 depends_on: - etcd - minio
验证与调优
健康检查
-
服务状态验证:
docker ps -a --filter "name=milvus" -
API 连通性测试:
curl -X GET "http://localhost:19530/v1/vector/collections"
性能调优
-
关键 JVM 参数调整(适用于 standalone 容器):
environment: - JAVA_OPTS=-Xms8g -Xmx8g -XX:+UseG1GC -
索引构建参数优化:
index_params = { "metric_type": "L2", "index_type": "IVF_FLAT", "params": {"nlist": 4096} }
生产环境避坑指南
-
数据持久化 :必须挂载 volume 到宿主机
volumes: - /mnt/milvus_data:/var/lib/milvus -
内存泄漏预防 :
- 定期重启长期运行的容器(建议每周一次)
-
限制容器内存使用量
-
网络优化 :
- 使用 host 网络模式提升性能
- 配置合适的 ulimit 值
总结与进阶
- 部署流程关键点回顾:
- 内核版本升级
- cgroup 驱动配置
-
存储卷挂载
-
集群化部署建议:
- 使用 Kubernetes Operator
-
分片键设计策略
-
监控方案:
- Prometheus + Grafana
- 自定义业务指标采集
思考题 :
1. 如何设计跨可用区的 Milvus 集群部署方案?
2. 当遇到查询性能下降时,应该从哪些维度进行排查?
正文完
发表至: 未分类
近两天内
