金仓数据库KingbaseES 集群中VIP相关知识总结
关键字:
集群、VIP、ARP、人大金仓、KingbaseES、
VIP是主备集群提供的一种功能,用于应用访问集群的接口。集群在发生故障转移、主备切换等事件时,VIP 始终跟随主库。应用程序使用 VIP 访问数据库,可以尽量减少故障对应用的影响。
ARP
Arp协议是TCP/IP协议中的一种,其作用是将IP地址解析成为对应的物理地址也就是MAC地址,需要进行地址转换的原因是数据链路层的数据传输是通过物理地址进行传输的。
整个转换过程是路由器发送一个arp广播请求,请求IP地址为数据包内的目的地址的主机将自己的MAC地址发送过来。这个arp广播请求会广播到网内的所有主机,在其他主机收到arp请求后,将发送该请求的主机IP地址以及其对应的MAC地址记录下来,保存在主机的一片高速缓存中并更新对应的记录,该缓存会在一定时间内失效,失效后需要广播arp请求重新获取IP和MAC地址。收到请求并更新完缓存之后会检查所请求的IP是否是自己的IP。是的话该主机就发回一个arp应答,包含自己的IP地址和MAC地址,此时这两台主机之间便可以进行数据通信了。
Vip漂移
上面我们已经知道IP地址只是一个逻辑地址,而真正进行主机间数据传输的是物理地址也就是MAC地址。VIP是与集群中的主节点进行绑定的,以下面这组地址为例,219为VIP,217是集群主节点,218是集群的备节点。我们可以看出,VIP的MAC地址和主节点的MAC地址相同。
(192.168.1.219) at 00:21:5A:DB:69:E8 [ether] on bond0
(192.168.1.217) at 00:21:5A:DB:69:E8 [ether] on bond0
(192.168.1.218) at 00:21:5A:DB:7F:C2 [ether] on bond0
接下来我们进行主备切换,此时的地址发生了变化,VIP的MAC地址不再指向原来的主节点217,而是与新的主节点218一致从而进行了绑定。
(192.168.1.219) at 00:21:5A:DB:7F:C2 [ether] on bond0
(192.168.1.217) at 00:21:5A:DB:69:E8 [ether] on bond0
(192.168.1.218) at 00:21:5A:DB:7F:C2 [ether] on bond0
从上面的过程中我们可以总结出集群利用VIP进行数据传输的原理以及漂移的流程。我们向集群数据库发送的数据包是通过VIP进行传递,将数据传递到VIP所绑定的MAC地址也就是集群主节点所在的主机上,即上图中的红色序号①。当主节点发生故障宕机等需要进行主备切换的场景时,VIP会与主机的MAC地址进行解绑,转移到新的从备机升到主节点的主机上,并与新的主节点的MAC地址进行绑定,即上图中的绿色序号②。这样我们传递数据还是会给VIP传递,但是最后实际发送到的却是新的主节点。
VIP完成漂移之后,其对应的MAC地址与其他主机缓存内记录的信息就不再对应,需要刷新其他主机内的arp缓存,完成这一任务采用的是GARP(Gratuitous ARP)协议。GARP协议主要是用来检测IP地址是否冲突,第一个包发出去自己的IP地址、MAC地址以及目的地址,第二个包返回接收到的信息,如果返回的是自己的IP地址及MAC地址,则表明地址没有冲突,如果返回的是其他主机的相关信息,则表明IP地址冲突。其他主机收到第一个包发出去的arp请求后,会刷新关于请求源主机的IP地址及MAC地址的映射。
VIP 相关场景
1) 主库注册:执行操作时,在主库写入primary信息前加载VIP。
2) 主库注销:在删除primary信息后卸载VIP操作。
3) 故障切换:在切换过程中,备库执行promote前,先加载VIP,加载VIP的过程需要检查配置的VIP在网络中是否已经存在,如已经存在会尝试卸载VIP后再次在本机挂载; 挂载动作完成后还会执行arping命令,只有当挂载VIP和arping都执行成功,才会进行promote操作,否则放弃升主。
4) 主备切换:需要先在原主库卸载VIP,再在备库升主前加载VIP。由于VIP 需要在升主动作之前执行,可能会出现在VIP已经挂载而升主尚未完成期间,业务已经通过 VIP来到尚未升主的数据库节点,此时由于数据库仍处于只读状态,增删改操作会暂时无法执行,待数据库完成promote操作后 业务才能完全恢复。
- repmgrd 监控主库进程:每隔check_vip_interval检查一次,如果VIP不存在则加载。
测试方法:删除主库VIP(主库VIP丢失),查看VIP是否会被定时任务检测到故障,并在主节点上重新配置
- repmgrd 监控备库进程:每隔check_vip_interval检查一次,如果VIP存在则卸载。
测试方法:备机上添加VIP,查看是否自动卸载该非法VIP
- 网关故障:repmgrd 进程会退出,其检测VIP的逻辑由kbha进程代替。
测试方法:在repmgrd 进程退出的情况下,删除主库VIP,查看KBHA进程是否能够按照需求进行检测判断。
- 使用集群部署工具添加VIP
测试方法:填写集群配置,VIP使用了被占用的IP,查看集群部署工具是否能够正常判断该IP是否被占用,如果被占用,是否有相关提示。
- 升级到IPV6后添加VIP
测试方法:增加IPV6的VIP时,通过arping判断是否增加成功。
V8R3和V8R6版本关于VIP的用法区别
在V8R3版本中,集群部署需要配置两个VIP,分别是DB VIP(应用连接)和Cluster VIP(集群管理)。DB VIP用于应用的连接访问,在启动集群时被加载到数据库服务的主节点(Primary),当主节点数据库服务down机,触发failover切换时,DB VIP漂移到新的数据库服务主节点。 Cluster vip用于kingbasecluster服务的访问,集群启动时加载到kingbaseclsuter的Master节点,当master节点的kingbasecluster服务down时,会漂移到新的master节点。
在V8R6版本中,仅需要配置一个VIP,即类似于V8R3版本中的DB VIP,用来在数据库节点间进行切换访问。Cluster vip的功能被repmgr进程服务给取代,不再需要通过9999端口访问kingbasecluster服务。除此之外,在V8R6版本中VIP不是必须配置的选项,如果没有对集群配置VIP,则通过JDBC确认操作访问对应的主库或者备库。
参考资料
《KingbaseES高可用最佳应用实践》




