磐维数据库双中心容灾流复制集群搭建

发布于:2025-02-21 ⋅ 阅读:(14) ⋅ 点赞:(0)

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。