Halo Tech

Repmgr集群 Witness节点

一、概述

多个数据库服务器可以一起工作,这样如果主要的服务器故障则允许其它服务器快速接手它的任务(高可用性),或者可以允许多个计算机提供相同的数据(负载均衡)。理想情况下,数据库服务器能够无缝地一起工作。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验证

启动守护进程:

Image

主节点本身不可用

初始状态:

Image

关闭集群主节点rep1:

Image

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

Image

查看集群状态:

Image

将rep1节点手动加入集群:

Image

查看集群状态:

Image

主备节点之间网络中断

初始状态:

Image

在集群主节点rep2限制备节点的网络访问:

iptables -A INPUT -s 192.168.192.203 -j DROP

Image

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

Image

查看集群状态:

Image

重新将rep1加入集群:

Image

查看集群状态:

Image

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