Milvus源码编译安装
环境配置:
硬件平台:虚拟机(VMWare Workstation Pro 17)
处理器数:2
每个处理器的核数:2
操作系统:Ubuntu 22.04
运行内存:8GB
存储空间:200GB
前言:
- 尽量保持网络环境良好,网络带宽要足够。
- 不必使用梯子;当然使用了是锦上添花。
- 如无特别说明,bash的工作目录在用户根目录。
1. 配置GitHub连接
1.1. 添加SSH Key
1.1.1. 在本机生成SSH公钥和私钥
若已存在文件id_rsa和id_rsa.pub,则可忽略该步骤
ssh-keygen -t rsa
执行上述命令后,一直回车即可。
1.1.2. 执行以下命令,复制输出的内容(SSH公钥)
cat ~/.ssh/id_rsa.pub
1.1.3. 添加SSH公钥到Github
- 进入GitHub,点击右上角的个人头像,在展开的列表中点击Settings进入设置页面。
- 在设置页面中,点击左侧列表中的SSH and GPG keys。
- 在新打开的页面中点击右上角的New SSH key,将复制的内容粘贴到Key下的剪贴板中即可(最好填写一下title栏,标识一下这个SSH Key来自哪里)。
1.2. 设置SSH连接端口
1.2.1. 创建并打开文件~/.ssh/config
vim ~/.ssh/config
1.2.2. 在文件中写入以下内容,保存并退出即可
Host github.com
Hostname ssh.github.com
Port 443
1.2.3. 与GitHub建立SSH连接
ssh -T git@github.com
中间输入yes,出现提示语You've successfully authenticated, but GitHub does not provide shell access.
则代表成功。
1.3. 设置指向GitHub的IP地址
1.3.1. 使用root权限打开文件/etc/hosts
sudo vim /etc/hosts
1.3.2. 在文件中写入以下内容(注意需要写入到代表IPV4地址的区域),保存并退出即可
140.82.114.3 github.com
2. 安装golang开发环境
2.1. 安装基础依赖
sudo apt install -y\
build-essential\
binutils\
bison
update:2024年4月15日,使用软件源archive.ubuntu.com
会出现Failed to Fetch报错,需要换源。参考:Ubuntu更换软件源
2.2. 使用国内镜像安装soulteary/gvm
# 代码克隆
git clone https://gitcode.net/soulteary/gvm.git
# 安装
SRC_REPO=https://gitcode.net/soulteary/gvm.git bash gvm/binscripts/gvm-installer
2.3. 执行以下命令:
source $HOME/.gvm/scripts/gvm
2.4. 配置 gvm 加速 Golang 及相关依赖包的下载/切换
# 打开.bashrc文件
vim ~/.bashrc
# 在文件末尾追加以下内容
export GO_BINARY_BASE_URL=https://golang.google.cn/dl/
export GOROOT_BOOTSTRAP=$GOROOT
export GO111MODULE=on
export GOPROXY="https://goproxy.cn"
# 使配置生效
source ~/.bashrc
2.5. 使用gvm安装golang
# 安装go 1.21.6
gvm install go1.21.6 -B
# 激活
gvm use go1.21.6 --default
# 若需要使用旧版本,执行以下命令即可,此时的版本只会在当前shell生效
# gvm install go1.18.3 -B
# gvm use go1.18.3
3. 编译Milvus
3.1. 下载Milvus代码
git clone git@github.com:milvus-io/milvus.git
cd milvus
3.2. 安装编译所需的系统环境
3.2.1. 修改脚本scripts/install_deps.sh
:
-
第24行,将
clang-format-10
改成clang-format
,将clang-tidy-10
改成clang-tidy
。该修改针对Ubuntu 22.04,Ubuntu 20.04可能无需修改。 -
第49-51行,将cmake的版本改为3.28(3.26改为3.28,cmake-3.26.5改为cmake-3.28.1)。该修改主要为了避免后续安装依赖时重复安装cmake。
3.2.2. 运行脚本script/install_deps.sh
./scripts/install_deps.sh
运行时间约3min
3.2.3. 使cargo生效
source $HOME/.cargo/env
3.3. 编译Milvus源码
3.3.1. 修改依赖库下载路径
将以下文件中的https://github.com/
更改为git@github.com:
(注意带上英文冒号):
internal/core/thirdparty/knowhere/CMakeLists.txt
internal/core/thirdparty/milvus-storage/CMakeLists.txt
internal/core/thirdparty/simdjson/CMakeLists.txt
internal/core/src/storage/azure-blob-storage/cmake-modules/AzureVcpkg.cmake
scripts/3rdparty_build.sh
,约第66行。scripts/download_milvus_proto.sh
,约第10行。将第13行注释。
3.3.2. 修改conan配置
-
打开文件
~/.conan/conan.conf
conan config init vim ~/.conan/conan.conf
-
找到配置项retry(约第15行),去掉注释,将其值从2改到120(或其他更大的值)。改完后退出即可。
3.3.3. 开始编译
make
-
整个编译过程约需2h。
-
若在编译的过程中,出现网络相关的报错而导致中断,反复make即可。
-
若出现以下输出,执行一次go mod tidy再make即可。make完毕后代表编译完成。
go: updates to go.mod needed; to update it: go mod tidy make: *** [Makefile:64: milvus] Error 1
3.4. 配置环境变量
# 打开.bashrc文件
vim ~/.bashrc
# 在文件末尾追加以下内容,保存并退出
export MILVUS_BUILD=$HOME/milvus/cmake_build
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MILVUS_BUILD/lib:$MILVUS_BUILD/azure
# 使配置生效
source ~/.bashrc
4. 安装运行依赖
4.1. 安装Java环境
4.1.1. 安装jdk
sudo apt install -y default-jdk
4.1.2. 查找安装目录
readlink -f `which java`
# 该命令会输出 /usr/lib/jvm/java-11-openjdk-amd64/bin/java
4.1.3. 配置JAVA_HOME
# 打开.bashrc文件
vim ~/.bashrc
# 在配置文件中写入以下内容
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
# 保存并退出文件后,使配置文件生效
source ~/.bashrc
4.2. 安装etcd-server:
sudo apt install -y etcd-server
4.3. 安装Pulsar 2.8.2
4.3.1. 下载二进制文件并解压
cd
# 下载
wget https://archive.apache.org/dist/pulsar/pulsar-2.8.2/apache-pulsar-2.8.2-bin.tar.gz
# 解压
tar -zxvf apache-pulsar-2.8.2-bin.tar.gz
4.3.2. 创建服务文件
sudo vim /lib/systemd/system/apache-pulsar-2.8.2.service
4.3.3. 往文件写入以下内容,保存并退出
注意:需要将${user_name}替换为对应的用户名
[Unit]
Description=pulsar standalone
After=network.target
[Service]
User=${user_name}
ExecStart=/home/${user_name}/apache-pulsar-2.8.2/bin/pulsar standalone
WorkingDirectory=/home/${user_name}/apache-pulsar-2.8.2
RestartSec=100s
Restart=on-failure
Type=simple
[Install]
WantedBy=multi-user.target
4.3.4. 重启daemon
# 当apache-pulsar-2.8.2.service或其他服务文件发生更改时,均需执行此命令
systemctl daemon-reload
4.3.5. 设置开机自动启动
systemctl enable apache-pulsar-2.8.2.service
4.3.6. 开启pulsar
systemctl start apache-pulsar-2.8.2.service
可以通过命令systemctl status apache-pulsar-2.8.2.service
检查是否启动成功。
4.4. 安装MinIO
4.4.1. 创建相关目录
cd
# 安装目录
mkdir MinIO && cd MinIO
# 数据目录
mkdir data
# 日志目录
mkdir log
4.4.2. 下载安装
wget https://dl.minio.io/server/minio/release/linux-amd64/minio
# 赋予可执行权限
chmod +x minio
4.4.3. 创建配置文件
vim minio.conf
写入以下内容,保存并退出即可
# 指定数据存储目录(注意:这个目录要存在且拥有相对应的权限)
MINIO_VOLUMES="$HOME/MinIO/data"
# 监听端口
# --address:是指定api的端口;--console-address:是指定控制台端口
MINIO_OPTS="--address :9000 --console-address :9090"
# 新版本使用;指定默认的用户名和密码,其中用户名必须大于3个字母,否则不能启动
MINIO_ROOT_USER="minioadmin"
MINIO_ROOT_PASSWORD="minioadmin"
# 区域值,标准格式是“国家-区域-编号”,
MINIO_REGION="cn-beijing-1"
# 域名
# MINIO_DOMAIN=minio.your_domain.com
4.4.4. 创建服务文件
sudo vim /lib/systemd/system/minio.service
4.4.5. 往文件写入以下内容,保存并退出
注意:需要将${user_name}替换为对应的用户名
[Unit]
Description=minio server
After=network.target
[Service]
User=${user_name}
ExecStart=/home/${user_name}/MinIO/minio server /home/${user_name}/MinIO/data
WorkingDirectory=/home/${user_name}/MinIO
RestartSec=100s
Restart=on-failure
Type=simple
[Install]
WantedBy=multi-user.target
4.4.6. 启动minio
# 设置开机自启
systemctl enable minio.service
# 开启minio
systemctl start minio.service
5. 运行Milvus
# 创建相关目录并更改权限
sudo mkdir /var/lib/milvus
# 此处需要替换成相应的用户名和用户组
sudo chown -R ${user_name}:${user_group} /var/lib/milvus
cd ~/milvus
nohup ./bin/milvus run standalone > running.log 2>&1 &
6. 调试Milvus
6.1. 安装dlv
go install github.com/go-delve/delve/cmd/dlv@latest
6.2. 修改配置文件
sudo vim /etc/sysctl.d/10-ptrace.conf
定位至文件最后一行,将配置项的值修改为0:
kernel.yama.ptrace_scope = 0
保存并退出后,执行以下命令更新配置:
sudo sysctl --system -a -p|grep yama
6.3. 创建launch.json文件
本文使用vscode对Milvus进行调试。在项目根目录下,创建.vscode文件夹,并在.vscode文件夹下创建launch.json文件,写入以下内容(安装Go扩展后,可以通过Add Configuration -> Go: Attach to local process自动生成):
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Milvus",
"type": "go",
"request": "attach",
"mode": "local",
"processId": "${command:pickProcess}"
}
]
}
保存上述内容后,按F5开启调试。在弹出的输入框中输入milvus,即可attach到milvus进程进行调试。
参考:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义