磐维数据库,简称"PanWeiDB"。是中国移动信息技术中心首个基于中国本土开源数据库打造的面向ICT基础设施的自研数据库产品。其产品内核能力基于华为openGauss开源软件,并进一步提升了系统稳定性。
本文将介绍磐维数据库PanWeiDB 2.0基于gs_sdr工具,且不借助额外存储介质的情况下实现跨区域的异地容灾搭建配置,容灾状态监控、容灾解除、计划内主备切换等功能。
1.系统架构

2.架构优势
- 主集群具备单集群组网的优点,只有主集群彻底不可用后才需要手动切换。
- 跨集群(异地)复制链路无论是否发生容灾切换都只有一条,占用网络带宽相对较少。
- 组网更加灵活,主集群和灾备集群都可以选择不同的组网。
- 支持灾备集群failover。
- 支持主备集群计划内switchover。
3.部署双中心集群
参考磐维2.0集中式安装的两种方式分别在两个中心搭建两套集群,注意确保两个集群安装用户一致。
主中心集群部署后的初始状态如下:

从中心集群部署后的初始状态如下:

4.配置双中心容灾环境
准备容灾配置文件
与主集群部署配置基本相同,仅添加如下三个sdr特有参数:
<PARAM name="localStreamIpmap1" value="(x.x.x.87,x.x.x.87),(x.x.x.88,x.x.x.88),(x.x.x.86,x.x.x.86)"/>
<PARAM name="remoteStreamIpmap1" value="(x.x.x.71,x.x.x.71),(x.x.x.72,x.x.x.72),(x.x.x.73,x.x.x.73)"/>
<PARAM name="remotedataPortBase" value="17700"/>
注意:如果灾备环境跨池资源,localStreamIpmap1两个IP均配置为服务器业务IP,remoteStreamIpmap1前一个配置为资源池内业务IP,后一个配置为跨资源池承载网IP(三个节点均需要配置)。
完整的配置文件pwdb_m_sdr.xml内容如下:
<?xml version="1.0" encoding="utf-8"?>
<ROOT>
<CLUSTER>
<PARAM name="clusterName" value="panweidb" />
<PARAM name="nodeNames" value="hostname1,hostname2,hostname3"/>
<PARAM name="gaussdbAppPath" value="/database/panweidb/app" />
<PARAM name="gaussdbLogPath" value="/database/panweidb/log" />
<PARAM name="tmpMppdbPath" value="/database/panweidb/tmp"/>
<PARAM name="gaussdbToolPath" value="/database/panweidb/tool" />
<PARAM name="corePath" value="/database/panweidb/corefile"/>
<PARAM name="backIp1s" value="x.x.x.87,x.x.x.88,x.x.x.86"/>
</CLUSTER>
<DEVICELIST>
<DEVICE sn="hostname1">
<PARAM name="name" value="hostname1"/>
<PARAM name="azName" value="AZ1"/>
<PARAM name="azPriority" value="1"/>
<PARAM name="backIp1" value="x.x.x.87"/>
<PARAM name="sshIp1" value="x.x.x.87"/>
<PARAM name="cmsNum" value="1"/>
<PARAM name="cmServerPortBase" value="18800"/>
<PARAM name="cmServerListenIp1" value="x.x.x.87,x.x.x.88,x.x.x.86"/>
<PARAM name="cmServerHaIp1" value="x.x.x.87,x.x.x.88,x.x.x.86"/>
<PARAM name="cmServerlevel" value="1"/>
<PARAM name="cmServerRelation" value="hostname1,hostname2,hostname3"/>
<PARAM name="cmDir" value="/database/panweidb/cm"/>
<PARAM name="dataNum" value="1"/>
<PARAM name="dataPortBase" value="17700"/>
<PARAM name="dataNode1" value="/database/panweidb/data,hostname2,/database/panweidb/data,hostname3,/database/panweidb/data"/>
<PARAM name="dataNode1_syncNum" value="2"/>
<PARAM name="localStreamIpmap1" value="(x.x.x.87,x.x.x.87),(x.x.x.88,x.x.x.88),(x.x.x.86,x.x.x.86)"/>
<PARAM name="remoteStreamIpmap1" value="(x.x.x.71,x.x.x.71),(x.x.x.72,x.x.x.72),(x.x.x.73,x.x.x.73)"/>
<PARAM name="remotedataPortBase" value="17700"/>
</DEVICE>
<DEVICE sn="hostname2">
<PARAM name="name" value="hostname2"/>
<PARAM name="azName" value="AZ1"/>
<PARAM name="azPriority" value="1"/>
<PARAM name="backIp1" value="x.x.x.88"/>
<PARAM name="sshIp1" value="x.x.x.88"/>
<PARAM name="cmServerPortStandby" value="18800"/>
<PARAM name="cmDir" value="/database/panweidb/cm"/>
</DEVICE>
<DEVICE sn="hostname3">
<PARAM name="name" value="hostname3"/>
<PARAM name="azName" value="AZ1"/>
<PARAM name="azPriority" value="1"/>
<PARAM name="backIp1" value="x.x.x.86"/>
<PARAM name="sshIp1" value="x.x.x.86"/>
<PARAM name="cmServerPortStandby" value="18800"/>
<PARAM name="cmDir" value="/database/panweidb/cm"/>
</DEVICE>
</DEVICELIST>
</ROOT>
从中心配置类似,完整的配置文件pwdb_s_sdr.xml内容如下:
<?xml version="1.0" encoding="utf-8"?>
<ROOT>
<CLUSTER>
<PARAM name="clusterName" value="panweidb" />
<PARAM name="nodeNames" value="hostname4,hostname5,hostname6"/>
<PARAM name="gaussdbAppPath" value="/database/panweidb/app" />
<PARAM name="gaussdbLogPath" value="/database/panweidb/log" />
<PARAM name="tmpMppdbPath" value="/database/panweidb/tmp"/>
<PARAM name="gaussdbToolPath" value="/database/panweidb/tool" />
<PARAM name="corePath" value="/database/panweidb/corefile"/>
<PARAM name="backIp1s" value="x.x.x.71,x.x.x.72,x.x.x.73"/>
</CLUSTER>
<DEVICELIST>
<DEVICE sn="hostname4">
<PARAM name="name" value="hostname4"/>
<PARAM name="azName" value="AZ1"/>
<PARAM name="azPriority" value="1"/>
<PARAM name="backIp1" value="x.x.x.71"/>
<PARAM name="sshIp1" value="x.x.x.71"/>
<PARAM name="cmsNum" value="1"/>
<PARAM name="cmServerPortBase" value="18800"/>
<PARAM name="cmServerListenIp1" value="x.x.x.71,x.x.x.72,x.x.x.73"/>
<PARAM name="cmServerHaIp1" value="x.x.x.71,x.x.x.72,x.x.x.73"/>
<PARAM name="cmServerlevel" value="1"/>
<PARAM name="cmServerRelation" value="hostname4,hostname5,hostname6"/>
<PARAM name="cmDir" value="/database/panweidb/cm"/>
<PARAM name="dataNum" value="1"/>
<PARAM name="dataPortBase" value="17700"/>
<PARAM name="dataNode1" value="/database/panweidb/data,hostname5,/database/panweidb/data,hostname6,/database/panweidb/data"/>
<PARAM name="dataNode1_syncNum" value="2"/>
<PARAM name="localStreamIpmap1" value="(x.x.x.71,x.x.x.71),(x.x.x.72,x.x.x.72),(x.x.x.73,x.x.x.73)"/>
<PARAM name="remoteStreamIpmap1" value="(x.x.x.87,x.x.x.87),(x.x.x.88,x.x.x.88),(x.x.x.86,x.x.x.86)"/>
<PARAM name="remotedataPortBase" value="17700"/>
</DEVICE>
<DEVICE sn="hostname5">
<PARAM name="name" value="hostname5"/>
<PARAM name="azName" value="AZ1"/>
<PARAM name="azPriority" value="1"/>
<PARAM name="backIp1" value="x.x.x.72"/>
<PARAM name="sshIp1" value="x.x.x.72"/>
<PARAM name="cmServerPortStandby" value="18800"/>
<PARAM name="cmDir" value="/database/panweidb/cm"/>
</DEVICE>
<DEVICE sn="hostname6">
<PARAM name="name" value="hostname6"/>
<PARAM name="azName" value="AZ1"/>
<PARAM name="azPriority" value="1"/>
<PARAM name="backIp1" value="x.x.x.73"/>
<PARAM name="sshIp1" value="x.x.x.73"/>
<PARAM name="cmServerPortStandby" value="18800"/>
<PARAM name="cmDir" value="/database/panweidb/cm"/>
</DEVICE>
</DEVICELIST>
</ROOT>
创建容灾用户
在主从集群都创建容灾用户:
create user sdr_test with replication password 'xxx';
创建容灾关系
先启动主中心(主中心主节点):
$ gs_sdr -t start -m primary -X /database/panweidb/soft/pwdb_m_sdr.xml -U sdr_test -W 'xxx'
主中心在创建容灾关系过程中,会等待从中心启动,因此在启动主中心后,不需要等待主中心启动完毕。
主中心启动日志提示如下信息后可启动从中心:
Waiting for the main standby connection.
先启动从中心(从中心主节点):
$ gs_sdr -t start -m disaster_standby -X /database/panweidb/soft/pwdb_s_sdr.xml -U sdr_test -W 'xxx'
主中心启动完毕的日志截图如下:

从中心启动完毕的日志截图如下:

5.容灾状态监控
主中心查看容灾状态

从中心查看容灾状态

上面截图中hadr_cluster_stat代表流式容灾中数据库实例状态,它的状态值含义如下:
| 状态值 | 含义 |
|---|---|
| normal | 标识该数据库实例未参与流式容灾 |
| full_backup | 主数据库实例数据全量复制中 |
| archive | 主数据库实例日志流式复制中 |
| backup_fail | 主数据库实例数据全量复制失败 |
| archive_fail | 主数据库实例日志流式复制失败 |
| switchover | 计划内主备倒换中 |
| restore | 灾备数据库实例数据全量恢复中 |
| restore_fail | 灾备数据库实例全备恢复失败 |
| recovery | 灾备数据库实例日志流式复制中 |
| recovery_fail | 灾备数据库实例日志流式复制失败 |
| promote | 灾备数据库实例升主中 |
| promote_fail | 灾备数据库实例升主失败 |
主中心查看复制槽状态


可以观察到主从中心复制槽状态正常,异步流复制状态也正常。
6.容灾解除
例如主中心解除容灾状态:
$ gs_sdr -t stop -X /database/panweidb/soft/pwdb_m_sdr.xml -U sdr_test -W 'xxx'

7.计划内切换主从中心
主中心执行switchover命令:
$ gs_sdr -t switchover -m disaster_standby

主中心执行switchover命令出现如下日志:
Waiting for truncation.
此时可以在从中心执行switchover命令
$ gs_sdr -t switchover -m primary

最后再观察主中心switchover命令的完整日志过程。

切换完成后,原主中心的集群状态如下:

新主中心的集群状态如下:

新主中心再观察新复制槽及流复制信息

手动切换主从中心,容灾状态发生交换,切换成功后数据同步正常。




