前言

FTS(Fault Tolerance Serve)是GreenPlum中的故障检测服务,是保证GP高可用的核心功能。GreenPlum的Segment的健康检测及HA是由GP Master实现的,GP Master上面有个专门的进程–FTS进程,它可以快速检测到Primary或者Mirror是否挂掉,并及时作出Primary/Mirror 故障切换。

一、FTS架构

GreenPlum的Segment的健康检测及HA是由GP Master实现的,GP Master上面有个专门的进程–FTS进程,它可以快速检测到Primary或者Mirror是否挂掉,并及时作出Primary/Mirror 故障切换。如果FTS挂掉了,Master将会重新fork出来一个FTS进程。

Greenplum--FTS故障检测原理

二、FTS实现原理

GP Master上面的FTS进程每隔60s(时间可以配置)向Primary或者Mirror发送心跳包,Primary和Mirror收到心跳包后返回它们的当前状态,FTS进程心跳包的发送状态和Segment返回状态更新元信息和作出故障切换。因为Segment可能很多,为了加快检测速度,FTS是多线程的,默认16个线程。

Greenplum--FTS故障检测原理

三、Segment检测及故障切换

GP Master首先会检测Primary状态,如果Primary不可连通,那么将会检测Mirror状态,Primary/Mirror状态总共有4种:

Primary活着,Mirror活着。GP Master探测Primary成功之后直接返回,进行下一个Segment检测;

Primary活着,Mirror挂了。GP Master探测Primary成功之后,通过Primary返回的状态得知Mirror挂掉了(Mirror挂掉之后,Primary将会探测到,将自己变成ChangeTracking模式),这时候更新Master元信息,进行下一个Segment检测;

Primary挂了,Mirror活着。GP Master探测Primary失败之后探测Mirror,发现Mirror是活着,这时候更新Master上面的元信息,同时使Mirror接管Primary(故障切换),进行下一个Segment检测;

Primary挂了,Mirror挂了。GP Master探测Primary失败之后探测Mirror,Mirror也是挂了,直到重试最大值,结束这个Segment的探测,也不更新Master元信息了,进行下一个Segment检测。

Greenplum--FTS故障检测原理

四、参数配置

4.1、gp_fts_probe_threadcount

用来故障检测的线程数量,默认为16。

4.2、gp_fts_probe_interval

两次检测的时间间隔,默认为60s。如果一次检测时间使用10s,那么剩余50s将会sleep;如果超过60s,将会直接进入下一次检测。

4.3、gp_fts_probe_timeout

检测Segment超时时间,默认值: 20。

4.4、gp_fts_probe_retries

检测Segment失败重试次数,如果超过这个次数,将会认为当前节点挂掉,默认值: 5。

4.5、gp_segment_connect_timeout

Prmary和Mirror文件同步允许连接Mirror最大超时时间,如果达到这个超时时间,Primary将会认为Mirror挂掉了,默认值: 180s。

五、总结

通过GreenPlum FTS机制学习,可以了解部分MPP架构高可用原理。同时根据自身的业务,合理地配置FTS参数,保障GP高可用。

转载自:https://www.2cto.com/database/201901/793369.html

最新文章

  1. ios页面过渡效果插件Kontext
  2. Python 时间和日期模块的常用例子
  3. 联机事务处理OLTP(on-line transaction processing)和联机分析处理OLAP(On-Line Analytical Processing)
  4. java的读文件操作
  5. resolve some fragment exception
  6. uploadify IO Error/http error 413
  7. String类的split方法以及StringTokenizer
  8. bzoj 2482: [Spoj GSS2] Can you answer these queries II 线段树
  9. 百度地图JavaScript API V1.5初级开发工具类
  10. 洛谷-均分纸牌-NOIP2002提高组复赛
  11. 调用Live555接收RTSP直播流,转换为Http Live Streaming(iOS直播)协议
  12. 伪样式:hover ,:active,:focus
  13. 设计模式及Python实现
  14. js-jquery-Validate校验【一】
  15. implements和extends的区别
  16. Linux系统中/dev/mtd与/dev/mtdblock的区别,即MTD字符设备和块设备的区别
  17. oracle数据库导入导出09192255
  18. linux 小技巧
  19. CSS学习(九)-CSS背景
  20. ASP.NET控件之RegularExpressValidator控件

热门文章

  1. DS 壹之型 头指针与头结点
  2. MySQL练手小试题
  3. 集成maven和Spring boot的profile
  4. 分享大麦UWP版本开发历程-03.GridView或ListView 滚动底部自动加载后续数据
  5. 14-3 SQL Server基本操作
  6. String 字符串的==和eqauls区别
  7. error LNK2005: “找到一个或多个多重定义的符号” 已经在 xxxx.obj 中定义 的解决方法
  8. 查询本地ip以及ip地址库查询
  9. SAP云平台上的SSO Principal Propagation设置
  10. 设置yum自动更新