greenplum 源码解析 FTS辅助进程--ReadMe

简介

  在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.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值