1 目标
本文档用于指导用户实现MogDB数据库集群(集群管理工具为CM)的扩容和缩容。目前,扩容功能支持两类场景:同时扩容CM集群和数据库集群,仅扩容数据库集群。而缩容功能仅支持同时缩容CM集群和数据库集群,不支持单独缩容数据库集群。
2 约束与限制
- 集群的安装、卸载、扩容、缩容均需依赖OM工具
- 缩容功能仅支持同时缩容CM集群和数据库集群,不支持单独缩容数据库集群
- 扩容/缩容都需要重启整个集群
3 前置条件
集群扩容/缩容前务必确保当前集群状态正常。本文以3节点集群为例,如图1所示:

图 1 扩容前集群初始状态
如上图1所示,示例数据库集群拥有3个节点,集群状态正常,CMServer和Datanode均为一主两备。对应的集群配置文件clusterconfig_3nodes.xml(参考附件1)如下图2所示:

图 2 扩容前集群配置文件
其中当前集群的用户为omm,用户组为dbgrp。为了演示集群的扩容和缩容,我们将对当前集群增加一个节点wrz-cm-test-04完成集群扩容,然后剔除新增的节点wrz-cm-test-04完成集群的缩容。
4 集群扩容
集群扩容分为两类场景:同时扩容CM集群和数据库集群,仅扩容数据库集群。二者操作流程完全一样,唯一的区别在于配置文件。在集群配置文件clusterconfig.xml中可以通过两个参数控制:cmServerListenIP1和cmServerRelation来控制是否需要扩容CM集群。如下图3所示,192.168.122.234为新增节点,若想同时扩容CM集群则需要将节点的IP和HostName配置到前述两个参数:

图 3 新增节点支持CM集群扩容
4.1 扩容CM集群和数据库集群
4.1.1 创建新增节点并安装操作系统
新节点的操作系统及内核版本必须与集群其他节点保持一致,否则可能导致扩容流程中gs_preinstall步骤失败,原因主要是依赖库的版本会有差异。可用如下指令查询内核信息(示例为华为欧拉系统):
[omm@wrz-cm-test-01 ~]$ cat /etc/openEuler-release
openEuler release 20.03 (LTS)
同时,新的节点上需要确保expect软件(扩容时gs_preinstall的依赖之一)已经安装,且防火墙处于关闭状态(扩容成功后CM集群间通信):
[root@wrz-cm-test-04 ~]# rpm -q expect
expect-5.45.4-3.oe1.aarch64
4.1.2 新增节点上创建用户和用户组
[omm@wrz-cm-test-04 ~]$ groupadd dbgrp
[omm@wrz-cm-test-04 ~]$ useradd -g dbgrp omm
[omm@wrz-cm-test-04 ~]$ passwd omm //密码与其他节点相同
4.1.3 新增节点环境变量检查
检查新节点环境变量,清理和MogDB相关的环境变量配置。主要检查/etc/profile和/home/omm/.bashrc两个文件。如果清理不干净,会导致扩容不成功,或者提示待扩容备机节点已经安装。
4.1.4 新增节点上放置软件包
在集群安装的主节点,一般为集群第一个节点(本示例为wrz-cm-test-01)上准备安装包并拷贝至新增节点同样目录下。如下图4所示,主节点目录/opt/software中即为集群安装包,待拷贝至新增节点的安装包文件为/opt/software.tar.gz。


图 4 主节点安装包路径及文件
安装包拷贝完成后,新增节点wrz-cm-test-04的文件如下图5所示:

图 5 新增节点安装包及文件
在新增节点上解压缩上述文件到目录software即可。
4.1.5 在主节点上创建与其他节点的互信
(1)创建hostfile文件
该文件中包含当前集群所有节点的IP地址信息,包含新增节点
[root@wrz-cm-test-01 opt]# cat /home/omm/hostfile
192.168.122.231 // wrz-cm-test-01
192.168.122.232 // wrz-cm-test-02
192.168.122.233 // wrz-cm-test-03
192.168.122.234 // wrz-cm-test-04
(2)用户root下创建互信
切换到/opt/software/MogDB/script目录,执行如下图6所示的指令:

图 6 主节点创建与其他节点的互信
(3)用户omm下创建互信
具体操作步骤(2)。
备注:
1. 如果是同一台机器恢复后再加入集群,需要清理root用户和omm用户的/.ssh/know_host和/.ssh/authorized_keys里的相关信息,否则创建互信会失败。
2. 全新的机器需要安装python3.6或python3.7。
4.1.6 创建新的集群配置文件
新的集群配置文件clusterconfig_3to4.xml与原始配置文件差异如下图7所示:

图 7 扩容前后集群配置文件差异
新增配置文件clusterconfig_3to4.xml请参见附件2。
4.1.7 在主节点上执行扩容
切换到root用户,导入omm用户的环境变量/home/omm/.bashrc,然后执行扩容指令,如下图8所示。
[root@wrz-cm-test-01 MogDB]# source /home/omm/.bashrc
[root@wrz-cm-test-01 MogDB]# ./gs_expansion -U omm -G dbgrp -h 192.168.122.234 -X /opt/software/MogDB/clusterconfig/clusterconfig_3to4.xml

图 8 扩容指令执行过程
4.1.8 查询集群状态
切换到omm用户,执行集群状态查询,如下图9所示:

图 9 扩容成功后集群状态查询
至此集群扩容完成。
4.2 扩容数据库集群
4.2.1 创建新的集群配置文件
本章节于章节3.1的唯一区别在于集群配置文件,二者的差异如下图10所示:

图 10 是否扩容CMS实例配置文件差异
参考图10可以看出,CMS实例在节点上的配置依赖两个参数:cmServerListenIP1和cmServerRelation。仅扩容数据库实例的集群配置文件请参考附件3。
4.2.2 在主节点上执行扩容
仅仅扩容数据库实例的过程及执行成功的效果如图11所示:


图 11 仅扩容数据库实例成功
5 集群缩容
5.1 同时缩容CM集群和数据库集群
[omm@wrz-cm-test-01 MogDB]# .gs_dropnode -U omm -G dbgrp -h 192.168.122.234


图 12 集群缩容
图示中缩容的最后流程会抛出一个switchover相关的错误可忽略,不影响最终结果!
6 附件
6.1 附件1
<?xml version="1.0" encoding="UTF-8"?>
<ROOT>
<!-- openGauss整体信息 -->
<CLUSTER>
<!-- 数据库名称 -->
<PARAM name="clusterName" value="dbCluster" />
<!-- 数据库节点名称(hostname) -->
<PARAM name="nodeNames" value="wrz-cm-test-01,wrz-cm-test-02,wrz-cm-test-03" />
<!-- 节点IP,与nodeNames一一对应 -->
<PARAM name="backIp1s" value="192.168.122.231, 192.168.122.232, 192.168.122.233"/>
<!-- 数据库安装目录-->
<PARAM name="gaussdbAppPath" value="/opt/mogdb/install/app" />
<!-- 日志目录-->
<PARAM name="gaussdbLogPath" value="/var/log/omm" />
<!-- 临时文件目录-->
<PARAM name="tmpMppdbPath" value="/opt/mogdb/tmp"/>
<!--数据库工具目录-->
<PARAM name="gaussdbToolPath" value="/opt/mogdb/install/om" />
<!--数据库core文件目录-->
<PARAM name="corePath" value="/opt/mogdb/corefile"/>
<!-- openGauss类型,此处示例为单机类型,“single-inst”表示单机一主多备部署形态-->
<PARAM name="clusterType" value="single-inst"/>
<PARAM name="enable_dcf" value="off"/>
</CLUSTER>
<!-- 每台服务器上的节点部署信息 -->
<DEVICELIST>
<!-- node1上的节点部署信息 -->
<DEVICE sn="1000001">
<!-- node1的hostname -->
<PARAM name="name" value="wrz-cm-test-01"/>
<!-- node1所在的AZ及AZ优先级 -->
<PARAM name="azName" value="AZ1"/>
<PARAM name="azPriority" value="1"/>
<!-- 如果服务器只有一个网卡可用,将backIP1和sshIP1配置成同一个IP -->
<PARAM name="backIp1" value="192.168.122.231"/>
<PARAM name="sshIp1" value="192.168.122.231"/>
<!--CM-->
<!--CM数据目录-->
<PARAM name="cmDir" value="/opt/mogdb/install/data/cm" />
<PARAM name="cmsNum" value="1" />
<!--CM监听端口-->
<PARAM name="cmServerPortBase" value="5000" />
<PARAM name="cmServerlevel" value="1" />
<!--CM所有实例所在节点名及监听ip-->
<PARAM name="cmServerListenIp1" value="192.168.122.231,192.168.122.232,192.168.122.233" />
<PARAM name="cmServerRelation" value="wrz-cm-test-01,wrz-cm-test-02,wrz-cm-test-03"/>
<!--dbnode-->
<PARAM name="dataNum" value="1"/>
<!--DBnode端口号-->
<PARAM name="dataPortBase" value="27000"/>
<!--DBnode主节点上数据目录,及备机数据目录-->
<PARAM name="dataNode1" value="/opt/mogdb/install/data/db1,wrz-cm-test-02,/opt/mogdb/install/data/db1,wrz-cm-test-03,/opt/mogdb/install/data/db1"/>
<!--DBnode节点上设定同步模式的节点数-->
<PARAM name="dataNode1_syncNum" value="0"/>
</DEVICE>
<!-- node2上的节点部署信息,其中“name”的值配置为主机名称(hostname) -->
<DEVICE sn="1000002">
<PARAM name="name" value="wrz-cm-test-02"/>
<PARAM name="azName" value="AZ2"/>
<PARAM name="azPriority" value="2"/>
<!-- 如果服务器只有一个网卡可用,将backIP1和sshIP1配置成同一个IP -->
<PARAM name="backIp1" value="192.168.122.232"/>
<PARAM name="sshIp1" value="192.168.122.232"/>
<PARAM name="cmDir" value="/opt/mogdb/install/data/cm" />
</DEVICE>
<!-- node3上的节点部署信息,其中“name”的值配置为主机名称(hostname) -->
<DEVICE sn="1000003">
<PARAM name="name" value="wrz-cm-test-03"/>
<PARAM name="azName" value="AZ2"/>
<PARAM name="azPriority" value="2"/>
<!-- 如果服务器只有一个网卡可用,将backIP1和sshIP1配置成同一个IP -->
<PARAM name="backIp1" value="192.168.122.233"/>
<PARAM name="sshIp1" value="192.168.122.233"/>
<PARAM name="cmDir" value="/opt/mogdb/install/data/cm" />
</DEVICE>
</DEVICELIST>
</ROOT>
6.2 附件2
同时扩容CMS和MogDB实例的集群配置文件如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<ROOT>
<!-- openGauss整体信息 -->
<CLUSTER>
<!-- 数据库名称 -->
<PARAM name="clusterName" value="dbCluster" />
<!-- 数据库节点名称(hostname) -->
<PARAM name="nodeNames" value="wrz-cm-test-01,wrz-cm-test-02,wrz-cm-test-03,wrz-cm-test-04" />
<!-- 节点IP,与nodeNames一一对应 -->
<PARAM name="backIp1s" value="192.168.122.231, 192.168.122.232, 192.168.122.233, 192.168.122.234"/>
<!-- 数据库安装目录-->
<PARAM name="gaussdbAppPath" value="/opt/mogdb/install/app" />
<!-- 日志目录-->
<PARAM name="gaussdbLogPath" value="/var/log/omm" />
<!-- 临时文件目录-->
<PARAM name="tmpMppdbPath" value="/opt/mogdb/tmp"/>
<!--数据库工具目录-->
<PARAM name="gaussdbToolPath" value="/opt/mogdb/install/om" />
<!--数据库core文件目录-->
<PARAM name="corePath" value="/opt/mogdb/corefile"/>
<!-- openGauss类型,此处示例为单机类型,“single-inst”表示单机一主多备部署形态-->
<PARAM name="clusterType" value="single-inst"/>
<PARAM name="enable_dcf" value="off"/>
</CLUSTER>
<!-- 每台服务器上的节点部署信息 -->
<DEVICELIST>
<!-- node1上的节点部署信息 -->
<DEVICE sn="1000001">
<!-- node1的hostname -->
<PARAM name="name" value="wrz-cm-test-01"/>
<!-- node1所在的AZ及AZ优先级 -->
<PARAM name="azName" value="AZ1"/>
<PARAM name="azPriority" value="1"/>
<!-- 如果服务器只有一个网卡可用,将backIP1和sshIP1配置成同一个IP -->
<PARAM name="backIp1" value="192.168.122.231"/>
<PARAM name="sshIp1" value="192.168.122.231"/>
<!--CM-->
<!--CM数据目录-->
<PARAM name="cmDir" value="/opt/mogdb/install/data/cm" />
<PARAM name="cmsNum" value="1" />
<!--CM监听端口-->
<PARAM name="cmServerPortBase" value="5000" />
<PARAM name="cmServerlevel" value="1" />
<!--CM所有实例所在节点名及监听ip-->
<PARAM name="cmServerListenIp1" value="192.168.122.231,192.168.122.232,192.168.122.233,192.168.122.234" />
<PARAM name="cmServerRelation" value="wrz-cm-test-01,wrz-cm-test-02,wrz-cm-test-03,wrz-cm-test-04"/>
<!--dbnode-->
<PARAM name="dataNum" value="1"/>
<!--DBnode端口号-->
<PARAM name="dataPortBase" value="27000"/>
<!--DBnode主节点上数据目录,及备机数据目录-->
<PARAM name="dataNode1" value="/opt/mogdb/install/data/db1,wrz-cm-test-02,/opt/mogdb/install/data/db1,wrz-cm-test-03,/opt/mogdb/install/data/db1,wrz-cm-test-04,/opt/mogdb/install/data/db1"/>
<!--DBnode节点上设定同步模式的节点数-->
<PARAM name="dataNode1_syncNum" value="0"/>
</DEVICE>
<!-- node2上的节点部署信息,其中“name”的值配置为主机名称(hostname) -->
<DEVICE sn="1000002">
<PARAM name="name" value="wrz-cm-test-02"/>
<PARAM name="azName" value="AZ2"/>
<PARAM name="azPriority" value="2"/>
<!-- 如果服务器只有一个网卡可用,将backIP1和sshIP1配置成同一个IP -->
<PARAM name="backIp1" value="192.168.122.232"/>
<PARAM name="sshIp1" value="192.168.122.232"/>
<PARAM name="cmDir" value="/opt/mogdb/install/data/cm" />
</DEVICE>
<!-- node3上的节点部署信息,其中“name”的值配置为主机名称(hostname) -->
<DEVICE sn="1000003">
<PARAM name="name" value="wrz-cm-test-03"/>
<PARAM name="azName" value="AZ2"/>
<PARAM name="azPriority" value="2"/>
<!-- 如果服务器只有一个网卡可用,将backIP1和sshIP1配置成同一个IP -->
<PARAM name="backIp1" value="192.168.122.233"/>
<PARAM name="sshIp1" value="192.168.122.233"/>
<PARAM name="cmDir" value="/opt/mogdb/install/data/cm" />
</DEVICE>
<DEVICE sn="1000004">
<PARAM name="name" value="wrz-cm-test-04"/>
<PARAM name="azName" value="AZ2"/>
<PARAM name="azPriority" value="2"/>
<!-- 如果服务器只有一个网卡可用,将backIP1和sshIP1配置成同一个IP -->
<PARAM name="backIp1" value="192.168.122.234"/>
<PARAM name="sshIp1" value="192.168.122.234"/>
<PARAM name="cmDir" value="/opt/mogdb/install/data/cm" />
</DEVICE>
</DEVICELIST>
</ROOT>
6.3 附件3
仅扩容MogDB实例的集群配置文件如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<ROOT>
<!-- openGauss整体信息 -->
<CLUSTER>
<!-- 数据库名称 -->
<PARAM name="clusterName" value="dbCluster" />
<!-- 数据库节点名称(hostname) -->
<PARAM name="nodeNames" value="wrz-cm-test-01,wrz-cm-test-02,wrz-cm-test-03,wrz-cm-test-04" />
<!-- 节点IP,与nodeNames一一对应 -->
<PARAM name="backIp1s" value="192.168.122.231, 192.168.122.232, 192.168.122.233, 192.168.122.234"/>
<!-- 数据库安装目录-->
<PARAM name="gaussdbAppPath" value="/opt/mogdb/install/app" />
<!-- 日志目录-->
<PARAM name="gaussdbLogPath" value="/var/log/omm" />
<!-- 临时文件目录-->
<PARAM name="tmpMppdbPath" value="/opt/mogdb/tmp"/>
<!--数据库工具目录-->
<PARAM name="gaussdbToolPath" value="/opt/mogdb/install/om" />
<!--数据库core文件目录-->
<PARAM name="corePath" value="/opt/mogdb/corefile"/>
<!-- openGauss类型,此处示例为单机类型,“single-inst”表示单机一主多备部署形态-->
<PARAM name="clusterType" value="single-inst"/>
<PARAM name="enable_dcf" value="off"/>
</CLUSTER>
<!-- 每台服务器上的节点部署信息 -->
<DEVICELIST>
<!-- node1上的节点部署信息 -->
<DEVICE sn="1000001">
<!-- node1的hostname -->
<PARAM name="name" value="wrz-cm-test-01"/>
<!-- node1所在的AZ及AZ优先级 -->
<PARAM name="azName" value="AZ1"/>
<PARAM name="azPriority" value="1"/>
<!-- 如果服务器只有一个网卡可用,将backIP1和sshIP1配置成同一个IP -->
<PARAM name="backIp1" value="192.168.122.231"/>
<PARAM name="sshIp1" value="192.168.122.231"/>
<!--CM-->
<!--CM数据目录-->
<PARAM name="cmDir" value="/opt/mogdb/install/data/cm" />
<PARAM name="cmsNum" value="1" />
<!--CM监听端口-->
<PARAM name="cmServerPortBase" value="5000" />
<PARAM name="cmServerlevel" value="1" />
<!--CM所有实例所在节点名及监听ip-->
<PARAM name="cmServerListenIp1" value="192.168.122.231,192.168.122.232,192.168.122.233" />
<PARAM name="cmServerRelation" value="wrz-cm-test-01,wrz-cm-test-02,wrz-cm-test-03"/>
<!--dbnode-->
<PARAM name="dataNum" value="1"/>
<!--DBnode端口号-->
<PARAM name="dataPortBase" value="27000"/>
<!--DBnode主节点上数据目录,及备机数据目录-->
<PARAM name="dataNode1" value="/opt/mogdb/install/data/db1,wrz-cm-test-02,/opt/mogdb/install/data/db1,wrz-cm-test-03,/opt/mogdb/install/data/db1,wrz-cm-test-04,/opt/mogdb/install/data/db1"/>
<!--DBnode节点上设定同步模式的节点数-->
<PARAM name="dataNode1_syncNum" value="0"/>
</DEVICE>
<!-- node2上的节点部署信息,其中“name”的值配置为主机名称(hostname) -->
<DEVICE sn="1000002">
<PARAM name="name" value="wrz-cm-test-02"/>
<PARAM name="azName" value="AZ2"/>
<PARAM name="azPriority" value="2"/>
<!-- 如果服务器只有一个网卡可用,将backIP1和sshIP1配置成同一个IP -->
<PARAM name="backIp1" value="192.168.122.232"/>
<PARAM name="sshIp1" value="192.168.122.232"/>
<PARAM name="cmDir" value="/opt/mogdb/install/data/cm" />
</DEVICE>
<!-- node3上的节点部署信息,其中“name”的值配置为主机名称(hostname) -->
<DEVICE sn="1000003">
<PARAM name="name" value="wrz-cm-test-03"/>
<PARAM name="azName" value="AZ2"/>
<PARAM name="azPriority" value="2"/>
<!-- 如果服务器只有一个网卡可用,将backIP1和sshIP1配置成同一个IP -->
<PARAM name="backIp1" value="192.168.122.233"/>
<PARAM name="sshIp1" value="192.168.122.233"/>
<PARAM name="cmDir" value="/opt/mogdb/install/data/cm" />
</DEVICE>
<DEVICE sn="1000004">
<PARAM name="name" value="wrz-cm-test-04"/>
<PARAM name="azName" value="AZ2"/>
<PARAM name="azPriority" value="2"/>
<!-- 如果服务器只有一个网卡可用,将backIP1和sshIP1配置成同一个IP -->
<PARAM name="backIp1" value="192.168.122.234"/>
<PARAM name="sshIp1" value="192.168.122.234"/>
<PARAM name="cmDir" value="/opt/mogdb/install/data/cm" />
</DEVICE>
</DEVICELIST>
</ROOT




