简介

  在greenplum数据库中master节点有一个专属进程Fault Tolerance Service (FTS: 容错服务),其主要功能是检测所有segment节点的健康信息,如果其检测到segment节点的primary出现异常[硬件故障/宕机],会在第一时间将其对应的mirror提升为新的primary,以保证系统业务的不断运行,实现高可用。[ greenplum架构知识:greenplum架构介绍。

实现原理

  FTS进程不断轮询每个segment上的primarry,向其发送探活消息,如果在规定的时间内收到对应primary的ACK响应,则表明其在线==健康;如果没有收到ACK相应,则会进行重发,超过尝试次数后仍未果,则会将对应的mirror 提升为primary以保证服务的不间断运行,最后会更新系统 表gp_segment_configuration元数据信息,因为 Dispatcher会根据此信息创建gangs ,segment上的执行计划由primary来完成,而gang 是不同segment 上同一个slice的集合。

正常情况下,FTS通过读取系统表 gp_segment_configuration获取集群所有QE中每一对primary-mirror 的健康状态信息,以表明是否在线或者下线, 信息如下图:

工作流程

1 FTS在每次轮询中会经历如下四个步骤(源码后期讲解):

  1. ftsConnect()
  2. ftsPoll()
  3. ftsSend()
  4. ftsReceive()
  5. processRetry()
  6. processResponse()

FTS进程通过TCP/IP方式与每个segment的primary(或mirror 发生故障迁移)节点进行连接。然后发送请求已等待响应。一旦接收到响应会跟系统表 gp_segment_configuration 和gp_configuration_history相关信息,同时也会更新相应的内存数据结构。

2 FTS
在PostgresMain 循环中,

 - Probe         // 探活- Sync             // 同步- Promote          // 提升

3 触发FTS探活途径
1 )探活时长超过配置参数 gp_fts_probe_interval 会触发新的探活周期 internal
2 )查询分发器 Dispatcher触发,即下发执行计划生成gang internal
3 )用户手动执行 gp_request_fts_probe_scan() 函数命令 external

4 轮询图解

Two main scenarios to consider:
1) Allowing multiple probes both internal and external to reuse the same results
when appropriate (ie: piggybacking on previous results). This is depicted as
requests 1, 2, and 3 which should share the same results since they request
before the start of a new fts loop, and after the results of the previous probe
- that is in the lower portion.在特定场合内部途径和外部途径会重用相同结果,如图中的request1,request2和request3,因其均为在
同一term的loop请求。2) Ensuring fresh results from an external probe. This is depicted as request
4 incoming during a current probe in progress. This request should get fresh
results rather than using the current results (ie: "piggybacking").可以通过外部手段获取实时系统转态信息,图中的request4便会完整的执行完整个探活过程,因此获取的
segment健康状态信息是实时准确的Our implementation addresses these concerns with a probe start tick and probe
end tick. We send a signal requesting fts results, then wait for a new loop to
start, and then wait for that current loop to finish.

greenplum 源码解析 FTS辅助进程--ReadMe相关推荐

  1. greenplum 源码解析 FTS辅助进程工作主流程

    1 简介   FTS(Fault Tolerance Service)是greenplum提供的对于子节点的故障检测与恢复的服务.其隶属于master的一个子进程,通过定期轮询每个primary的状态 ...

  2. greenplum源码解析 全局死锁检测GDD-1

    背景   对于单机数据库而言[如postgres],死锁检测机制相对于分布式数据库如greenplum来说相对简单,其本质是通过相关约束构造等待图,如果出现死锁情况,则采用拓扑排序重排序列规避死锁,若 ...

  3. 跳一跳python辅助软件思路及源码解析

    跳一跳python辅助软件思路及图像识别源码解析 本文将梳理github上最火的wechat_jump_game的实现思路,并解析其图像处理部分源码 首先废话少说先看效果 核心思想 获取棋子到下一个方 ...

  4. 2022-10-24 ClickHouse 源码解析-查询引擎经典理论

    ClickHouse 源码解析: 综述 ClickHouse 源码解析: MergeTree Write-Path ClickHouse 源码解析: MergeTree Read-Path Click ...

  5. [源码解析] 模型并行分布式训练Megatron (5) --Pipedream Flush

    [源码解析] 模型并行分布式训练Megatron (5) --Pipedream Flush 文章目录 [源码解析] 模型并行分布式训练Megatron (5) --Pipedream Flush 0 ...

  6. Hotspot 对象引用Reference和Finalizer 源码解析

    目录 一.Reference 1.SoftReference / WeakReference / PhantomReference 2.定义 3.ReferenceHandler 4.Cleaner ...

  7. openxr runtime Monado 源码解析 源码分析:CreateSwapchain 画布 HardwareBuffer共享纹理 渲染线程 xrEndeFrame comp_renderer

    monado系列文章索引汇总: openxr runtime Monado 源码解析 源码分析:源码编译 准备工作说明 hello_xr解读 openxr runtime Monado 源码解析 源码 ...

  8. [源码解析] 并行分布式任务队列 Celery 之 多进程架构和模型

    [源码解析] 并行分布式任务队列 Celery 之 多进程架构和模型 文章目录 [源码解析] 并行分布式任务队列 Celery 之 多进程架构和模型 0x00 摘要 0x01 Consumer 组件 ...

  9. 01.Fabric源码解析---线头(王雅震)

    Fabric源码解析1--线头 Getting Started 简单提一下Fabric说明文档中的Getting Started部分.说明文档下载地址在 http://hyperledger-fabr ...

最新文章

  1. 毕业季:理想很丰满,现实也可以很丰满!
  2. FZU 2087 统计树边【MST相关】
  3. 混沌模型时间序列预测
  4. iis url重写 域名跳转子目录_逐浪CMS小哥整理IIS设置URL重写,实现页面的跳转的重定向方法...
  5. spring boot报错:Unable to start embedded Tomcat server 权限不够
  6. TypeError: sequence item 0: expected str instance, int found
  7. ipython notebook笔记(待续)
  8. 高德上线 “家人地图”功能 家人可随时查看彼此的位置
  9. HDU1859 最小长方形【水题】
  10. 2018年python工作好找吗-2018年涨工资了吗?Python 工程师薪资最新出炉
  11. HashTable,HashMap和ConcurrentHashMap的区别?
  12. php 类 抽象方法,「php抽象类和抽象方法」- 海风纷飞Blog
  13. 视频直播技术详解之延迟优化
  14. 去世父亲在儿子手机中复活,这可能是最温暖的一个AI
  15. 95%置信区间的含义_置信度为95%的置信区间什么意思
  16. [UESTC878]温泉旅店
  17. 旅游订票订酒店团购(APP,JAVA后台管理,MYSQL)
  18. linux 加路由 网络不可达,无法添加静态路由:SIOADDRT:网络不可达
  19. TP-Link wr886n 路由器插上光纤后网速变慢问题
  20. 华为OD机试 - 相对开音节(C 语言解题)【独家】

热门文章

  1. 成熟男人的标准,努力去做
  2. 全部文章分类与整理(找工作+面试+资源分享),持续更新
  3. 关于女性开发者的 8 大误解
  4. linux屏蔽开机错误信息,arch linux 开机错误信息还有fcitx输入法问题,求解决!问题如下:...
  5. thinkphp6 跨模块调用
  6. 安卓文件浏览器ftp服务器地址,安卓文件浏览器ftp服务器
  7. Maven 异常 :Duplicated tag: ‘properties ‘
  8. 什么是uni-app?为什么要学习uni-app?
  9. 圆锥体完全均衡下重力异常正演 [MATLAB]
  10. 骁龙 805提供抢先发布产品的功能——在今天为明天的设备开发应用