1.    适用场景

  •      DN状态异常(down)
  •      CN处于deleted或down状态

2.    前提条件

1) DWS集群安装成功,且处于已启动状态。

2) DN环的主、备实例不能同时损坏,DN环的主、从备实例不能同时损坏,DN环的备、从备实例不能同时损坏,即一个DN环中只能损坏一个实例。

3) DWS集群内如下实例至少存在一个正常运行的:

◾CMServer

◾CMAgent

◾GTM

◾Coordinator

4) 如果某个GTM实例存在故障,则要求实例修复前另外一个GTM实例必须为最高可用模式。

3.    注意事项

1) 操作要在正常节点执行,不能在被修复节点执行

2) 在前一次修复结束后才能再次执行修复。

2) 修复前不能锁定DWS集群。

3) 修复故障实例过程中系统将关闭“自动剔除故障CN”功能,完成后系统再次打开该功能。因此建议在开始修复前确认故障的CN已经被自动剔除(即故障的CN状态为Deleted),否则在修复过程中用户执行DDL会报错。

4) 实例修复前用户手动在故障实例上配置的guc参数、pg_hba.conf配置的白名单会丢失,需要提前备份。

5) gs_replace不涉及cn的,可以在线执行;gs_replace涉及cn的,要保证被修复的cn没有DDL业务接入

6) 所有操作在沙箱内执行

4.    对系统影响

由于过程中会短暂锁集群,锁集群后用户下发的包含显式启动事务的DDL语句会出现等待,集群解锁后会报错或等待时间超过20分钟会报错。如包含创建临时表操作,在集群解锁后会报错(Don’t support temp table when need reconnect pooler)。故需要离线变更,执行停业务和禁止白名单的操作。

5.    准备工作

5.1检查集群状态

步骤1 以Ruby用户登录DWS集群的第一个正常的cn节点

步骤2 执行以下命令,查看GaussDB A集群当前状态

cm_ctl query -Cv

查看具体故障实例所在节点:实例不是“Normal”状态,且持续5分钟没有自恢复

[   Cluster State   ]

 

cluster_state   : Degraded

redistributing  : No

balanced        : Yes

 

[  Datanode State   ]

 

node         instance state            | node         instance state            | node         instance state

————————————————————————————————————————–

1  redhat1-1 6001  P Down Disk damaged | 2  redhat1-2 6002     S Standby Normal | 3  redhat1-3 3002     R Secondary Normal

1  redhat1-1 6003     P Primary Normal | 3  redhat1-3 6004     S Standby Normal | 2  redhat1-2 3003     R Secondary Normal

2  redhat1-2 6005     P Primary Normal | 3  redhat1-3 6006     S Standby Normal | 1  redhat1-1 3004     R Secondary Normal

2  redhat1-2 6007     P Primary Normal | 1  redhat1-1 6008     S Standby Normal | 3  redhat1-3 3005     R Secondary Normal

3  redhat1-3 6009     P Primary Normal | 1  redhat1-1 6010     S Standby Normal | 2  redhat1-2 3006     R Secondary Normal

3  redhat1-3 6011     P Primary Normal | 2  redhat1-2 6012     S Standby Normal | 1  redhat1-1 3007     R Secondary Normal

步骤4以上查询结果为例,故障实例所在节点名称为redhat1-1

5.2将集群内白名单改为trust

gs_guc set -Z coordinator -Z datanode -N all -I all -h “local all all trust”

5.3关闭集群通信白名单(需要离线时做)

注意:若被修复节点上没有cn,在没有IO压力的情况下可以在线操作。如果被修复节点有cn,则必须离线操作!

步骤 1  现场实施人员知会并确认用户已完成数据库业务停止操作。

步骤 2  以Ruby用户登录第一个正常的CN节点,执行如下命令注释用户白名单

以默认CN实例目录/DWS/data1/coordinator为示例,现场需根据实际情况进行调整。

gs_guc set -Z coordinator -Z datanode -N all -I all -h “host all all 0.0.0.0/0”

步骤 3  以Ruby用户登录第一个正常的CN节点,关闭DWS实例节点下的后台访问连接和应用连接。具体操作如下:

gs_ssh -c “ps ux |grep -w gsql |grep -v grep |awk ‘{print \$2}’ |xargs -r kill -9”

gs_ssh -c “ps ux |grep -w ap_agent |grep -v grep |awk ‘{print \$2}’ |xargs -r kill -9”

步骤 4  以Ruby用户登录每一个正常CN节点,执行如下命令重启CN。

执行以下命令,获取到CN的进程Pid

ps -ef | grep /DWS/data1/coordinator | grep -v grep

执行以下命令,杀死CN进程

kill -9 Pid

执行以下命令,观察CN被重新拉起,并且Pid与之前获取的Pid不同

ps -ef | grep /DWS/data1/coordinator | grep -v grep

6.    变更

6.1清理残留文件

步骤1 以Ruby用户登录DWS集群要被修复的节点

步骤使用如下命令在需要修复实例的主机上清理可能存在的残留文件。此命令仅在上次修复故障实例执行失败的情况下需要执行。

if [ -f $PGHOST/GaussReplace.dat ];then rm $PGHOST/GaussReplace.dat;fi

 

说明

该文件为替换故障实例、替换主机中产生的用于记录执行步骤的临时文件,如果在上次执行过程中出现宕机或网卡中断等,可能会导致该文件残留。在替换故障实例前检查该文件是否存在,且生成时间非本次替换故障实例的时间,则可判断为上次执行的残留文件,删除该文件后,继续执行替换故障实例。

6.2修改原cn目录名称(被修复节点有cn时做)

步骤1 以Ruby用户登录需要被修复的节点

步骤使用如下命令修改原cn目录名称,防止修失败回退后误拉起损坏的cn。

mv /DWS/data1/coordinator /DWS/data1/coordinator_bak

 

6.3配置实例

步骤1 以Ruby用户登录DWS集群的健康节点

步骤2 执行以下命令,完成故障实例所在节点配置操作

gs_replace -t config -h redhat1-1

 

说明

配置操作会清理替换实例的空间,初始化替换实例,配置替换实例。

如果收到提示:“GAUSS_50201: The XXX does not exist.”,则请检查对应的实例数据目录是否存在。如果不存在,请重新创建目录后再次执行上述命令。

如果指定主机的表空间所在磁盘出现故障,从而导致表空间中的数据损坏,更换新磁盘后,需要指定“–force”参数对该主机强制进行表空间数据的恢复。如果在config阶段指定“–force”参数,则在start阶段也必须指定“–force”参数。

6.4还原cn的白名单(被修复节点有cn时做)

如果有配置elb,每个cn的白名单相同,可跳过此小节。

步骤1 以Ruby用户登录需要被修复的节点

步骤使用如下命令将备份的白名单还原,操作前确认备份的白名单文件没有损坏。

cp /DWS/data1/coordinator_bak/pg_hba.conf /DWS/data1/coordinator/

 

6.5恢复集群通信白名单(需要离线时做)

步骤1   以Ruby用户登录第一个正常的CN节点,执行如下命令注释用户白名单

以默认CN实例目录/DWS/data1/coordinator为示例,现场需根据实际情况进行调整。

gs_guc set -Z coordinator -N all -I all -h ‘host all all 0.0.0.0/0 sha256’

6.6恢复集群内白名单为sha256

gs_guc set -Z coordinator -Z datanode -N all -I all -h “local all all sha256”

6.7启动实例

步骤1 以Ruby用户登录DWS集群的健康节点

步骤2 执行以下命令,完成故障实例所在节点启动操作

gs_replace -t start -h redhat1-1

启动操作会启动集群替换实例的主机

gs_replace -t start -h redhat1-1

Starting.

======================================================================

Successfully started instance process. Waiting to become Normal.

======================================================================

.

======================================================================

Start succeeded on all nodes.

Start succeeded.

6.8重置实例

参考主备均衡方案实施。

https://bbs.huaweicloud.com/forum/thread-150166-1-1.html

7.    验证步骤

7.1确认结果

1)后台集群状态验证

步骤1 以Ruby用户登录DWS集群的第一个正常的cn节点

步骤2 执行以下命令,查看DWS集群当前状态

cm_ctl query

如下则为正常

[   Cluster State   ]

 

cluster_state  :  Normal

redistributing : No

balanced       : Yes

2)客户业务验证

验证方案需包括DDL和DML语句