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
	fi
    
    echo started >>/home/monit.log
fi

4. notify_master脚本

start_milvus.sh

#!/bin/bash

VIP=192.168.16.244
GATEWAY=192.168.16.1
eth=eth0
#另外一台节点的host
host=type1-08

echo "-----------"  >>/home/start.log
echo "start monit"  >>/home/start.log
/sbin/arping -I $eth -c 1 -s $VIP $GATEWAY >/dev/null 2>&1

if [ $? = 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

启动:
systemctl enable keepalived
systemctl start keepalived

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值