当前位置: 首页 > news >正文

Greenplum集群故障修复小记

    今天有一套环境因为网络调整,结果诺大的Greenplum集群,primary和mirror节点部分有了故障,假设有200个实例,100个segment,100个mirror,情况就是100个实例出现了问题(可能mirror已经宕机,可能mirror切换为primary,可能primary切换为mirror)刚好保证了100个实例能够正常承接业务。

比如你通过GPCC的方式看到下面的这种情况,你的内心应该是崩溃的。

640?wx_fmt=png

    以下面的这个图为例,基本就是master是Greenplum节点,下面的PostgreSQL节点分别有多个segment组成,segment的角色分为primary和mirror,即每一个节点都是一个热备组合。640?wx_fmt=png

    这样来一铲子,或者网络的大的异常,那么整个集群中segment节点间的心跳就歇菜了。

    下面是问题发生时Greenplum节点抛出的日志信息:

2018-05-24 05:01:58.266841 CST,,,p42420,th972601120,,,,0,con2,,seg-1,,,,,"LOG","00000","FTS: primary (dbid=23) reported mirroring fault with mirror (dbid=124), mirror considered to be down.",,,,,,,0,,"ftsfilerep.c",358,

。。。

2018-05-24 05:01:58.266888 CST,,,p42420,th972601120,,,,0,con2,,seg-1,,,,,"LOG","00000","FTS: change state for segment (dbid=23, content=21) from ('u','p') to ('u','p')",,,,,,,0,,"fts.c",1157,

    可以从日志看到mirro发生了故障。

修复segment节点,Greenplum提供的工具集gprecoverseg还蛮不错,可以转储出一个列表recov,然后专门修复列表中的segment

$ gprecoverseg  -o ./recov

...

20180524:10:14:18:191458 gprecoverseg:xxxxx:gpadmin-[INFO]:-Configuration file output to ./recov successfully.

列表生成的信息如下:

$ less recov 

filespaceOrder=data2_sata_fsp

segment_51:41000:/data1/greenplum_data/gpdatam01/gpseg0

segment_51:41001:/data1/greenplum_data/gpdatam02/gpseg1

segment_51:41002:/data1/greenplum_data/gpdatam03/gpseg2

....

使用如下的方式开启恢复

gprecoverseg  -i ./recov 

整个过程GP的操作还是求稳,会逐个验证一遍segment的状态,保证要恢复的segment节点是down的状态,等都验证完成后,进入交互模式,你得确定要恢复才会开始。

640?wx_fmt=png

修复完成后,segment节点就会开启同步了。

640?wx_fmt=png

但是还是有不完善的地方,就是有12个节点的角色依然是有问题的。比如之前是primary,现在切换成了mirror,那么preferred role就是primary.

对于这种情况,还是gprecoverseg里面的-r选项就可以实现这个需求。

gprecoverseg -r

整个过程会持续一些时间,最后的结果还是喜人的。

640?wx_fmt=png

这种场景如果自己练习,内心可能不会有什么波澜,假设这个业务很重要,而且需要快速恢复,你甚至都不能保证所有的操作100%有效,不会触发bug,想想小心脏都受不了啊。

相关文章:

  • 运维开发流程梳理和思考
  • MySQL 8.0初体验
  • Oracle Cloud初体验
  • MySQL权限开通的设计方案
  • Oracle Cloud for MySQL的初步测试
  • 技术分享活动的小结
  • 两道简单的数学题
  • 技术学习的一些建议
  • 我的女儿二三事(十一)
  • 一些技术认证的学习成本感想
  • 快高考了,写点东西给你们
  • 最近在读的三本书
  • 对于备份的敬畏
  • 2035年的思考
  • Greenplum集群问题修复小结
  • (三)从jvm层面了解线程的启动和停止
  • [数据结构]链表的实现在PHP中
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • 10个确保微服务与容器安全的最佳实践
  • AHK 中 = 和 == 等比较运算符的用法
  • express.js的介绍及使用
  • Java程序员幽默爆笑锦集
  • Mac转Windows的拯救指南
  • Nacos系列:Nacos的Java SDK使用
  • Shadow DOM 内部构造及如何构建独立组件
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • 从0实现一个tiny react(三)生命周期
  • 第三十一到第三十三天:我是精明的小卖家(一)
  • 复杂数据处理
  • 工作中总结前端开发流程--vue项目
  • 解决iview多表头动态更改列元素发生的错误
  • 开源中国专访:Chameleon原理首发,其它跨多端统一框架都是假的?
  • 普通函数和构造函数的区别
  • 如何在 Tornado 中实现 Middleware
  • 一些关于Rust在2019年的思考
  • elasticsearch-head插件安装
  • ​第20课 在Android Native开发中加入新的C++类
  • # 数论-逆元
  • ###项目技术发展史
  • (1)(1.13) SiK无线电高级配置(六)
  • (13):Silverlight 2 数据与通信之WebRequest
  • (差分)胡桃爱原石
  • (二)pulsar安装在独立的docker中,python测试
  • (二)springcloud实战之config配置中心
  • (附源码)ssm高校志愿者服务系统 毕业设计 011648
  • (个人笔记质量不佳)SQL 左连接、右连接、内连接的区别
  • (力扣)循环队列的实现与详解(C语言)
  • (学习日记)2024.02.29:UCOSIII第二节
  • (原創) 人會胖會瘦,都是自我要求的結果 (日記)
  • (原創) 是否该学PetShop将Model和BLL分开? (.NET) (N-Tier) (PetShop) (OO)
  • (转)C#调用WebService 基础
  • (转)GCC在C语言中内嵌汇编 asm __volatile__
  • (转)拼包函数及网络封包的异常处理(含代码)
  • (转载)Linux网络编程入门
  • ./configure、make、make install 命令