适用范围
系统:Centos 7
数据库:Mogdb 3.0
问题概述
一主两备的集群架构下,更换所有节点IP并进行实例恢复
实现方案
1.变更前准备
考虑到数据库的回退方案和极端情况导致的数据库在变更后无法拉起,需要对现有数据进行备份,如果数据量偏小优先使用gs_dumpall进行逻辑备份,否则物理全备#逻辑全备
gs_dumpall -f ~/all.sql
#物理全备
gs_probackup init -B /backup
gs_probackup add-instance -B /backup -D /database/mogdb/data --instance=mogdb -p 17700
gs_probackup backup -B /backup --instance=mogdb -b full
2.数据库集群关闭服务
gs_om -t stop
#或cm_ctl stop
3.IP变更(所有节点)
su root
vi /etc/sysconfig/network-scripts/ifcfg-eth0
systemctl restart network
4.hosts文件调整(所有节点)
su root
sed -i 's/old_ip1/new_ip1/g' /etc/hosts
sed -i 's/old_ip2/new_ip2/g' /etc/hosts
sed -i 's/old_ip3/new_ip3/g' /etc/hosts
5.互信文件调整(所有节点)
随后验证系统的数据库安装用户之间互信缺失了,进入/home/omm/.ssh/找到含有ip相关的配置文件如known_hosts、config等,更新ip信息。
su - omm
cd ~/.ssh
sed -i 's/old_ip1/new_ip1/g' known_hosts
sed -i 's/old_ip2/new_ip2/g' known_hosts
sed -i 's/old_ip3/new_ip3/g' known_hosts
#如果是ptk安装,可能需要额外修改/home/omm/.ssh/config文件的ip信息
#随后可验证omm之间的互信是否正常
6.数据目录配置文件调整(所有节点)
数据目录的配置文件有两个:PGDATA/pg_hba.conf和PGDATA/postgresql.conf
su - omm
sed -i 's/old_ip1/new_ip1/g' $PGDATA/pg_hba.conf
sed -i 's/old_ip2/new_ip2/g' $PGDATA/pg_hba.conf
sed -i 's/old_ip3/new_ip3/g' $PGDATA/pg_hba.conf
sed -i 's/old_ip1/new_ip1/g' $PGDATA/postgresql.conf
sed -i 's/old_ip2/new_ip2/g' $PGDATA/postgresql.conf
sed -i 's/old_ip3/new_ip3/g' $PGDATA/postgresql.conf
至此,所有节点本地配置文件ip信息都已调整完毕,但集群的配置文件却未曾调整,仍然保存的是修改前的配置信息,通过如下命令查看集群静态配置文件信息:
gs_om -t view
或cm_ctl view
7.删除集群静态、动态配置文件(所有节点)
因为ip的变更,所以原先的集群配置文件不再适用,直接删除即可!
rm -rf /database/mogdb/app/bin/cluster_static_config
rm -rf /database/mogdb/app/bin/cluster_dynamic_config
特别说明:
- cluster_static_config文件是集群的静态配置文件,是由xml配置文件在装库阶段生成,用于集群的信息把控,如果涉及变更,该文件必须更新并重新分发到所有节点;
- cluster_dynamic_config文件是集群的动态配置文件,在集群启动后会根据集群静态配置文件生成,如果静态配置文件发生变更,我们需要删除原先的动态配置文件以防信息不对称报错。
8.集群静态配置文件调整(主节点)
如果是OM方式安装,调整安装前编辑的xml文件中涉及的ip,然后更新集群的静态配置文件:
gs_om -t generateconf -X mogdb1m2s_cm.xml --distribute
如果是ptk方式安装,暂不建议使用ptk的配置文件来刷新集群的静态配置文件,可能会导致cm组件相关的信息丢失!
ptk可以通过gen-om-xml生成xml配置文件,对比标准的xml配置文件观察是否缺少cm组件配置信息:
ptk gen-om-xml -f config.yaml -o mogdb1m2s_cm.xml
#如果生成的xml文件没问题,可以通过ptk来更新集群的静态配置文件,但是该方式不建议
ptk gen-static-config -f config.yaml
随后通过gs_om或者cm_ctl工具验证当前集群静态配置文件信息:
gs_om -t view
规范的一主两备xml配置文件模板参考如下:
<?xml version="1.0" encoding="utf-8"?>
<ROOT>
<!-- 整体信息 -->
<CLUSTER>
<!-- 数据库集群名称 -->
<PARAM name="clusterName" value="mogdb" />
<!-- 数据库节点名称(hostname) -->
<PARAM name="nodeNames" value="hostname1,hostname2,hostname3"/>
<!-- 数据库安装目录-->
<PARAM name="gaussdbAppPath" value="/database/mogdb/app" />
<!-- 日志目录-->
<PARAM name="gaussdbLogPath" value="/database/mogdb/log" />
<PARAM name="tmpMppdbPath" value="/database/mogdb/tmp"/>
<PARAM name="gaussdbToolPath" value="/database/mogdb/tool" />
<!--数据库 core 文件目录-->
<PARAM name="corePath" value="/database/mogdb/corefile"/>
<!-- 节点 IP,与数据库节点名称列表一一对应 -->
<PARAM name="backIp1s" value="10.0.0.1,10.0.0.2,10.0.0.3"/>
</CLUSTER>
<DEVICELIST>
<!-- 节点 1 上的部署信息 -->
<DEVICE sn="hostname1">
<PARAM name="name" value="hostname1"/>
<!-- 节点 1 所在的 AZ 及 AZ 优先级 -->
<PARAM name="azName" value="AZ1"/>
<PARAM name="azPriority" value="1"/>
<!-- 节点 1 的 IP,如果服务器只有一个网卡可用,将 backIP1 和 sshIP1 配置成同一个IP -->
<PARAM name="backIp1" value="10.0.0.1"/>
<PARAM name="sshIp1" value="10.0.0.1"/>
<!-- 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="10.0.0.1,10.0.0.2,10.0.0.3"/>
<!-- cmServerHaIp1。主、备 CM Server 间通信的 IP 地址。Value 中左边为主 CM Server 的主机 IP 地址,右边为备 CM Server 的主机 IP 地址。未设置时,默认根据主、备 CM Server 所在主机的 backIp1 生成。-->
<PARAM name="cmServerHaIp1" value="10.0.0.1,10.0.0.2,10.0.0.3"/>
<PARAM name="cmServerlevel" value="1"/>
<PARAM name="cmServerRelation" value="hostname1,hostname2,hostname3"/>
<!-- cmDir。CM 数据文件路径。保存 CM Server 和 CM Agent 用到的数据文件,参数文件等。各集群主机上均需配置该参数。-->
<PARAM name="cmDir" value="/database/mogdb/cm"/>
<!-- dn 数据节点 -->
<PARAM name="dataNum" value="1"/>
<PARAM name="dataPortBase" value="17700"/>
<PARAM name="dataNode1" value="/database/mogdb/data,hostname2,/database/mogdb/data,hostname3,/database/mogdb/data"/>
<PARAM name="dataNode1_syncNum" value="1"/>
</DEVICE>
<DEVICE sn="hostname2">
<PARAM name="name" value="hostname2"/>
<PARAM name="azName" value="AZ1"/>
<PARAM name="azPriority" value="1"/>
<PARAM name="backIp1" value="10.0.0.2"/>
<PARAM name="sshIp1" value="10.0.0.2"/>
<!-- cm 管理节点 -->
<!-- cmServerPortStandby。备 CM Server 端口号,默认值 5500 -->
<PARAM name="cmServerPortStandby" value="18800"/>
<PARAM name="cmDir" value="/database/mogdb/cm"/>
</DEVICE>
<DEVICE sn="hostname3">
<PARAM name="name" value="hostname3"/>
<PARAM name="azName" value="AZ1"/>
<PARAM name="azPriority" value="1"/>
<PARAM name="backIp1" value="10.0.0.3"/>
<PARAM name="sshIp1" value="10.0.0.3"/>
<!-- cm 管理节点 -->
<!-- cmServerPortStandby。备 CM Server 端口号,默认值 5500 -->
<PARAM name="cmServerPortStandby" value="18800"/>
<PARAM name="cmDir" value="/database/mogdb/cm"/>
</DEVICE>
</DEVICELIST>
</ROOT>
9.CM处理(所有节点)
需要删除dcf元数据,其中记录了初始ip的信息,cm启动后会重新生成该文件
su - omm
rm -rf /database/mogdb/cm/dcf_data/metadata
10.恢复集群
#逻辑恢复:
cm_ctl start
gsql -f xxx.sql
#物理恢复:
mv /database/mogdb/data /database/mogdb/data_bak
gs_probackup restore -B /backup -D /database/mogdb/data --instance=mogdb -i xxx
cm_ctl start
至此,ip全部修改完成,集群实例状态正常。
实践总结
上述内容围绕ip信息变更导致集群异常并进行实例恢复在生产实践中有一定的参考意义,该方案也适用于单个节点的ip变更,如果涉及的仅是备库的变更也可以利用节点扩缩的方式来实现恢复(甚至重装),相比于单节点的ip更换,集群的ip更换需要考虑替换的更加全面,理解集群的动、静态配置文件和如何刷新以及cm的相关处理是重难点,总之,我们有多种方法去实现集群的变更与恢复,这可以帮助我们更深入的了解集群的配置文件。




