早上到公司刚打开电脑,GPCC监控突然弹红色告警:「集群状态不平衡」,点进去一看,十几个Segment的状态全是Not In Sync,当时心里一紧:完了,是不是数据要丢了?
别慌,这种90%的场景都是同步问题,跟着下面的步骤走,10分钟就能恢复:
第一步:先确认集群详细状态
先source一下Greenplum的环境变量,再执行状态查询命令,先看整体情况:
[gpadmin@node1 ~]$ source /usr/local/greenplum-db-6.23.0/greenplum_path.sh
[gpadmin@node1 ~]$ gpstate -s输出里重点看Status列:如果是Down就是Segment进程挂了,如果是Not In Sync就是主备镜像没同步上,先记下来哪些Segment出问题,对应的主机是哪台。
第二步:查镜像同步状态
执行镜像查询命令,看每个Segment的主备角色和同步状态:
[gpadmin@node1 ~]$ gpstate -m输出里会显示每个Segment是Primary还是Mirror,Sync Status是Sync还是Not In Sync,如果Mirror状态是Not In Sync,基本就是同步链路断了。
第三步:执行Segment恢复
先执行恢复命令,让主备镜像重新同步:
[gpadmin@node1 ~]$ gprecoverseg执行完别急着下一步,等个1-2分钟,再跑一次gpstate -m,看所有Segment的Sync Status都变成Sync了再往下走。这里踩过坑的都知道:没等同步完成就执行重平衡,等于白干,还会加重集群负载。
第四步:执行重平衡
同步完成后执行重平衡命令,让数据在集群里均匀分布:
[gpadmin@node1 ~]$ gprecoverseg -r等输出出现The rebalance operation has completed successfully.就说明成功了。
第五步:验证恢复结果
最后再跑一次gpstate -s,看所有Segment的状态都是Normal,GPCC监控里的告警消失,就完全恢复了。
常见踩坑点
- 如果执行
gprecoverseg失败,先查故障Segment所在主机的磁盘使用率、网络连通性,90%的失败都是磁盘满了或者主机之间网络不通导致的; - 如果是主Segment宕机,镜像会自动升为主,不用手动切,只要等同步完成就行;
- 恢复过程中不要做DDL操作,避免加重集群负载。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




