milvus高可用搭建
**- 基于keepalived部署milvus高可用问题:
双写冷备:两个写节点不能同时启动,否则会导致数据重复,通过增加与网关的连通性来解决可能同时启动的问题,但不能完全保证没有特殊情况的存在。另外宕机时可能会导致数据丢失。
一写一读:可以同时启动,但是写节点宕机时,数据不能写入。
** - 基于minio的共享存储,写入速度比本地磁盘慢,如果数据量较大需要适当减小index_file_size,默认1024M,可设置为512M。**
一、milvus安装 docker pull milvus
新建目录
/data/milvus/db
/home/milvus/wal
/home/milvus/conf
/home/milvus/logs
/home/milvus/wal
其中db位于minio挂载到本地的目录,其他为本地磁盘目录,conf下存放server_config.yaml
启动:
docker run -d --name milvus -p 19530:19530 -p 19121:19121 -p 9091:9091 -v /data/milvus/db:/var/lib/milvus/db -v /home/milvus/conf:/var/lib/milvus/conf -v /home/milvus/logs:/var/lib/milvus/logs -v /home/milvus/wal:/var/lib/milvus/wal milvusdb/milvus:0.9.0-cpu-d051520-cb92b1
若docker启动报错Cannot set property TasksAccounting
执行:yum update
二、keepalived
1. 安装 yum install keepalived
2. 双写冷备配置 主备节点milvus不能同时启动。
Keepalived监控milvus,vip发生迁移时,首先停掉非vip节点的milvus,然后启动vip节点的milvus。
主节点恢复正常后,vip不从冷备节点转移至主节点,只有冷备节点异常后才转移。
主节点配置:
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id sol01 #主机路由ID
}
vrrp_script monit_milvus
{
script "/home/monit_milvus.sh"
interval 3
}
vrrp_instance VI_SERVER {
state BACKUP# 主机服务器模式,备机设为BACKUP
interface eth0# 主机监控网卡实例
virtual_router_id 39# VRRP组名,主备机设置必须完全一致
priority 110# 优先级(1-254),主机设置必须比备机高,备机可设为90
nopreempt# 不抢占,只在优先级高的机器上设置即可,优先级低的机器不设置
authentication {# 认证信息,主备机必须完全一致
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {# 虚拟IP地址,主备机必须完全一致
192.168.16.244/24# 注意配置子网掩码
}
track_script
{
monit_milvus
}
notify_master "/home/start_milvus.sh"
}
冷备节点配置:
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id sol02 # 备机路由ID
}
vrrp_script monit_milvus
{
script "/home/monit_milvus.sh"
interval 3
}
vrrp_instance VI_SERVER {
state BACKUP# 主机服务器模式,备机设为BACKUP
interface eth0# 备机监控网卡实例
virtual_router_id 39# VRRP组名,主备机设置必须完全一致
priority 91# 优先级(1-254),主机设置必须比备机高,备机可设为90
authentication {# 认证信息,主备机必须完全一致
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {# 虚拟IP地址,主备机必须完全一致
192.168.16.244/24# 注意配置子网掩码
}
track_script
{
monit_milvus
}
notify_master "/home/start_milvus.sh"
}
3. 监控脚本 monit_milvus.sh
#!/bin/bash
# 判断是否获取vip,并且vip与网关是否通
minio=http://192.168.16.41:9000
CHECK_TIME=3
VIP=192.168.16.244
GATEWAY=192.168.16.1
eth=eth0
#另外一台节点的host
host=type1-08# 判断与网关的连通性
/sbin/arping -I $eth -c 2 -s $VIP $GATEWAY >/dev/null 2>&1#为vip且通,不为vip时返回值为2
if [ $? = 0 ] ;
then
echo "是vip且通" >>/home/monit.log
# 判断Minio是否挂载
miniocount=`df | grep /data/milvus | wc -l`
if [[ $miniocount == 0 ]];
then
s3fs -o passwd_file=/etc/passwd-s3fs -o use_path_request_style -o url=$minio -o allow_other -o bucket=milvusdata /data/milvus
fi
# 检测并启动milvus
RUNNING_STATUS=$(docker inspect --format '{{.State.Running}}' milvus)
if [[ "${RUNNING_STATUS}" != "true" ]];
then
ssh root@$host "docker kill milvus"
docker start milvus
echo starting >>/home/monit.log
fiecho started >>/home/monit.log
fi
4. notify_master脚本 start_milvus.sh
#!/bin/bashVIP=192.168.16.244
GATEWAY=192.168.16.1
eth=eth0
#另外一台节点的host
host=type1-08echo "-----------">>/home/start.log
echo "start monit">>/home/start.log
/sbin/arping -I $eth -c 1 -s $VIP $GATEWAY >/dev/null 2>&1if [ $? = 0 ] ;
then
RUNNING_STATUS=$(docker inspect --format '{{.State.Running}}' milvus)
if [[ "${RUNNING_STATUS}" != "true" ]];
then
ssh root@$host "docker kill milvus"
docker start milvus
echo "start milvus">>/home/start.log
fi
else
RUNNING_STATUS=$(docker inspect --format '{{.State.Running}}' milvus)
if [[ "${RUNNING_STATUS}" == "true" ]];
then
docker kill milvus
echo "kill milvus">>/home/start.log
fi
fi
【milvus高可用搭建】启动:
systemctl enable keepalived
systemctl start keepalived
推荐阅读
- JS中的各种宽高度定义及其应用
- 眼光要放高远
- 考研英语阅读终极解决方案——阅读理解如何巧拿高分
- 《魔法科高中的劣等生》第26卷(Invasion篇)发售
- 高天天工作室|溧清的剧本4
- 托福听力高分备考方案
- 周老师《金鸡图》
- 《高老头》听后感
- 高大上还是路边摊
- 唐嫣可真会穿,西装搭牛仔裤都能穿出高级感,一双大长腿太抢镜