Milvus实战 | 基于Keepalived的高可用方案

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™

发布了25 篇原创文章 · 获赞 20 · 访问量 7992
展开阅读全文

没有更多推荐了,返回首页

分享到微信朋友圈

×

扫一扫,手机浏览