磐维数据库双中心容灾流复制集群搭建
- IT业界
- 2025-08-24 21:12:01

1. 架构
磐维数据库PanWeiDB V2.0.0基于gs_sdr工具,在不借助额外存储介质的情况下实现跨Region的异地容灾。提供流式容灾搭建,容灾升主,计划内主备切换,容灾解除、容灾状态监控等功能。
2. 部署双中心磐维集群 2.1. 主集群角色
主机IP
主机名
主
192.168.3.43
db43
备 1
192.168.3.44
db44
备 2
192.168.3.45
db45
2.1.1. cat panweidb1m2s.xml(主) <?xml version="1.0" encoding="utf-8"?> <ROOT> <!-- 整体信息 --> <CLUSTER> <!-- 数据库集群名称 --> <PARAM name="clusterName" value="PanWeiDB" /> <!-- 数据库节点名称(hostname) --> <PARAM name="nodeNames" value="gdb43,gdb44,gdb45"/> <!-- 数据库安装目录--> <PARAM name="gaussdbAppPath" value="/data/panweidb/app" /> <!-- 日志目录--> <PARAM name="gaussdbLogPath" value="/data/panweidb/log" /> <PARAM name="tmpMppdbPath" value="/data/panweidb/tmp"/> <PARAM name="gaussdbToolPath" value="/data/panweidb/tool" /> <!--数据库core文件目录--> <PARAM name="corePath" value="/data/panweidb/corefile"/> <!-- 节点IP,与数据库节点名称列表一一对应 --> <PARAM name="backIp1s" value="192.168.3.43,192.168.3.44,192.168.3.45"/> </CLUSTER> <DEVICELIST> <!-- 节点1上的部署信息 --> <DEVICE sn="gdb43"> <PARAM name="name" value="gdb43"/> <!-- 节点1所在的AZ及AZ优先级 --> <PARAM name="azName" value="AZ1"/> <PARAM name="azPriority" value="1"/> <!-- 节点1的IP,如果服务器只有一个网卡可用,将backIP1和sshIP1配置成同一个IP --> <PARAM name="backIp1" value="192.168.3.43"/> <PARAM name="sshIp1" value="192.168.3.43"/> <!-- cm 管理节点部署信息 --> <PARAM name="cmsNum" value="1"/> <!-- 主CM Server端口号,默认值5000 --> <PARAM name="cmServerPortBase" value="18800"/> <!-- cmServerListenIp1。CM Server用于侦听CM Agent连接请求或DBA管理请求的IP地址 --> <PARAM name="cmServerListenIp1" value="192.168.3.43,192.168.3.44,192.168.3.45"/> <!-- cmServerHaIp1。主、备CM Server间通信的IP地址。 Value中左边为主CM Server的主机IP地址,右边为备CM Server的主机IP地址。 未设置时,默认根据主、备CM Server所在主机的backIp1生成。--> <PARAM name="cmServerHaIp1" value="192.168.3.43,192.168.3.44,192.168.3.45"/> <PARAM name="cmServerlevel" value="1"/> <PARAM name="cmServerRelation" value="gdb43,gdb44,gdb45"/> <!-- cmDir。CM数据文件路径。保存CM Server和CM Agent用到的数据文件,参数文件等。 各集群主机上均需配置该参数。--> <PARAM name="cmDir" value="/data/panweidb/cmserver"/> <!-- dn 数据节点 --> <PARAM name="dataNum" value="1"/> <PARAM name="dataPortBase" value="17700"/> <PARAM name="dataListenIp1" value="192.168.3.43,192.168.3.44,192.168.3.45"/> <PARAM name="dataNode1" value="/data/panweidb/data,gdb44,/data/panweidb/data,gdb45,/data/panweidb/data"/> <PARAM name="dataNode2_syncNum" value="1"/> </DEVICE> <DEVICE sn="gdb44"> <PARAM name="name" value="gdb44"/> <PARAM name="azName" value="AZ1"/> <PARAM name="azPriority" value="1"/> <PARAM name="backIp1" value="192.168.3.44"/> <PARAM name="sshIp1" value="192.168.3.44"/> <!-- cm 管理节点 --> <!-- cmServerPortStandby。备CM Server端口号,默认值5500 --> <PARAM name="cmServerPortStandby" value="18800"/> <PARAM name="cmDir" value="/data/panweidb/cmserver"/> </DEVICE> <DEVICE sn="gdb45"> <PARAM name="name" value="gdb45"/> <PARAM name="azName" value="AZ1"/> <PARAM name="azPriority" value="1"/> <PARAM name="backIp1" value="192.168.3.45"/> <PARAM name="sshIp1" value="192.168.3.45"/> <!-- cm 管理节点 --> <!-- cmServerPortStandby。备CM Server端口号,默认值5500 --> <PARAM name="cmServerPortStandby" value="18800"/> <PARAM name="cmDir" value="/data/panweidb/cmserver"/> </DEVICE> </DEVICELIST> </ROOT> 2.1.2. 状态检查 cm_ctl query -Cdvip gs_om -t status --detail 2.2. 备集群角色
主机IP
主机名
主
192.168.3.46
db46
备 1
192.168.3.47
db47
备 2
192.168.3.48
db48
2.2.1. cat panweidb1m2s.xml(备) <?xml version="1.0" encoding="utf-8"?> <ROOT> <CLUSTER> <PARAM name="clusterName" value="panweidb" /> <PARAM name="nodeNames" value="gdb46,gdb47,gdb48"/> <PARAM name="gaussdbAppPath" value="/data/panweidb/app" /> <PARAM name="gaussdbLogPath" value="/data/panweidb/log" /> <PARAM name="tmpMppdbPath" value="/data/panweidb/tmp"/> <PARAM name="gaussdbToolPath" value="/data/panweidb/tool" /> <PARAM name="corePath" value="/data/panweidb/corefile"/> <PARAM name="backIp1s" value="192.168.3.46,192.168.3.47,192.168.3.48"/> </CLUSTER> <DEVICELIST> <DEVICE sn="gdb46"> <PARAM name="name" value="gdb46"/> <PARAM name="azName" value="AZ1"/> <PARAM name="azPriority" value="1"/> <PARAM name="backIp1" value="192.168.3.46"/> <PARAM name="sshIp1" value="192.168.3.46"/> <PARAM name="cmsNum" value="1"/> <PARAM name="cmServerPortBase" value="18800"/> <PARAM name="cmServerListenIp1" value="192.168.3.46,192.168.3.47,192.168.3.48"/> <PARAM name="cmServerHaIp1" value="192.168.3.46,192.168.3.47,192.168.3.48"/> <PARAM name="cmServerlevel" value="1"/> <PARAM name="cmServerRelation" value="gdb46,gdb47,gdb48"/> <PARAM name="cmDir" value="/data/panweidb/cm"/> <PARAM name="dataNum" value="1"/> <PARAM name="dataPortBase" value="17700"/> <PARAM name="dataNode1" value="/data/panweidb/data,gdb47,/data/panweidb/data,gdb48,/data/panweidb/data"/> <PARAM name="dataNode1_syncNum" value="1"/> </DEVICE> <DEVICE sn="gdb47"> <PARAM name="name" value="gdb47"/> <PARAM name="azName" value="AZ1"/> <PARAM name="azPriority" value="1"/> <PARAM name="backIp1" value="192.168.3.47"/> <PARAM name="sshIp1" value="192.168.3.47"/> <PARAM name="cmServerPortStandby" value="18800"/> <PARAM name="cmDir" value="/data/panweidb/cm"/> </DEVICE> <DEVICE sn="gdb48"> <PARAM name="name" value="gdb48"/> <PARAM name="azName" value="AZ1"/> <PARAM name="azPriority" value="1"/> <PARAM name="backIp1" value="192.168.3.48"/> <PARAM name="sshIp1" value="192.168.3.48"/> <PARAM name="cmServerPortStandby" value="18800"/> <PARAM name="cmDir" value="/data/panweidb/cm"/> </DEVICE> </DEVICELIST> </ROOT> 2.2.2. 状态检查 cm_ctl query -Cdvip gs_om -t status --detail 3. 搭建双中心容灾环境 3.1. 准备配置文件 3.1.1. 主中心sdr配置与主集群部署配置基本相同,仅添加了以下三个sdr特有参数,其中value字段中的每个括号为一个数据库服务器的两个IP。如灾备环境不跨池,两个IP均配置为服务器业务IP;如为跨池资源,localStreamIpmap1两个IP均配置为服务器业务IP,remoteStreamIpmap1前一个配置为资源池内业务IP,后一个配置为跨资源池承载网IP(三个节点均需要配置)。
<!-- sdr 配置 -->
<PARAM name="localStreamIpmap1" value="(192.168.3.43,192.168.3.43),(192.168.3.44,192.168.3.44),(192.168.3.45,192.168.3.45"/>
<PARAM name="remoteStreamIpmap1" value="(192.168.3.46,192.168.3.46),(192.168.3.47,192.168.3.47),(192.168.3.48,192.168.3.48)"/>
<PARAM name="remotedataPortBase" value="17700"/>
<?xml version="1.0" encoding="utf-8"?> <ROOT> <!-- 整体信息 --> <CLUSTER> <!-- 数据库集群名称 --> <PARAM name="clusterName" value="PanWeiDB" /> <!-- 数据库节点名称(hostname) --> <PARAM name="nodeNames" value="gdb43,gdb44,gdb45"/> <!-- 数据库安装目录--> <PARAM name="gaussdbAppPath" value="/data/panweidb/app" /> <!-- 日志目录--> <PARAM name="gaussdbLogPath" value="/data/panweidb/log" /> <PARAM name="tmpMppdbPath" value="/data/panweidb/tmp"/> <PARAM name="gaussdbToolPath" value="/data/panweidb/tool" /> <!--数据库core文件目录--> <PARAM name="corePath" value="/data/panweidb/corefile"/> <!-- 节点IP,与数据库节点名称列表一一对应 --> <PARAM name="backIp1s" value="192.168.3.43,192.168.3.44,192.168.3.45"/> </CLUSTER> <DEVICELIST> <!-- 节点1上的部署信息 --> <DEVICE sn="gdb43"> <PARAM name="name" value="gdb43"/> <!-- 节点1所在的AZ及AZ优先级 --> <PARAM name="azName" value="AZ1"/> <PARAM name="azPriority" value="1"/> <!-- 节点1的IP,如果服务器只有一个网卡可用,将backIP1和sshIP1配置成同一个IP --> <PARAM name="backIp1" value="192.168.3.43"/> <PARAM name="sshIp1" value="192.168.3.43"/> <!-- cm 管理节点部署信息 --> <PARAM name="cmsNum" value="1"/> <!-- 主CM Server端口号,默认值5000 --> <PARAM name="cmServerPortBase" value="18800"/> <!-- cmServerListenIp1。CM Server用于侦听CM Agent连接请求或DBA管理请求的IP地址 --> <PARAM name="cmServerListenIp1" value="192.168.3.43,192.168.3.44,192.168.3.45"/> <!-- cmServerHaIp1。主、备CM Server间通信的IP地址。 Value中左边为主CM Server的主机IP地址,右边为备CM Server的主机IP地址。 未设置时,默认根据主、备CM Server所在主机的backIp1生成。--> <PARAM name="cmServerHaIp1" value="192.168.3.43,192.168.3.44,192.168.3.45"/> <PARAM name="cmServerlevel" value="1"/> <PARAM name="cmServerRelation" value="gdb43,gdb44,gdb45"/> <!-- cmDir。CM数据文件路径。保存CM Server和CM Agent用到的数据文件,参数文件等。 各集群主机上均需配置该参数。--> <PARAM name="cmDir" value="/data/panweidb/cmserver"/> <!-- dn 数据节点 --> <PARAM name="dataNum" value="1"/> <PARAM name="dataPortBase" value="17700"/> <PARAM name="dataListenIp1" value="192.168.3.43,192.168.3.44,192.168.3.45"/> <PARAM name="dataNode1" value="/data/panweidb/data,gdb44,/data/panweidb/data,gdb45,/data/panweidb/data"/> <PARAM name="dataNode1_syncNum" value="2"/> <!-- sdr 配置 --> <PARAM name="localStreamIpmap1" value="(192.168.3.43,192.168.3.43),(192.168.3.44,192.168.3.44),(192.168.3.45,192.168.3.45"/> <PARAM name="remoteStreamIpmap1" value="(192.168.3.46,192.168.3.46),(192.168.3.47,192.168.3.47),(192.168.3.48,192.168.3.48)"/> <PARAM name="remotedataPortBase" value="17700"/> </DEVICE> <DEVICE sn="gdb44"> <PARAM name="name" value="gdb44"/> <PARAM name="azName" value="AZ1"/> <PARAM name="azPriority" value="1"/> <PARAM name="backIp1" value="192.168.3.44"/> <PARAM name="sshIp1" value="192.168.3.44"/> <!-- cm 管理节点 --> <!-- cmServerPortStandby。备CM Server端口号,默认值5500 --> <PARAM name="cmServerPortStandby" value="18800"/> <PARAM name="cmDir" value="/data/panweidb/cmserver"/> </DEVICE> <DEVICE sn="gdb45"> <PARAM name="name" value="gdb45"/> <PARAM name="azName" value="AZ1"/> <PARAM name="azPriority" value="1"/> <PARAM name="backIp1" value="192.168.3.45"/> <PARAM name="sshIp1" value="192.168.3.45"/> <!-- cm 管理节点 --> <!-- cmServerPortStandby。备CM Server端口号,默认值5500 --> <PARAM name="cmServerPortStandby" value="18800"/> <PARAM name="cmDir" value="/data/panweidb/cmserver"/> </DEVICE> </DEVICELIST> </ROOT> 3.1.2. 从中心sdr配置与从集群部署配置基本相同,仅添加了以下三个sdr特有参数,其中value字段中的每个括号为一个数据库服务器的两个IP。如灾备环境不跨池,两个IP均配置为服务器业务IP;如为跨池资源,localStreamIpmap1两个IP均配置为服务器业务IP,remoteStreamIpmap1前一个配置为资源池内业务IP,后一个配置为跨资源池承载网IP(三个节点均需要配置)。
<!-- sdr 配置 -->
<PARAM name="localStreamIpmap1" value="(192.168.3.46,192.168.3.46),(192.168.3.47,192.168.3.47),(192.168.3.48,192.168.3.48)"/>
<PARAM name="remoteStreamIpmap1" value="(192.168.3.43,192.168.3.43),(192.168.3.44,192.168.3.44),(192.168.3.45,192.168.3.45)"/>
<PARAM name="remotedataPortBase" value="17700"/>
<?xml version="1.0" encoding="utf-8"?> <ROOT> <!-- 整体信息 --> <CLUSTER> <!-- 数据库集群名称 --> <PARAM name="clusterName" value="PanWeiDB" /> <!-- 数据库节点名称(hostname) --> <PARAM name="nodeNames" value="gdb46,gdb47,gdb48"/> <!-- 数据库安装目录--> <PARAM name="gaussdbAppPath" value="/data/panweidb/app" /> <!-- 日志目录--> <PARAM name="gaussdbLogPath" value="/data/panweidb/log" /> <PARAM name="tmpMppdbPath" value="/data/panweidb/tmp"/> <PARAM name="gaussdbToolPath" value="/data/panweidb/tool" /> <!--数据库core文件目录--> <PARAM name="corePath" value="/data/panweidb/corefile"/> <!-- 节点IP,与数据库节点名称列表一一对应 --> <PARAM name="backIp1s" value="192.168.3.46,192.168.3.47,192.168.3.48"/> </CLUSTER> <DEVICELIST> <!-- 节点1上的部署信息 --> <DEVICE sn="gdb46"> <PARAM name="name" value="gdb46"/> <!-- 节点1所在的AZ及AZ优先级 --> <PARAM name="azName" value="AZ1"/> <PARAM name="azPriority" value="1"/> <!-- 节点1的IP,如果服务器只有一个网卡可用,将backIP1和sshIP1配置成同一个IP --> <PARAM name="backIp1" value="192.168.3.46"/> <PARAM name="sshIp1" value="192.168.3.46"/> <!-- cm 管理节点部署信息 --> <PARAM name="cmsNum" value="1"/> <!-- 主CM Server端口号,默认值5000 --> <PARAM name="cmServerPortBase" value="18800"/> <!-- cmServerListenIp1。CM Server用于侦听CM Agent连接请求或DBA管理请求的IP地址 --> <PARAM name="cmServerListenIp1" value="192.168.3.46,192.168.3.47,192.168.3.48"/> <!-- cmServerHaIp1。主、备CM Server间通信的IP地址。 Value中左边为主CM Server的主机IP地址,右边为备CM Server的主机IP地址。 未设置时,默认根据主、备CM Server所在主机的backIp1生成。--> <PARAM name="cmServerHaIp1" value="192.168.3.46,192.168.3.47,192.168.3.48"/> <PARAM name="cmServerlevel" value="1"/> <PARAM name="cmServerRelation" value="gdb46,gdb47,gdb48"/> <!-- cmDir。CM数据文件路径。保存CM Server和CM Agent用到的数据文件,参数文件等。 各集群主机上均需配置该参数。--> <PARAM name="cmDir" value="/data/panweidb/cmserver"/> <!-- dn 数据节点 --> <PARAM name="dataNum" value="1"/> <PARAM name="dataPortBase" value="17700"/> <PARAM name="dataListenIp1" value="192.168.3.46,192.168.3.47,192.168.3.48"/> <PARAM name="dataNode1" value="/data/panweidb/data,gdb47,/data/panweidb/data,gdb48,/data/panweidb/data"/> <PARAM name="dataNode1_syncNum" value="2"/> <!-- sdr 配置 --> <PARAM name="localStreamIpmap1" value="(192.168.3.46,192.168.3.46),(192.168.3.47,192.168.3.47),(192.168.3.48,192.168.3.48)"/> <PARAM name="remoteStreamIpmap1" value="(192.168.3.43,192.168.3.43),(192.168.3.44,192.168.3.44),(192.168.3.45,192.168.3.45)"/> <PARAM name="remotedataPortBase" value="17700"/> </DEVICE> <DEVICE sn="gdb47"> <PARAM name="name" value="gdb47"/> <PARAM name="azName" value="AZ1"/> <PARAM name="azPriority" value="1"/> <PARAM name="backIp1" value="192.168.3.47"/> <PARAM name="sshIp1" value="192.168.3.47"/> <!-- cm 管理节点 --> <!-- cmServerPortStandby。备CM Server端口号,默认值5500 --> <PARAM name="cmServerPortStandby" value="18800"/> <PARAM name="cmDir" value="/data/panweidb/cmserver"/> </DEVICE> <DEVICE sn="gdb48"> <PARAM name="name" value="gdb48"/> <PARAM name="azName" value="AZ1"/> <PARAM name="azPriority" value="1"/> <PARAM name="backIp1" value="192.168.3.48"/> <PARAM name="sshIp1" value="192.168.3.48"/> <!-- cm 管理节点 --> <!-- cmServerPortStandby。备CM Server端口号,默认值5500 --> <PARAM name="cmServerPortStandby" value="18800"/> <PARAM name="cmDir" value="/data/panweidb/cmserver"/> </DEVICE> </DEVICELIST> </ROOT> 3.2. 创建容灾用户在主从集群均创建容灾用户。
create user sdr_pw with replication password 'sdr3@repw';
3.3. 创建容灾关系 3.3.1. 启动主中心主中心在创建容灾关系过程中,会等待从中心启动,因此在启动主中心后,不需要等待主中心启动完毕,即启动从中心。
在 192.168.3.43 安装用户下执行:
gs_sdr -t start -m primary -X /home/omm/soft/pwdb_h.xml -U sdr_pw -W sdr3@repw 3.3.2. 启动从中心在启动主中心后,不需要等待主中心启动完毕,即启动从中心。
在 192.168.3.46 安装用户下执行:
gs_sdr -t start -m disaster_standby -X /home/omm/soft/pwdb_zz.xml -U sdr_pw -W sdr3@repw 3.4. 查看容灾状态 3.4.1. 主中心状态在 192.168.3.43 安装用户下执行:
gs_sdr -t query cm_ctl query -Cdvip gs_om -t status --detail 3.4.2. 从中心状态在 192.168.3.46 安装用户下执行:
gs_sdr -t query cm_ctl query -Cdvip gs_om -t status --detail 3.4.3. 查看复制槽配置 3.4.3.1. 主中心主节点配置详情在 192.168.3.43 执行:
grep replconninfo /data/panweidb/data/postgresql.conf 3.4.3.2. 从中心主节点配置详情在152.57.82.136执行:
grep replconninfo /data/panweidb/data/postgresql.conf 3.4.4. 查看复制槽状态 3.4.4.1. 主中心主节点查询结果在 192.168.3.43 安装用户下连接数据库执行:
select * from pg_replication_slots; select * from pg_stat_replication; 3.4.4.2. 从中心主节点查询结果在 192.168.3.46 安装用户下连接数据库执行:
select * from pg_replication_slots; select * from pg_stat_replication; 3.4.5. gs_sdr -t query容灾查询状态说明项目
含义
值
说明
备注
hadr_cluster_stat
流式容灾中数据库实例状态。
normal
标识该数据库实例未参与流式容灾。
-
full_backup
主数据库实例数据全量复制中。
流式容灾中仅主数据库实例有此状态。
archive
主数据库实例日志流式复制中。
流式容灾中仅主数据库实例有此状态。
backup_fail
主数据库实例数据全量复制失败。
流式容灾中仅主数据库实例有此状态。
archive_fail
主数据库实例日志流式复制失败。
流式容灾中仅主数据库实例有此状态。
switchover
计划内主备倒换中。
流式容灾中主备数据库实例皆有此状态。
restore
灾备数据库实例数据全量恢复中。
流式容灾中仅灾备数据库实例有此状态。
restore_fail
灾备数据库实例全备恢复失败。
流式容灾中仅灾备数据库实例有此状态。
recovery
灾备数据库实例日志流式复制中。
流式容灾中仅灾备数据库实例有此状态。
recovery_fail
灾备数据库实例日志流式复制失败。
流式容灾中仅灾备数据库实例有此状态。
promote
灾备数据库实例升主中。
流式容灾中仅灾备数据库实例有此状态。
promote_fail
灾备数据库实例升主失败。
流式容灾中仅灾备数据库实例有此状态。
hadr_switchover_stat
流式容灾主备数据库实例计划内倒换进度展示。
百分比。
倒换进度展示。
-
hadr_failover_stat
流式容灾灾备数据库实例升主进度展示。
百分比。
倒换进度展示。
-
RTO
此时发生灾难,数据恢复所需要的时长。
空
数据库实例停机,网络异常等导致流式容灾中断。
流式容灾中仅主数据库实例可查。
非空
数据恢复所需要的时长,单位s。
RPO
此时发生灾难,数据库实例丢失的数据时长。
空
数据库实例停机,网络异常等导致流式容灾中断。
流式容灾中仅主数据库实例可查。
非空
数据库实例丢失的数据时长,单位s。
磐维数据库双中心容灾流复制集群搭建由讯客互联IT业界栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“磐维数据库双中心容灾流复制集群搭建”