赞
踩
本文分享自华为云社区《GaussDB(分布式)实例故障处理》,作者:subverter。
GaussDB Kernel实例出现故障时,可以按照本节的办法进行实例快速修复。
1、执行gs_om -t status --detail查看集群状态,cluster_state为Normal,balanced为No,请重置实例状态。
2、执行gs_om -t status --detail查看集群状态,cluster_state为Degraded,表示有实例异常,但是集群依然可以正常对外提供服务。此时,虽然不影响业务运行,但是主备实例切换将加重某些节点上的工作负载,时间久了,可能带来这些对应节点上的资源耗尽,进而影响业务运行。因此集群处于Degraded状态时,建议尽快定位,使集群恢复至Normal状态。GaussDB Kernel提供了如下办法,协助用户在操作系统和硬件正常时的实例快速修复。
3、CN实例异常,优先通过删除CN和增加CN进行实例恢复。
4、各类实例异常的通用办法——修改HOSTNAME、IP和端口号。
集群在运行过程中,如果发生了主机或某些实例故障,集群管理模块会自动将备实例提升为主实例继续提供服务;或是由于数据库集群管理人员手工进行过主备切换操作后,使当前集群各主机上运行的主实例(GTM,DN)数不均等,造成集群负载不均衡,即集群“balanced”状态为"No"。这种情况下可以通过集群管理命令将集群中的数据库实例恢复为初始配置的主备状态。
存在实例异常时,需要先将实例修复后,才能进行重置。
1.以操作系统用户omm登录数据库集群任一主机。
2.查询并确认集群运行状态及“balanced”状态。
“cluster_state”为“Normal”表示集群运行正常。“balanced”状态为“No”表示集群实例发生过主备切换。
gs_om -t status --detail
3.使用如下命令查看集群状态确认是哪些节点上的实例发生过主备切换。
gs_om -t status --detail
例如下面示例中,node2节点上的主dn2发生过主备切换。该DN原始为主DN(“state”中的字母“P”代表其初始为Primary DN),当前切换成了备DN(“state ”状态变成了“Standby Normal”)。
4.使用如下命令将集群中发生切换的实例恢复为初始配置的主备状态。
gs_om -t switch --reset --time-out=300
300为切换的等待时间,单位为s。切换后集群的“balanced”状态变为“Yes”。
查询当前发生过切换的实例。
- gs_om -t switch
- Operation: Switch query.
- [ GTM State ]
-
- node instance state
- --------------------------------------------------------------------
- (no need to switchover gtm)
-
- [ Datanode State ]
-
- node node_ip instance state | node node_ip instance state | node node_ip instance state
- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- AZ1 1 plat1 192.168.0.11 6001 /gaussdb/data/data_dn1 P Standby Normal | 2 plat2 192.168.0.12 6002 /gaussdb/data/data_dnS1 S Primary Normal | 3 plat1 192.168.0.13 3002 /gaussdb/data/data_dnDS1 R Secondary Normal
- Operation succeeded: Switch query.
若实例未发生过主备切换,则查询结果中会显示“no need to switchover xxx”。否则,则有实例发生过主备切换。例如,上例中通过查询发现有一组主备DN都发生过切换。将发生切换的实例恢复为初始配置的主备状态。
- gs_om -t switch --reset --time-out=300
- Operating: Switch reset.
- cm_ctl: cmserver is rebalancing the cluster automatically.
- ......
- cm_ctl: switchover successfully.
- Operation succeeded: Switch reset.
如果重置实例状态失败,请根据日志文件中的日志信息排查错误。
如果指定的超时时间到达后,仍然有某些实例没有完成状态切换,可以根据提示,执行3查看切换实例的当前状态,然后设置更长的时间再次执行或者通过log查看切换失败的原因。重置操作的默认超时时间为300s。
集群部署多个CN同时对外提供服务,CN的角色是对等的,即执行DML语句时连接到任何一个CN都可以得到一致的结果。而DDL语句需要在所有CN上都执行完成,以保持数据库对象定义一致。如果其中一个CN发生故障,整个集群将无法执行DDL语句,直到故障CN被修复或剔除。
如果只有CN异常,使用gs_replace工具可以快速将故障CN替换为正常CN。具体请参见修复故障实例。
如果因网络无法连接、硬件故障造成操作系统无法登录等,短时间内无法恢复CN,又希望集群尽快恢复DDL执行能力,可以先手动删除故障CN。待DDL业务完成后,再通过增加CN功能将CN加回。
GaussDB Kernel也提供了CN自动剔除功能,此功能默认开启,开启和关闭方式请参见自动剔除故障CN。通过设置coordinator_heartbeat_timeout为具体的时间值,则CN故障超过此时间值后GaussDB Kernel将自动剔除故障CN。
多AZ多集群部署结构下:
1.1 操作场景
在集群运行过程中,CN发生故障后,整个集群将无法执行DDL操作。因此,如果CN发生故障且无法快速修复时,可以使用gs_om中的managecn把故障CN从数据库集群中删掉,从而使集群可以快速恢复正常工作。
1.2 注意事项
1.3 处理方法
1.以操作系统用户omm登录数据库集群任一主机。
如果所登录的主机因网络或操作系统等故障无法登录,请更换为登录另一集群主机。
2.修改集群XML配置文件clusterconfig.xml。
请将要删除CN对应主机上的cooNum值从1改为0。
- <!-- cn -->
- <PARAM name="cooNum" value="0"/>
- <PARAM name="cooPortBase" value="8000"/>
- <PARAM name="cooDir1" value="/gaussdb/data/coordinator"/>
3.使用gs_om工具脚本执行删除CN操作。
gs_om -t managecn -m delete -X /opt/software/GaussDB_Kernel/clusterconfig.xml
1.4 示例
gs_om -t managecn -m delete -X /opt/software/GaussDB_Kernel/clusterconfig.xml Checking the cluster configuration difference. Successfully checked the cluster configuration difference. Checking the cluster status. Successfully checked the cluster status. Distributing the XML configuration file to all nodes. Successfully distributed the XML configuration file. Creating backup directory. Successfully created backup directory. Backing up cluster configuration. Successfully backed up cluster configuration. Modifying static configuration files. Static configuration file's modification is completed. Locking cluster. Successfully locked cluster. Dropping pgxc_node catalog. Successfully dropped pgxc_node catalog. Configuring pg_hba on all nodes. Unlocking cluster. Successfully unlock cluster. Waiting for cluster status to become Normal or Degraded. . The cluster status is Normal. Deleting the CN instance. Successfully cleaned CN instance.
gs_om -t managecn -m delete -X /opt/software/GaussDB_Kernel/clusterconfig.xml Checking the cluster configuration difference. Successfully checked the cluster configuration difference. Warning: Failed to connect to the node SIA1000022048. Checking the cluster status. Successfully checked the cluster status. Distributing the XML configuration file to all nodes. Successfully distributed the XML configuration file. Creating backup directory. Successfully created backup directory. Backing up cluster configuration. Successfully backed up cluster configuration. Modifying static configuration files. Static configuration file's modification is completed. Locking cluster. Successfully locked cluster. Dropping pgxc_node catalog. Successfully dropped pgxc_node catalog. Configuring pg_hba on all nodes. Successfully configured pg_hba on all nodes. Unlocking cluster. Successfully unlock cluster. Waiting for cluster status to become Normal or Degraded. ........... The cluster status is Degraded. Manage CN is completed.
如果执行完删除节点SIA1000022048的CN后,该节点又从故障中恢复,此时该节点上记录的集群信息为删除CN前的,造成该节点与真实的集群信息不相同,因此需要对该节点执行如下操作,以保障集群信息的统一。
- 调用gs_om -t generateconf -X /opt/software/GaussDB_Kernel/clusterconfig.xml ,用最新的集群配置文件重新生成各节点的静态配置文件,并覆盖此节点上的静态配置文件。
- 调用gs_om -t stop -h SIA1000022048和gs_om -t start -h SIA1000022048对该节点进行重启,使得新的集群配置信息生效。
- 手动删除节点SIA1000022048上的CN数据目录(选做)。
2.1 操作场景
当集群中的CN数量无法承载业务运行压力时,可以通过gs_om的managecn功能给集群增加CN。同时,如果CN因故障被删除后,可以使用增加CN功能将其加回。
2.2 前提条件
2.3 注意事项
2.4 处理方法
1.以操作系统用户omm登录数据库集群任一主机。
2.修改集群XML配置文件clusterconfig.xml。
在已有主机上新增CN,请将要增加CN对应主机上的cooNum值从0改为1。
- <!-- cn -->
- <PARAM name="cooNum" value="1"/>
- <PARAM name="cooPortBase" value="8000"/>
- <PARAM name="cooDir1" value="/gaussdb/data/coordinator"/>
在新增主机上增加CN,要求该主机上只能配有CN,不能包含DN、GTM、CM Server及ETCD。如下以增加集群外的主机SIA1000056772上的CN为例:
- <!-- SIA1000056772的实例部署信息 -->
- <DEVICE sn="1000002">
- <PARAM name="name" value="SIA1000056772"/>
- <PARAM name="backIp1" value="10.180.122.136"/>
- <PARAM name="sshIp1" value="10.180.122.136"/>
-
- <!--cmserver-->
- <PARAM name="cmsNum" value="0"/>
- <PARAM name="cmServerPortBase" value="28601"/>
- <PARAM name="cmServerPortStandby" value="28611"/>
- <PARAM name="cmServerlevel" value="1"/>
- <PARAM name="cmDir" value=" /data_rt/bigcluster_rt/cmserver"/>
- <PARAM name="cmServerRelation" value="SIA1000056772,SIA1000056672"/>
-
- <!-- cn -->
- <PARAM name="cooNum" value="1"/>
- <PARAM name="cooPortBase" value="8000"/>
- <PARAM name="cooDir1" value="/gaussdb/data/coordinator"/>
-
- <!-- gtm -->
- <PARAM name="gtmNum" value="0"/>
- <PARAM name="gtmPortBase" value="6000"/>
- <PARAM name="gtmPortStandby" value="6500"/>
- <PARAM name="gtmDir1" value="/data_rt/bigcluster_rt/gtm,SIA1000056672,/data_rt/bigcluster_rt/gtm"/>
- <PARAM name="gtmRelation" value="SIA1000056772,SIA1000056672"/>
-
- </DEVICE>
3.进入安装包解压出的script目录下,执行下面命令为增加CN准备好前置环境。
./gs_preinstall -U -G dbgrp -L -X /opt/software/GaussDB_Kernel/clusterconfig.xml --alarm-type=5
4.使用gs_om工具脚本进行增加CN操作。
gs_om -t managecn -m add -X /opt/software/GaussDB_Kernel/clusterconfig.xml
5.(可选)如果增加CN前修改过CN的GUC参数:log_dir,listen_addresses,local_bind_address,port,pgxc_node_name,pooler_port,log_directory和audit_directory。增加CN成功后,新CN无法同步先前的修改。请使用gs_guc工具以reload方式修改重新修改CN上的这些GUC参数。
2.5 示例
gs_om -t managecn -m add -X /opt/software/GaussDB_Kernel/clusterconfig.xml Checking the cluster configuration difference. Successfully checked the cluster configuration difference. Checking the cluster status. Successfully checked the cluster status. Distributing the XML configuration file to all nodes. Successfully distributed the XML configuration file. Creating backup directory. Successfully created backup directory. Backing up cluster configuration. Successfully backed up cluster configuration. Modifying static configuration files. Static configuration file's modification is completed. Locking cluster. Successfully locked cluster. Building CN instance. Successfully built CN instance. Creating pgxc_node catalog. Successfully created pgxc_node catalog. Configuring pg_hba on all nodes. Unlocking cluster. Successfully unlock cluster. Waiting for cluster status to become Normal or Degraded. . The cluster status is Normal.
- gs_om -t managecn -m add -X /opt/software/GaussDB_Kernel/clusterconfig.xml
- Checking the cluster configuration difference.
- Successfully checked the cluster configuration difference.
- Checking the cluster status.
- Successfully checked the cluster status.
- Distributing the XML configuration file to all nodes.
- Successfully distributed the XML configuration file.
- Creating backup directory.
- Successfully created backup directory.
- Installing GaussDB Kernel on the new node.
- Checking installation environment on this node (SIA1000062209).
- Installing applications on this node (SIA1000062209).
- Synchronizing libcgroup configuration to this node (SIA1000062209).
- Successfully installed GaussDB Kernel on the new node.
- Backing up cluster configuration.
- Successfully backed up cluster configuration.
- Modifying static configuration files.
- Static configuration file's modification is completed.
- Locking cluster.
- Successfully locked cluster.
- Building CN instance.
- Successfully built CN instance.
- Creating pgxc_node catalog.
- Successfully created pgxc_node catalog.
- Configuring pg_hba on all nodes.
- Unlocking cluster.
- Successfully unlock cluster.
- Waiting for cluster status to become Normal or Degraded.
- .
- The cluster status is Normal.
自动剔除故障CN功能默认开启。
在单机部署场景下,自动剔除CN功能不生效,无需执行本节操作。
3.1 背景信息
3.2 前提条件
无。
3.3 注意事项
3.4 处理方法
开启自动剔除故障CN功能,即CN故障后,自动剔除故障的CN。
gs_guc set -Z cmserver -N all -I all -c "coordinator_heartbeat_timeout=25"
关闭自动剔除故障CN功能,即CN故障后,不剔除故障的CN。
gs_guc set -Z cmserver -N all -I all -c "coordinator_heartbeat_timeout=0"
CN故障时,除了自动剔除还可以对CN进行手动剔除。在单机部署场景下,手动剔除CN功能不生效,无需执行本节操作。
4.1 注意事项
4.2 处理方法
执行如下命令进行手动剔除故障CN:
- cm_ctl disable -n node_id -D data_path
- node_id为CN所在节点的ID,data_path为CN的数据目录路径,可通过cm_ctl query -Cvd查询。
CN故障被剔除后(状态显示为Deleted),数据库支持自动修复方式和手动修复方式修复被剔除的CN。本小节说明手动修复方式,即手动执行实例替换命令。
在单机部署场景下,手动修复CN功能不生效,无需执行本节操作。
5.1 背景信息
CN手动修复时会短暂阻塞DDL,修复结束后DDL可以继续执行。
5.2 前提条件
5.3 注意事项
下述两条命令需要关联一起执行,若只执行gs_replace -t config -h而未执行gs_replace -t start -h则可能影响集群功能,导致后续使用自动修复方式时功能不可用。
5.4 处理方法
执行如下命令,对需要替换实例的主机进行配置操作。配置操作会清理替换实例的空间,初始化替换实例,配置替换实例。
gs_replace -t config -h hostname
执行如下命令,对需要修复实例的主机进行启动操作。
gs_replace -t start -h hostname
数据库集群是由多台主机组成的,当集群中主机上的某些实例发生故障后,为了使GaussDB Kernel快速地恢复正常,用户可以使用gs_replace工具将发生故障的实例替换为正常实例。
6.1 前提条件
6.2 注意事项
6.3 处理方法
以替换主机plat1、plat2上的实例为例。
1.以操作系统用户omm登录数据库集群任一主机。
操作系统用户omm登录的主机为非故障主机。
2.(可选)使用如下命令在需要替换实例的主机上清理可能存在的残留文件。此命令仅在上次修复故障实例执行失败的情况下需要执行。
(if [ -f $PGHOST/GaussReplace.dat ];then rm $PGHOST/GaussReplace.dat;fi)
该文件为替换故障实例、替换主机中产生的用于记录执行步骤的临时文件,如果在上次执行过程中出现宕机或网卡中断等,可能会导致该文件残留。在替换故障实例前检查该文件是否存在,且生成时间非本次替换故障实例的时间,则可判断为上次执行的残留文件,删除该文件后,继续执行替换故障实例。
3.使用如下命令对需要替换实例的主机进行配置操作。
gs_replace -t config -h plat1, plat2
配置操作会清理替换实例的空间,初始化替换实例,配置替换实例。
如果收到提示:“GAUSS_50201: The XXX does not exist.”,则请检查对应的实例数据目录是否存在。如果不存在,请重新创建目录后再次执行上述命令。
如果指定主机的表空间所在磁盘出现故障,从而导致表空间中的数据损坏,更换新磁盘后,需要指定–force参数对该主机强制进行表空间数据的恢复。如果在config阶段指定–force参数,则在start阶段也必须指定–force参数。
4.使用如下命令对需要修复实例的主机进行启动操作。
gs_replace -t start -h plat1 , plat2
启动操作会启动集群替换实例的主机。
5.使用如下命令重置实例状态。
switch为维护操作:确保集群状态正常,所有业务结束,并使用pgxc_get_senders_catchup_time()视图查询无主备追赶后,再进行switch操作。
gs_om -t switch --reset
重置过程会恢复集群初始状态,以保证各主机的负载都是均衡的。
6.执行如下命令查询集群状态。
gs_om -t status
7.1 背景信息
在集群DN增量build过程中,会先删除部分数据,如果原主损坏,那么主备均损坏。为了集群快速恢复正常,需要手动进行文件替换,然后恢复集群,使集群能够正常运行。
7.2 前提条件
7.3 注意事项
pg_rewind_bak目录为增量build时备机的文件备份目录,不能被手动修改。
7.4 处理方法
1.以操作系统用户omm登录集群故障节点的主机。
2.停止所有CN和故障的DN主备从。
a.执行以下命令查看CN和故障DN所在节点信息。
cm_ctl query -Cvd
例如在一个含3个CN和12个DN的主备从集群中,
- CN :
- node instance state
- -----------------------------------------------------
- 1 lfgp000710736 5001 /data1/mpp/coordinator1 Normal
- 2 lfgp000710735 5002 /data1/mpp/coordinator2 Normal
- 3 lfgp000710734 5003 /data1/mpp/coordinator3 Normal
故障DN :
3 lfgp000710734 6017 /data1/mpp/data1/master09 P Down Disk damaged | 1 lfgp000710736 6018 /data1/mpp/data1/slave09 S Down Unknown | 2 lfgp000710735 3010 /data1/mpp/data1/dummy09 R Secondary Normal
执行以下命令停止所有CN和故障的dn主备从。
- cm_ctl stop -n nodenumber -D CN所在目录
- cm_ctl stop -n nodenumber -D DN所在目录
其中,nodenumber,CN所在目录,DN所在目录可由1获取。例如,
- cm_ctl stop -n 1 -D /data1/mpp/coordinator1
- cm_ctl stop -n 2 -D /data1/mpp/coordinator2
- cm_ctl stop -n 3 -D /data1/mpp/coordinator3
- cm_ctl stop -n 1 -D /data1/mpp/data1/slave09
- cm_ctl stop -n 2 -D /data1/mpp/data1/dummy09
执行restore操作,需要登录到故障的机器上。
gs_ctl restore -D /data1/mpp/data1/slave09
cm_ctl start方式启动故障结点。
cm_ctl start -n 1 -D /data1/mpp/data1/slave09/ #先变成Standby Need repair(Disconnected),然后是Standby Promoting,这时候起来从备
启动从备:
cm_ctl start -n 2 -D /data1/mpp/data1/dummy09
备机升主成功。
启动原主机:
cm_ctl start -n 3 -D /data1/mpp/data1/master09
原主机启动成功后降为备机。
启动CN结点,恢复业务:
- cm_ctl start -n 1 -D /data1/mpp/coordinator1
- cm_ctl start -n 2 -D /data1/mpp/coordinator2
- cm_ctl start -n 3 -D /data1/mpp/coordinator3
检查结点状态是否恢复正常:
cm_ctl query –Cvd
数据校验。
启动业务。
在数据验证完成后,启动业务。
在数据库集群使用过程中,由于网络部署调整、机房搬迁、网络故障等带来主机IP地址和端口号的变更。GaussDB Kernel提供了gs_om的changeip操作可以在不换主机、不改变集群其他配置的前提下,快速实现集群IP地址、主机名或者端口号的变更。
1.以root用户身份登录数据库集群任一主机。
2.修改集群部署配置文件clusterconfig.xml,把主机的IP和hostname或者端口号替换为新的。
3.进入安装包解压后的script文件夹。例如,安装包存放路径为/opt/software/GaussDB_Kernel。
cd /opt/software/GaussDB_Kernel/script
4.准备集群环境。
./gs_preinstall -U omm -G dbgrp -X ../clusterconfig.xml --alarm-type=5
omm为运行集群的操作系统用户,dbgrp为操作系统用户的群组名称,clusterconfig.xml为集群配置文件,此示例中假设其存储在安装包存放路径下。
5.切换为omm用户。
su - omm
6.执行如下命令进行修改集群IP操作。
- gs_om -t changeip -X clusterconfig.xml
- clusterconfig.xml为修改后的配置文件。
如果执行修改集群IP过程中出现错误,系统调用自动回滚。如果自动回滚过程中,因为磁盘满等原因,导致回滚失败,则用户排除错误后,如需继续执行修改IP则调用本命令,如果要放弃修改IP,则调用如下命令将集群恢复到修改ip之前的状态:
gs_om -t changeip -X clusterconfig.xml --rollback
集群的IP和端口号都需要使用gs_om工具进行修改。
本文作者:subverter
本文内容来自从事数据库运维的subverter老师,先后就职于互联网企业和能源企业,拥有9年的数据库开发和管理经验,擅长主流数据库的运维开发、备份恢复、安装迁移、故障处置、性能优化等,随着国产数据库的崛起,对华为的GaussDB系列数据库进行了深入学习,目前针对主流数据库迁入GaussDB数据库积攒了大量案例,同时希望再接再厉,为国产信创版块贡献绵薄之力。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。