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

news2024/11/20 15:15:52

简介

  在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.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/316.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySql(50)MySQL日志

文章目录MySQL支持的日志日志类型日志的弊端慢查询日志(slow query log)通用查询日志查看当前状态启动日志永久启动临时启动查看日志删除\刷新日志错误日志(error log)删除\刷新日志二进制日志(bin log)查看默认情况日志参数设置查看日志使用日志恢复数据删除二进制日志PURGE M…

vue3 响应式对象的 api ,你全用过了吗?

文章目录Ⅰ. ref、reactive ( 递归监听 )Ⅱ. isRef、isReactive ( 判断 )Ⅲ. toRef 和 toRefs ( 解构 )Ⅳ. toRaw 、 markRaw ( 解除代理)Ⅴ. unref ( 拷贝 )Ⅵ. shallowRef 、shallowReactive( 非递归监听 )Ⅶ. triggerRef (强制更新&#x…

红黑树原理及旋转

红黑树,本质上来说就是一棵二叉查找树 但它在二叉查找树的基础上增加了着色和相关的性质使得红黑树相对平衡 保证了红黑树的查找、插入、删除的时间复杂度最坏为O(log n) 但它是如何保证一棵n个结点的红黑树的高度始终保持在h logn的呢?这就引出了红黑…

相似度_对抗学习:SimCSE: Simple Contrastive Learning of Sentence Embeddings

SimCSE: Simple Contrastive Learning of Sentence Embeddings 这篇论文,我觉得有意思。在创造对抗学习的正负例时,正例直接使用它本身。将同一个句子传递给预先训练好的编码器两次:通过应用两次dropout,我们可以得到两个不同的嵌…

云计算基础:云计算越来越广泛,我们应该如何去学习云计算

随着时代的发展,云计算越来越普及,越大众化,使用的人越来越多,我们应该如何去学习这门技术呢?这篇文章我们就来介绍如何学习我们的云计算。 学前介绍: 学前介绍 学习资料:HedEX Lite、产品文档、笔记、P…

非科班程序员被裁员后反而涨薪了200%,这两个月他都经历了哪些?

今年年初开始,裁员潮一浪接着一浪翻滚而来,让互联网人胆颤心惊,时刻担心下一波裁员是否就要降临到自己身上。 小帅(化名)是一个原本月薪8k,在小外包公司做政府项目的一名普通员工,前不久就被裁员…

数据仓库建模(四):维度表的设计

数据仓库建模(四):维度表的设计一、维度表的整体结构1.1 维度表的结构设计1.2 维度代理键1.3 自然键、超久键和超自然键1.4 下钻与上卷1.5 维度退化1.6 非规范化的扁平维度1.7 多层次维度1.8 维度属性的标识与状态信息1.9 维度表中的空值属性…

趣学算法(2)

14天阅读挑战赛 目录前言一 几类时间复杂度二 兔子数列1.问题分析2.方法13.方法24.方法3最后前言 这篇文章是《趣学算法》的读书笔记,也对数据结构与算法的初步介绍,阅读这篇文章,我会带你改进一个算法。 一 几类时间复杂度 常见的算法时间复…

Vue项目的记录(十三)

1.登录注册静态组件 assets这个文件夹放所有的组件公用的静态资源 在样式当中也可以使用符号,(src目录的别名),要注意的是在前面你加上~ 2.注册业务 这里的验证码,正常来说应该是要后台发送到用户手机上&#xff0c…

拓端tecdat|R语言辅导配对检验分析案例

全文链接:http://tecdat.cn/?p3424 原文出处:拓端数据部落公众号 什么是检验对? 检验对的形式 (x1,x2) 出现在两种情况中: 对同一实体执行两次测量。例如,一项评估新型胰岛素疗效…

C-文件操作实现数据持久化,帮你快速了解文件操作函数

目录 一.了解文件 二.文件的打开和关闭 三.顺序读写文件函数 fputc字符输入函数 fgetc字符输入函数 fputs文本行输出函数 fgets文本行输入函数 fprintf格式化输出函数 fscanf格式化输入函数 fwrite二进制输出函数 fread二进制输入函数 四. 解析上述的流 五.文件的随机…

Redis 主从安装-Centos

Redis 主从安装-Centos 由于机器有限,所以接下来的教程都是在一台虚拟机中进行部署安装. Redis主从工作原理 如果你为master配置了一个slave,不管这个slave是否是第一次连接上Master,它都会发送一个PSYNC命令给master请求复制数据。master…

计算机网络--传输层

这篇博客博主应该在前天就要完成的,但是博主忙乱了,又堕落几天,希望大家别像我一样最近学习三天打鱼,两个天晒网的。此后博主为了激励自己重头再来,就特意换了个发型,哈哈。回到正题,传输层也是…

操作系统真相还原_第4章:进入保护模式

文章目录实模式的缺陷保护模式的扩展段寄存器的变化寄存器扩展寻址扩展全局描述符表GDT描述符格式字段含义进入保护模式步骤解释示例说明程序编写boot.incmbr.sloader.s编译并写入硬盘启动bochs执行实模式的缺陷 1、实模式下用户程序所引用的地址都是指向真实的物理地址&#…

计算机等级考试Python二级

补记录一下之前考Python二级的一些相关理论记录 数据结构与算法 算法杂度 算法复杂度用来衡量算法的优劣,它包括算法的时间复杂度和算法的空间复杂度 时间复杂度:执行算法所需要的计算量【所需要的计算工作量是用算法所执行的基本运算次数来度量的】 …

子串和子序列问题-动态规划向

1. 子串子序列问题概述 有关于子序列和子串的问题是字符串或者数组经常会遇到的问题,一般我们经常使用多指针,滑动窗口,回溯,动态规划的方式去解决,而本篇重点关注能用动态规划解决或者说明显使用动态规划解决的子串问…

Java开发手册解析_编程规约-集合处理

前言 《Java开发手册(黄山版)》编程规约-集合处理 该章节的知识点基本都来源于jdk源码,将结合源码及例子进行理解 备注:文章中的详细及说明为手册本身内容 博客地址:芒果橙的个人博客 【http://mangocheng.com】 1.【强…

服务与发现

文章目录服务与发现什么是服务发现应用层服务发现模式平台层服务发现模式服务与发现 假设你正在编写一些调用具有 REST API 的服务的代码,为了发出请求,你的代码需要知道服务实例的网络位置(IP 地址和端口),在物理硬件…

整型数据是如何在内存中存储的

🏖️作者:malloc不出对象 ⛺专栏:《初识C语言》 👦个人简介:一名双非本科院校大二在读的科班编程菜鸟,努力编程只为赶上各位大佬的步伐🙈🙈 目录前言一. 整型在内存中的存储1.1 整型…

Vue2生命周期详细图解和代码

加油&#xff0c;新时代打工人&#xff01;&#xff01;&#xff01; 话不多说&#xff0c;看图。 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"…