主备集群上需要配置有cm,且每个集群至少2个节点
1. 安装CM(2节点部署)
(1)集群部署xml文件中添加cm模块配置
<!--主节点配置-->
<!--cm-->
<PARAM name="cmsNum" value="1"/>
<PARAM name="cmServerPortBase" value="15400"/>
<PARAM name="cmServerListenIp1" value="192.168.1.100,192.168.1.101"/>
<PARAM name="cmServerHaIp1" value="192.168.1.100,192.168.1.101"/>
<PARAM name="cmServerlevel" value="1"/>
<PARAM name="cmServerRelation" value="node,node2"/>
<PARAM name="cmDir" value="/opt/install/cmserver"/>
<!--备节点配置-->
<PARAM name="cmServerPortStandby" value="15400"/>
<PARAM name="cmDir" value="/opt/install/cmserver"/>

(2)cm安装(数据库已安装)
如果数据库原本未安装,在xml文件中添加配置cm配置后正常安装即可
cd /opt/install/app/tool/cm_tool
./cm_install -X /opt/software/openGauss/clusterconfig_1m1s.xml --cmpkg=/opt/software/openGauss/openGauss-CM-6.0.0-openEuler22.03-x86_64.tar.gz
# -X:指定xml配置文件,文件中需要有cm的配置(配置内容看上一步)
# --cmpkg:指定cm安装包
(3)修改cm参数配置(在两节点上启动自动仲裁)
cm_ctl set --param --server -k "cms_enable_failover_on2nodes=true"
cm_ctl set --param --server -k "cms_enable_db_crash_recovery=true"
# 配置一个未使用的网段做网络仲裁
cm_ctl set --param --server -k "third_party_gateway_ip=192.168.100.1"
# 动态刷新配置
cm_ctl reload --param --server

2. 配置容灾
当前集群关系如下表所示:
| 初始集群角色 | 集群名称 | 节点名称 | xml文件存储路径 |
| 主集群 | c1 | node | /opt/software/openGauss/clusterconfig_1m1s_sdr.xml |
| node2 | |||
| 备集群 | c2 | nodeA | |
| nodeB |
(1)在主集群上(C1)创建一个用于容灾的用户
create user sdr_user password 'euler123.' replication;
# replication 复制权限
(2)在主集群(C1)的主节点中的xml文件添加以下内容(在主节点上配置即可)
<PARAM name="localStreamIpmap1" value="(192.168.1.100,192.168.1.100),(192.168.1.101,192.168.1.101)"/>
<PARAM name="remoteStreamIpmap1" value="(192.168.1.110,192.168.1.110),(192.168.1.111,192.168.1.111)"/>
<PARAM name="remotedataPortBase" value="15432"/>
<!-- localStreamIpmap1 为本集群IP -->
<!-- remoteStreamIpmap1 为远端集群IP -->
<!-- remotedataPortBase 为远端集群数据库运行端口 -->

(3)在备集群(C2)的主节点中的xml文件同样添加容灾配置(注意远端集群和本集群IP与主集群上的配置调换)
<!-- localStreamIpmap1 为本集群IP -->
<PARAM name="localStreamIpmap1" value="(192.168.1.110,192.168.1.110),(192.168.1.111,192.168.1.111)"/>
<!-- remoteStreamIpmap1 为远端集群IP -->
<PARAM name="remoteStreamIpmap1" value="(192.168.1.100,192.168.1.100),(192.168.1.101,192.168.1.101)"/>
<!-- remotedataPortBase 为远端集群数据库运行端口 -->
<PARAM name="remotedataPortBase" value="15432"/>
3. 启动容灾
(1)在主集群上(C1)启动容灾
gs_sdr -t start -m primary -X /opt/software/openGauss/clusterconfig_1m1s_sdr.xml -U sdr_user -W 'euler123.'

(3)看到:Waiting for the main standby connection 提示表示主集群启动成功,切换到备集群(C2)启动容灾
gs_sdr -t start -m primary -X /opt/software/openGauss/clusterconfig_1m1s_sdr.xml -U sdr_user -W 'euler123.'

备集群(C2)启动成功后,主集群(C1)上的进程会自动继续,部署成功结果如下

4. 查询灾备状态
gs_sdr -t query

5. 灾备切换
(1)switchover
在备集群(C2)上执行升主
gs_sdr -t switchover -m primary
需要等待主降备后,备才能升主成功

在主集群(C1)上执行降备(会进行集群重启,生产环境需谨慎)
gs_sdr -t switchover -m disaster_standby

(2)failover
当前灾备状态为C1为备集群,C2为主集群
gs_sdr可以查看当前灾备状态,集群状态使用cm_ctl查看
- Main Standby为首备
- Cascade Standby为级联备

模拟主集群故障(主集群关机)后,灾备切换到备集群

在备集群(C1)上切换为主集群
gs_sdr -t failover

failover会移除灾备信息,使集群升级后成为独立集群

查询当前集群状态信息如下:

将原主集群(C2)重新启动后检查集群状态与灾备状态,C2依旧认为自己是主集群,且与当前主集群(C1)断开连接

当前主集群(C1)已脱离灾备关系

在原主集群(C2)解除灾备并重建灾备,同时在当前主集群(C1)上重建灾备
# 主集群(C1)执行
gs_sdr -t start -m primary -X /opt/software/openGauss/clusterconfig_1m1s_sdr.xml -U sdr_user -W euler123.
# 备集群(C2)执行
gs_sdr -t stop -X /opt/software/openGauss/clusterconfig_1m1s_sdr.xml
gs_sdr -t start -m disaster_standby -X /opt/software/openGauss/clusterconfig_1m1s_sdr.xml -U sdr_user -W euler123.

6. 解除灾备(灾备正常的情况下)
无法直接在备集群解除灾备,直接在备集群解除灾备会报如下异常

先在主集群(C1)上解除灾备
gs_sdr -t stop -X /opt/software/openGauss/clusterconfig_1m1s_sdr.xml

然后在备集群(C2)上使用failover升主,使其成为主集群且解除灾备配置,至此两个集群均作为独立主集群
gs_sdr -t failover





