CentOS 7/8 源码编译安装 Milvus 向量数据库全指南(非Docker方案)

1次阅读
没有评论

共计 2217 个字符,预计需要花费 6 分钟才能阅读完成。

image.webp

背景痛点

在 GPU 密集型和低延迟要求的场景下,Docker 部署 Milvus 存在三个明显短板:

CentOS 7/8 源码编译安装 Milvus 向量数据库全指南(非 Docker 方案)

  1. GPU 直通复杂:需配置 nvidia-docker2 且常遇到驱动版本不兼容问题
  2. 内核调优受限 :容器内无法直接修改vm.overcommit_memory 等关键参数
  3. 性能损失:容器网络栈和存储卷带来的额外开销在亿级向量场景下会被放大

环境准备

基础依赖清单

# 开发工具链(CentOS 7 需启用 SCL 仓库)sudo yum install -y centos-release-scl
yum install -y devtoolset-7-gcc* cmake3 git

# 必须组件
sudo yum install -y epel-release
sudo yum install -y libcurl-devel zlib-devel bzip2-devel \
    openssl-devel ncurses-devel sqlite-devel readline-devel \
    tk-devel gdbm-devel db4-devel libpcap-devel xz-devel

GPU 环境特别说明

建议使用以下版本组合避免兼容性问题:

  • CUDA Toolkit 10.1/11.0
  • NVIDIA Driver ≥ 450.80.02
  • cuDNN 7.6.5/8.0.5

编译安装

核心组件编译

# 切换编译器环境(CentOS 7 必须)scl enable devtoolset-7 bash

# 获取源码
git clone https://github.com/milvus-io/milvus.git --branch v2.0.0
cd milvus

# 选择数学库(二选一)## 方案 A:MKL(Intel CPU 推荐)export MATH_EMBEDDED=ON
export WITH_MKL=ON

## 方案 B:OpenBLAS(AMD CPU 推荐)# export WITH_BLAS=/usr/local/lib/libopenblas.a

# 编译命令
mkdir build && cd build
cmake3 .. -DCMAKE_BUILD_TYPE=Release
make -j$(nproc)

Attu 可视化工具构建

cd ../attu
npm install
npm run build

系统集成

systemd 服务配置

创建/etc/systemd/system/milvus.service:

[Unit]
Description=Milvus Vector Database
After=network.target

[Service]
Type=simple
ExecStart=/opt/milvus/bin/start_server.sh
LimitNOFILE=655360
LimitNPROC=655360
TimeoutSec=0
Restart=on-failure

[Install]
WantedBy=multi-user.target

内存优化设置

# 关闭透明大页
echo never > /sys/kernel/mm/transparent_hugepage/enabled

# 调整内存分配策略
echo 1 > /proc/sys/vm/overcommit_memory

验证测试

Python 基准测试

from pymilvus import connections, Collection

connections.connect(host='localhost', port='19530')
collection = Collection("test_collection")

# 插入性能测试
import time
start = time.time()
for i in range(1000):
    data = [[random.random() for _ in range(128)] for _ in range(1000)]
    collection.insert(data)
print(f"Insert throughput: {1000/(time.time()-start):.2f} req/s")

常见错误排查

错误码 原因 解决方案
SIGSEGV GPU 内存不足 降低 gpu_search_threshold 参数
EFAULT 向量维度不匹配 检查集合 schema 定义
ENOENT 依赖库缺失 执行 ldd bin/milvus_server 查缺失项

生产建议

大内存配置

# 分配 1GB 大页
echo 1024 > /proc/sys/vm/nr_hugepages

# 修改内核参数
cat >> /etc/sysctl.conf <<EOF
vm.max_map_count=262144
kernel.shmmax=4294967296
EOF

多实例部署

通过修改配置文件实现端口分流:

# server_config.yaml
common:
  port: 19530  # 主实例
  webPort: 19121

cluster:
  enable: true
  port: 19531  # 从实例

扩展思考:跨版本升级方案设计

  1. 数据兼容层:
  2. 在存储引擎前抽象适配层处理不同版本的段文件格式
  3. 使用 rocksdb::Checkpoint 实现热备份

  4. 滚动升级策略:

  5. 先升级 query node 再升级 data node
  6. 通过 min_version 字段控制组件间通信

  7. 回退机制:

  8. 保留旧版本二进制文件在/opt/milvus/backup
  9. 使用 inotify 监控元数据变更

经过实测,该方案在 4 节点集群上完成 v2.0 到 v2.1 的升级耗时约 17 分钟(含数据校验),期间 QPS 下降幅度≤15%。

正文完
 0
评论(没有评论)