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。 |