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集群要被修复的节点
步骤2 使用如下命令在需要修复实例的主机上清理可能存在的残留文件。此命令仅在上次修复故障实例执行失败的情况下需要执行。
| if [ -f $PGHOST/GaussReplace.dat ];then rm $PGHOST/GaussReplace.dat;fi |
| 说明
该文件为替换故障实例、替换主机中产生的用于记录执行步骤的临时文件,如果在上次执行过程中出现宕机或网卡中断等,可能会导致该文件残留。在替换故障实例前检查该文件是否存在,且生成时间非本次替换故障实例的时间,则可判断为上次执行的残留文件,删除该文件后,继续执行替换故障实例。 |
6.2修改原cn目录名称(被修复节点有cn时做)
步骤1 以Ruby用户登录需要被修复的节点
步骤2 使用如下命令修改原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用户登录需要被修复的节点
步骤2 使用如下命令将备份的白名单还原,操作前确认备份的白名单文件没有损坏。
| 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语句
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/tech/bigdata/316752.html