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