首页 > 数据库 > 国内数据库 > openGauss通过VIP实现的故障转移
作者:IT邦德 中国DBA联盟(ACDU)成员,10余年DBA工作经验, Oracle、PostgreSQL ACE CSDN博客专家及B站知名UP主,全网粉丝10万+ 擅长主流Oracle、MySQL、PG、高斯及Greenplum备份恢复, 安装迁移,性能优化、故障应急处理
本文详细阐述了openGauss通过CM管理,实现的VIP故障转移全过程
随着目前信创产业的发展,应项目的需求,通过高可用的方式实现数据库的故障转移。于是花了点时间研究,通过CM管理,实现了VIP故障转移全过程,在经历了这次故障转移之后,我觉得有必要分享我在此过程中获得的见解
CM(Cluster Manager)是一款数据库管理模块。支持自定义资源监控,提供了数据库主备的状态监控、网络通信故障监控、文件系统故障监控、故障自动主备切换等能力。提供了丰富的数据库管理能力,如节点、实例级的启停,数据库实例状态查询、主备切换、日志管理等。提供了通过REST接口远程查询和接收集群状态的能力。
高可用:CM易用性提升 支持一键式关闭CM集群服务; 支持和内核的安装部署解耦; 支持按事件调用用户自定义脚本; 支持CM组件单独升级,增强数据库集群可靠性; CM根据配置信息,支持用户自定义组件的监控和管 需要注意的是,一主一备模式下,CM只支持基本的安装,启停,检测能力,其他功能不支持。 高可用:CM支持VIP管理 通过VIP可以直接找到主机,连接重连更准更快(毫秒级别); 支持主机故障,CM选出新主时,VIP漂移到新的主上; 当出现双主时,依然可以通过VIP访问到一个主机,降低了双主丢数据的风险。
<?xml version="1.0" encoding="UTF-8"?> <ROOT> <!-- openGauss整体信息 --> <CLUSTER> <!-- 数据库名称 --> <PARAM name="clusterName" value="opengauss" /> <!-- 数据库节点名称(hostname) --> <PARAM name="nodeNames" value="opengauss51m,opengauss51b" /> <!-- 数据库安装目录,与数据库所需其它路径相互独立,没有包含关系--> <PARAM name="gaussdbAppPath" value="/openGauss/app" /> <!-- 日志目录--> <PARAM name="gaussdbLogPath" value="/openGauss/log/omm" /> <!-- 临时文件目录--> <PARAM name="tmpMppdbPath" value="/openGauss/tmp"/> <!-- 数据库工具目录--> <PARAM name="gaussdbToolPath" value="/openGauss/om" /> <!-- 数据库core文件目录--> <PARAM name="corePath" value="/openGauss/corefile"/> <!-- 节点IP,与数据库节点名称列表一一对应 --> <PARAM name="backIp1s" value="192.168.6.11,192.168.6.12"/> </CLUSTER> <!-- 每台服务器上的节点部署信息 --> <DEVICELIST> <!-- 节点1上的部署信息 --> <DEVICE sn="opengauss51m"> <!-- 节点1的主机名称 --> <PARAM name="name" value="opengauss51m"/> <!-- 节点1所在的AZ及AZ优先级 --> <PARAM name="azName" value="AZ1"/> <PARAM name="azPriority" value="1"/> <!-- 节点1的IP,如果服务器只有一个网卡可用,将backIP1和sshIP1配置成同一个IP --> <PARAM name="backIp1" value="192.168.6.11"/> <PARAM name="sshIp1" value="192.168.6.11"/> <!-- cm主 --> <PARAM name="cmsNum" value="1"/> <PARAM name="cmDir" value="/openGauss/cm"/> <PARAM name="cmServerPortBase" value="15300"/> <PARAM name="cmServerListenIp1" value="192.168.6.11,192.168.6.12"/> <PARAM name="cmServerHaIp1" value="192.168.6.11,192.168.6.12"/> <!-- cmServerlevel目前只支持1 --> <PARAM name="cmServerlevel" value="1"/> <!-- cms主及所有备的hostname --> <PARAM name="cmServerRelation" value="opengauss51m,opengauss51b"/> <!--dn--> <PARAM name="dataNum" value="1"/> <PARAM name="dataPortBase" value="15400"/> <PARAM name="dataNode1" value="/openGauss/data/dn,opengauss51b,/openGauss/data/dn"/> <PARAM name="dataNode1_syncNum" value="0"/> </DEVICE> <!-- 节点2上的节点部署信息,其中"name"的值配置为主机名称 --> <DEVICE sn="opengauss51b"> <!-- 节点2的主机名称 --> <PARAM name="name" value="opengauss51b"/> <!-- 节点2所在的AZ及AZ优先级 --> <PARAM name="azName" value="AZ1"/> <PARAM name="azPriority" value="1"/> <!-- 节点2的IP,如果服务器只有一个网卡可用,将backIP1和sshIP1配置成同一个IP --> <PARAM name="backIp1" value="192.168.6.12"/> <PARAM name="sshIp1" value="192.168.6.12"/> <!-- cm --> <PARAM name="cmDir" value="/openGauss/cm"/> <PARAM name="cmServerPortStandby" value="15300"/> </DEVICE> </DEVICELIST> </ROOT>

给omm用户增加sudo权限,所有节点都执行 echo "omm ALL=(ALL) NOPASSWD:ALL">>/etc/sudoers echo "Cmnd_Alias COMMAND_FLAG = /usr/sbin/ifconfig" >> /etc/sudoers
ifconfig ens33:15400 192.168.6.14 netmask 255.255.255.0 up ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.6.11 netmask 255.255.255.0 broadcast 192.168.6.255 inet6 fe80::a281:1dad:5f3f:1be8 prefixlen 64 scopeid 0x20<link> ether 00:0c:29:56:78:64 txqueuelen 1000 (Ethernet) RX packets 70129 bytes 10190915 (9.7 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 445322 bytes 1129835756 (1.0 GiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 ens33:15400: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.6.14 netmask 255.255.255.0 broadcast 192.168.6.255 ether 00:0c:29:56:78:64 txqueuelen 1000 (Ethernet
给集群添加VIP资源 VIP作为openGauss的资源管理 cm_ctl res --add --res_name="VIP_az1" --res_attr="resources_type=VIP,float_ip=192.168.6.14"
将每个实例加到资源中 cm_ctl res --edit --res_name="VIP_az1" --add_inst="node_id=1,res_instance_id=6001" --inst_attr=base_ip=192.168.6.11 cm_ctl res --edit --res_name="VIP_az1" --add_inst="node_id=2,res_instance_id=6002" --inst_attr=base_ip=192.168.6.12
[omm@opengauss51m ~]$ cm_ctl res --check cm_ctl: resource config is valid. 执行check完成后,在cmdataPath/cm_agent/目录下会生成一个自定义资源配置文件cm_resource.json, 检查完成没有错误后,需要手动scp将该文件分发到其他节点
配置/openGauss/data/dn/pg_hba.conf 在数据库pg_hba.conf文件中以sha256方式添加floatIp host all all 192.168.6.14/32 sha256 --cm集群故障自动切换配置前提条件,通过三方网管实现 cd /openGauss/cm/cm_server vi cm_server.conf third_party_gateway_ip = 192.168.6.8 cms_enable_failover_on2nodes = true cms_network_isolation_timeout = 20
[omm@opengauss51m ~]$ gs_om -t stop
Stopping cluster.
=========================================
Successfully stopped cluster.
=========================================
End stop cluster.
[omm@opengauss51m ~]$ gs_om -t start
Starting cluster.
======================================================================
Successfully started primary instance. Wait for standby instance.
======================================================================
.
Successfully started cluster.
======================================================================
cluster_state : Normal
redistributing : No
node_count : 2
Datanode State
primary : 1
standby : 1
secondary : 0
cascade_standby : 0
building : 0
abnormal : 0
down : 0
Successfully started cluster.
查询VIP在哪个节点
[omm@opengauss51m ~]$ cm_ctl show
[ Network Connect State ]
Network timeout: 6s
Current CMServer time: 2023-11-18 21:03:20
Network stat('Y' means connected, otherwise 'N'):
| \ | Y |
| Y | \ |
[ Node Disk HB State ]
Node disk hb timeout: 200s
Current CMServer time: 2023-11-18 21:03:21
Node disk hb stat('Y' means connected, otherwise 'N'):
| N | N |
[ FloatIp Network State ]
node instance base_ip float_ip_name float_ip
-----------------------------------------------------------------
1 opengauss51m 6001 192.168.6.11 VIP_az1 192.168.6.14
##本次实验,我们直接对主库关机,验证高可用
[omm@opengauss51b ~]$ gs_om -t status --detail
[ CMServer State ]
node node_ip instance state
--------------------------------------------------------------------
1 opengauss51m 192.168.6.11 1 /openGauss/cm/cm_server Down
2 opengauss51b 192.168.6.12 2 /openGauss/cm/cm_server Primary
[ Cluster State ]
cluster_state : Degraded
redistributing : No
balanced : No
current_az : AZ_ALL
[ Datanode State ]
node node_ip instance state
-------------------------------------------------------------------------
1 opengauss51m 192.168.6.11 6001 /openGauss/data/dn P Down Unknown
2 opengauss51b 192.168.6.12 6002 /openGauss/data/dn S Primary Normal
##备库变为主库,VIP也飘逸过来了
[omm@opengauss51b ~]$ cm_ctl show
[ Network Connect State ]
Network timeout: 6s
Current CMServer time: 2023-11-18 22:41:44
Network stat('Y' means connected, otherwise 'N'):
| \ | Y |
| Y | \ |
[ Node Disk HB State ]
Node disk hb timeout: 200s
Current CMServer time: 2023-11-18 22:41:45
Node disk hb stat('Y' means connected, otherwise 'N'):
| N | N |
[ FloatIp Network State ]
node instance base_ip float_ip_name float_ip
-----------------------------------------------------------------
2 opengauss51b 6002 192.168.6.12 VIP_az1 192.168.6.14
##然后我们启动主库,恢复集群
--启动集群
[omm@opengauss51m ~]$ gs_om -t start
[omm@opengauss51b ~]$ gs_om -t status --detail
[ CMServer State ]
node node_ip instance state
--------------------------------------------------------------------
1 opengauss51m 192.168.6.11 1 /openGauss/cm/cm_server Standby
2 opengauss51b 192.168.6.12 2 /openGauss/cm/cm_server Primary
[ Cluster State ]
cluster_state : Normal
redistributing : No
balanced : No
current_az : AZ_ALL
[ Datanode State ]
node node_ip instance state
-------------------------------------------------------------------------
1 opengauss51m 192.168.6.11 6001 /openGauss/data/dn P Standby Normal
2 opengauss51b 192.168.6.12 6002 /openGauss/data/dn S Primary Normal
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69947868/viewspace-3014079/ ,如需转载,请注明出处,否则将追究法律责任。