Ubuntu 22+docker+Milvus(Standalone)
Milvus(
·
一、Milvus简介
Milvus(Milvus | High-Performance Vector Database Built for Scale,https://milvus.io/,官网https://milvus.io/) 是由 Zilliz 公司开发的开源向量数据库,专为高效处理非结构化数据(如图像、视频、音频)的向量化存储与检索而设计。它采用云原生架构,支持存储计算分离和 Kubernetes 部署,能弹性扩展至百亿级向量规模。
核心特性
-
高性能检索
支持 GPU 加速和多种索引算法(如 CAGRA、HNSW),实现毫秒级近似最近邻搜索。例如三维向量相似性搜索可快速定位最接近目标的数据点。 -
混合查询能力
支持同时筛选向量相似度和结构化字段,如查找相似图片时限定特定类别标签 - 开发友好性
- 提供 Python/Java/Go 等多语言 SDK
- 轻量版 Milvus Lite 支持
pip install快速部署 - 兼容 PyTorch 等主流框架
应用场景
- 非结构化数据:如文本、语音、图像、视频等,通过嵌入技术转化为向量后存储。
- 人工智能:在聊天机器人、网络搜索等场景中实现相似度检索。
架构特点
- 分层设计:分为接入层、协调服务层、工作节点和存储层,各层独立扩展和容灾。
- 共享存储:计算节点与存储分离,支持数据持久化和增量数据摄取
二、环境准备
Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-144-generic x86_64)
2.1.配置soures.list,可以直接去编辑/etc/apt/sources.list,也可以参考下面的命令
#将主软件源地址替换为阿里云镜像
sudo sed -i 's/archive.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list
#将安全更新源替换为阿里云镜像
sudo sed -i 's/security.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list
sudo apt-get update
2.2.安装docker
2.2.1.下载docker的deb
wget https://mirrors.huaweicloud.com/docker-ce/linux/ubuntu/dists/jammy/pool/stable/amd64/containerd.io_1.7.26-1_amd64.deb
wget https://mirrors.huaweicloud.com/docker-ce/linux/ubuntu/dists/jammy/pool/stable/amd64/docker-ce_28.0.2-1~ubuntu.22.04~jammy_amd64.deb
wget https://mirrors.huaweicloud.com/docker-ce/linux/ubuntu/dists/jammy/pool/stable/amd64/docker-ce-cli_28.0.2-1~ubuntu.22.04~jammy_amd64.deb
wget https://mirrors.huaweicloud.com/docker-ce/linux/ubuntu/dists/jammy/pool/stable/amd64/docker-buildx-plugin_0.22.0-1~ubuntu.22.04~jammy_amd64.deb
wget https://mirrors.huaweicloud.com/docker-ce/linux/ubuntu/dists/jammy/pool/stable/amd64/docker-compose-plugin_2.34.0-1~ubuntu.22.04~jammy_amd64.deb
2.2.2.安装docker命令如下:
dpkg -i ./containerd.io_1.7.26-1_amd64.deb ./docker-ce_28.0.2-1~ubuntu.22.04~jammy_amd64.deb ./docker-ce-cli_28.0.2-1~ubuntu.22.04~jammy_amd64.deb ./docker-buildx-plugin_0.22.0-1~ubuntu.22.04~jammy_amd64.deb ./docker-compose-plugin_2.34.0-1~ubuntu.22.04~jammy_amd64.deb
#或者命令
dpkg -i *.deb
安装后的版本信息如下
docker compose version
#Docker Compose version v2.34.0
docker version
#Client: Docker Engine - Community
# Version: 28.0.2
# API version: 1.48
# Go version: go1.23.7
# Git commit: 0442a73
# Built: Wed Mar 19 14:36:46 2025
# OS/Arch: linux/amd64
# Context: default
#
#Server: Docker Engine - Community
# Engine:
# Version: 28.0.2
# API version: 1.48 (minimum version 1.24)
# Go version: go1.23.7
# Git commit: bea4de2
# Built: Wed Mar 19 14:36:46 2025
# OS/Arch: linux/amd64
# Experimental: false
# containerd:
# Version: 1.7.26
# GitCommit: 753481ec61c7c8955a23d6ff7bc8e4daed455734
# runc:
# Version: 1.2.5
# GitCommit: v1.2.5-0-g59923ef
# docker-init:
# Version: 0.19.0
# GitCommit: de40ad0
2.3.3 配置/etc/docker/daemon.json
#cat /etc/docker/daemon.json
{
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://docker.nju.edu.cn",
"https://hub-mirror.c.163.com",
"https://registry.docker-cn.com"
]
}
#重启docker
systemctl restart docker || service docker restart
#查看docker运行状态
systemctl status docker
#●docker.service - Docker Application Container Engine
# Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: #enabled)
# Active: active (running) since Mon 2025-08-18 08:42:46 CST; 1h 19min ago
#TriggeredBy: ● docker.socket
三、安装Milvus
3.1.1下载脚本
curl -sfL https://raw.githubusercontent.com/milvus-io/milvus/master/scripts/standalone_embed.sh -o standalone_embed.sh
3.1.2 运行
./standalone_embed.sh start
#Milvus is running.
遇到的问题:
错误1:/standalone_embed.sh start
#./standalone_embed.sh
please use bash standalone_embed.sh restart|start|stop|upgrade|delete
root@iZ2zefmyqi46e90ttn3odtZ:~/docker# ./standalone_embed.sh start
Unable to find image 'milvusdb/milvus:v2.6.0' locally
docker: Error response from daemon: Get "https://registry-1.docker.io/v2/": context deadline exceeded
Run 'docker run --help' for more information
Start failed.
原因是/ /etc/docker/daemon.json里面配置的源地址不能用,建议采用科学上网的模式,因为那些镜像的服务器说不定哪天会抽风。修改daemon.json文件后,需要重启一下服务
sudo systemctl daemon-reload
sudo systemctl restart docker
sudo systemctl status docker
问题2:如果打不开,自己新建一个standalone_embed.sh
,直接复制下面的内容:
#!/usr/bin/env bash
# Licensed to the LF AI & Data foundation under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
run_embed() {
cat << EOF > embedEtcd.yaml
listen-client-urls: http://0.0.0.0:2379
advertise-client-urls: http://0.0.0.0:2379
quota-backend-bytes: 4294967296
auto-compaction-mode: revision
auto-compaction-retention: '1000'
EOF
cat << EOF > user.yaml
# Extra config to override default milvus.yaml
EOF
if [ ! -f "./embedEtcd.yaml" ]
then
echo "embedEtcd.yaml file does not exist. Please try to create it in the current directory."
exit 1
fi
if [ ! -f "./user.yaml" ]
then
echo "user.yaml file does not exist. Please try to create it in the current directory."
exit 1
fi
sudo docker run -d \
--name milvus-standalone \
--security-opt seccomp:unconfined \
-e ETCD_USE_EMBED=true \
-e ETCD_DATA_DIR=/var/lib/milvus/etcd \
-e ETCD_CONFIG_PATH=/milvus/configs/embedEtcd.yaml \
-e COMMON_STORAGETYPE=local \
-e DEPLOY_MODE=STANDALONE \
-v $(pwd)/volumes/milvus:/var/lib/milvus \
-v $(pwd)/embedEtcd.yaml:/milvus/configs/embedEtcd.yaml \
-v $(pwd)/user.yaml:/milvus/configs/user.yaml \
-p 19530:19530 \
-p 9091:9091 \
-p 2379:2379 \
--health-cmd="curl -f http://localhost:9091/healthz" \
--health-interval=30s \
--health-start-period=90s \
--health-timeout=20s \
--health-retries=3 \
milvusdb/milvus:v2.6.0 \
milvus run standalone 1> /dev/null
}
wait_for_milvus_running() {
echo "Wait for Milvus Starting..."
while true
do
res=`sudo docker ps|grep milvus-standalone|grep healthy|wc -l`
if [ $res -eq 1 ]
then
echo "Start successfully."
echo "To change the default Milvus configuration, add your settings to the user.yaml file and then restart the service."
break
fi
sleep 1
done
}
start() {
res=`sudo docker ps|grep milvus-standalone|grep healthy|wc -l`
if [ $res -eq 1 ]
then
echo "Milvus is running."
exit 0
fi
res=`sudo docker ps -a|grep milvus-standalone|wc -l`
if [ $res -eq 1 ]
then
sudo docker start milvus-standalone 1> /dev/null
else
run_embed
fi
if [ $? -ne 0 ]
then
echo "Start failed."
exit 1
fi
wait_for_milvus_running
}
stop() {
sudo docker stop milvus-standalone 1> /dev/null
if [ $? -ne 0 ]
then
echo "Stop failed."
exit 1
fi
echo "Stop successfully."
}
delete_container() {
res=`sudo docker ps|grep milvus-standalone|wc -l`
if [ $res -eq 1 ]
then
echo "Please stop Milvus service before delete."
exit 1
fi
sudo docker rm milvus-standalone 1> /dev/null
if [ $? -ne 0 ]
then
echo "Delete milvus container failed."
exit 1
fi
echo "Delete milvus container successfully."
}
delete() {
read -p "Please confirm if you'd like to proceed with the delete. This operation will delete the container and data. Confirm with 'y' for yes or 'n' for no. > " check
if [ "$check" == "y" ] ||[ "$check" == "Y" ];then
delete_container
sudo rm -rf $(pwd)/volumes
sudo rm -rf $(pwd)/embedEtcd.yaml
sudo rm -rf $(pwd)/user.yaml
echo "Delete successfully."
else
echo "Exit delete"
exit 0
fi
}
upgrade() {
read -p "Please confirm if you'd like to proceed with the upgrade. The default will be to the latest version. Confirm with 'y' for yes or 'n' for no. > " check
if [ "$check" == "y" ] ||[ "$check" == "Y" ];then
res=`sudo docker ps -a|grep milvus-standalone|wc -l`
if [ $res -eq 1 ]
then
stop
delete_container
fi
curl -sfL https://raw.githubusercontent.com/milvus-io/milvus/master/scripts/standalone_embed.sh -o standalone_embed_latest.sh && \
bash standalone_embed_latest.sh start 1> /dev/null && \
echo "Upgrade successfully."
else
echo "Exit upgrade"
exit 0
fi
}
case $1 in
restart)
stop
start
;;
start)
start
;;
stop)
stop
;;
upgrade)
upgrade
;;
delete)
delete
;;
*)
echo "please use bash standalone_embed.sh restart|start|stop|upgrade|delete"
;;
esac
更多推荐
所有评论(0)