一、概述
多个数据库服务器可以一起工作,这样如果主要的服务器故障则允许其它服务器快速接手它的任务(高可用性),或者可以允许多个计算机提供相同的数据(负载均衡)。理想情况下,数据库服务器能够无缝地一起工作。Halo数据库支持物理复制技术和逻辑复制技术来保证数据库系统的可靠性和数据安全性。repmgr是一个开源工具套件,可以用于管理Halo服务器集群中的复制和故障切换。它通过设置备用服务器、监控复制和执行管理任务(如故障切换或手动切换操作)等。
二、repmgr常用命令
命令 | 功能 |
repmgr primary register | 注册对应服务器的primary节点为主服务器节点 |
repmgr primary unregister | 注销不活动的主服务器节点 |
repmgr standby clone | 从主节点复制数据到standby节点 |
repmgr standby register | 注册对应节点standby节点为备用服务器节点 |
repmgr standby unregister | 注销备用服务器节点 |
repmgr standby promote | 将备服务器节点提升为主服务器节点 |
repmgr standby follow | 将一主多从架构中,其余的standby被服务器节点重新指向新的primary主服务器节点 |
repmgr standby switchover | 将指定备服务器节点提升为主服务器节点,并将primary主服务器降级为备服务器节点 |
repmgr witness register | 注册指定节点为见证服务器节点 |
repmgr witness unregister | 注销见证服务器节点 |
repmgr node status | 查看各节点的基本信息和复制状态 |
repmgr node check | 高可用集群节点状态信息检查 |
repmgr node rejoin | 重新加入一个失效节点到集群 |
repmgr cluster show | 查看集群中已注册的节点基本信息与状态 |
repmgr cluster matrix | 查看集群中所有节点的matrix信息 |
repmgr cluster crosscheck | 查看集群中所有节点间两两交叉连接检测 |
repmgr cluster event | 查看集群事件记录信息 |
repmgr cluster cleanup | 清理集群监控历史 |
三、Witness(见证节点)
witness节点是一个普通的数据库实例,并不是流复制的一部分:它的作用是如果发生故障转移的情况,提供见证信息从而证明是主节点本身不可用,而不是不同的物理网络中断导致的脑裂。
在主节点的同一网络创建witness服务,如果主节点不可用,则备节点可以决定是否可以在不脑裂风险的情况下提升为主节点:如果备节点网络上只是和witness或主节点中的一个节点不通,则很可能存在网络中断,它不应该切换为主节点。如果备节点和witness节点想通,但和主节点不通,这证明不是网络中断,而是主节点本身不可用,因此它可以切换为主节点。
四、自动failover验证
启动守护进程:

主节点本身不可用
初始状态:

关闭集群主节点rep1:

查看备节点rep2的repmgr日志可以得知,备节点rep2尝试6次后无法重新连接到节点“rep1”(ID:1)后进行了自动提升。

查看集群状态:

将rep1节点手动加入集群:

查看集群状态:

主备节点之间网络中断
初始状态:

在集群主节点rep2限制备节点的网络访问:
iptables -A INPUT -s 192.168.192.203 -j DROP

通过查看备节点rep1的repmgr日志我们可以知道备节点rep1在尝试六次连接后,检查了同级见证节点“node3”(ID:3)的状态信息了解到主节点仍然可见,所以备节点rep1就取消故障切换。

查看集群状态:

重新将rep1加入集群:

查看集群状态:

通过引入wintness 节点,repmgr集群可以更可靠地检测和处理主节点故障,并确保在故障发生时进行正确的故障转移。wintness 节点会提高repmgr集群应对网络故障的能力。




