Milvus 与 Keepalived
Milvus 作为一款性能领先、易学易用的向量搜索引擎,项目开源以来受到广泛关注,数百名开发者加入了 Milvus 社区开始测试、使用,贡献文档、代码等。随着越来越多的用户在生产系统中部署 Milvus,产品的高可用性(High Availability)也越发重要。
Keepalived 是 Linux 系统自带的高可用组件,以 VRRP(Virtual Router Redundancy Protocol,虚拟路由冗余协议)为实现基础。虚拟路由冗余协议可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个主机(master)和多个备机(backup),当备机收不到 VRRP 包时就认为主机已经宕机,这时就需要根据 VRRP 的优先级来选定一个备机当主机。使用 VRRP 协议保证了主备机之间的高可用。
基于 Milvus 计算、存储分离的架构设计,您可以采用各种成熟的高可用组件轻松实现 Milvus 服务的高可用,本文介绍基于 Keepalived 实现的 Milvus 高可用方案。整体架构如下图所示:
高可用方案实现
具备高可用性的系统一般有两个或两个以上的节点,且分为活动节点及备用节点。当一个节点不可用或者不能处理客户的请求时,响应该请求的服务会及时转移到另外的可用节点来处理,而这些对于客户端是透明的,客户也不用去关心使用的资源具体是怎么提供的,系统会自动完成。
本文介绍的 Milvus 高可用方案将在两台电脑上搭建,一台作为主机(IP: 192.168.1.85),一台作为备机(IP: 192.168.1.38)。主备机需要挂在一个可靠的共享存储,用来存储 Milvus 中的数据。
安装 Milvus
分别在主备机中安装 Milvus,参考https://milvus.io/docs/zh-CN/userguide/install_milvus/ 。
安装 Keepalived 及其依赖
在主备机环境中输入如下命令,修改系统网络:
# vim /etc/sysctl.conf
将net.ipv4.ip_forward=1
前的”#”号删除,将net.ipv4.ip_nonlocal_bind=1
添加到下一行,保存并退出。
输入命令使其生效:
# sysctl -p
在主备机中安装 Keepalived 及其依赖包:
# apt-get install libssl-dev openssl libpopt-dev
# apt-get install keepalived
配置 Keepalived
主备机配置 Keepalived。提供一个虚拟路由地址,本文将虚拟地址设置为192.168.1.104。
# vim /etc/keepalived/keepalived.conf
主机配置文件如下:
! Configuration File for keepalived
global_defs {
router_id sol01 #主备机路由ID
}
vrrp_script chk_milvus {
script "/etc/keepalived/chk_milvus.sh" # 检查主机的milvus是否正常运行脚本
interval 2
weight -20
}
vrrp_instance VI_SERVER {
state MASTER # 主机服务器模式,主机设为MASTER
interface enp7s0 # 主机监控网卡实例
virtual_router_id 51 # VRRP组名,主备机设置必须完全一致
priority 110 # 优先级(1-254),主机设置必须比备机高
authentication { # 认证信息,主备机必须完全一致
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { # 虚拟IP地址,主备机必须完全一致
192.168.1.104/24 # 注意配置子网掩码
}
track_script {
chk_milvus
}
}
备机配置文件如下:
! Configuration File for keepalived
global_defs {
router_id sol02 #主备机路由ID
}
vrrp_instance VI_SERVER {
state BACKUP # 备机设为BACKUP
interface enp3s0 # 备机监控网卡实例
virtual_router_id 51 # VRRP组名,主备机设置必须完全一致
priority 91 # 优先级(1-254),主机设置必须比备机高
authentication { # 认证信息,主备机必须完全一致
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { # 虚拟IP地址,主备机必须完全一致
192.168.1.104/24 # 注意配置子网掩码
}
notify_master "/etc/keepalived/start_docker.sh master" #启动备机milvus server
notify_backup "/etc/keepalived/stop_docker.sh backup" #停止备机milvus server
}
启动 Keepalived
# service keepalived start
查看keepalived状态
# service keepalived start
测试
按上述步骤配置完成后,就可以实现一个基本的 Milvus 高可用方案。
启动主机的 Milvus 服务,客户端就可以通过虚拟地址 192.168.1.104 连接主机的 Milvus 服务。测试采用 1000 万条 128 维向量数据,先将这 1000 万条数据导入表中,即可以进行查询等操作。
然后,手动关闭主机电源或者停止主机的 Milvus 服务来模拟主机端的异常情况。关闭之后,在备机上通过命令 ip a
看见虚拟地址 192.168.1.104 已转移到备机上,docker ps
命令也可以看见备机的 Milvus 服务已经自启动了。客户端通过 192.168.1.104 连接的 Milvus 服务实际已经运行在备机,整个切换过程在数秒内便可完成。这时,客户端就可以通过备机继续进行 Milvus 相关操作。
结语
本文介绍的是一种最基本的 Milvus 高可用方案,旨在为大家提供一些思路,具体搭建步骤和相关脚本请参考 https://github.com/milvus-io/bootcamp/tree/master/solutions/Milvus_HA 。欢迎您加入 Milvus 开源社区,根据具体场景需求和我们一起探索更加完善的高可用方案。
欢迎加入Milvus社区
Milvus 源码
github.com/milvus-io/milvus
Milvus 官网
milvus.io
Milvus Slack 社区
milvusio.slack.com
Milvus CSDN 博客
zilliz.blog.csdn.net
© 2019 ZILLIZ™