2019独角兽企业重金招聘Python工程师标准>>>

Postgres XL包含3个主要的组件:GTM, Coordinator和Datanode.

GTM负责提供事务的ACID特性。

Datanode在本地存储表数据,和处理SQL语句。

Coordinator处理从Applications来的每个SQL语句,决定到哪个datanode去执行,并且发送执行计划到对应的datanode。

通常GTM需要运行在一个独立的server,因为GTM需要处理从所有的coordinator和datanode来的事务请求。为了减少数据交互,将来自同一个server的coordinator和datanode的请求和响应分到同一个组,可以通过配置GTM-proxy来实现,GTM-proxy实际上是一个代理,coordinator和datanode本来是直接连接GTM的,可以将多个Coordinator分组,每组一个GTM-proxy,coordinator与GTM-proxy相连,GTM-proxy通过批量发送请求(类似于聚合请求,减少请求次数)减少了到GTM的交互次数和数据量。GTM-proxy也帮助处理GTM节点失效的情况。

GTM一旦故障,整个集群立刻无法访问,此时可以切换到GTM Standby节点上。如果部署了GTM Standby节点,就应该同时部署GTM Proxy,一般和Coordinator、Datanode部署在同一台服务器上。GTM Proxy的作用代理Coordinator和Datanode对GTM的访问,起到减轻GTM负载的作用,另外一个重要的作用是帮助完成GTM的故障切换,当GTM节点发生故障后,GTM Standby成为新的GTM,此时Coordinator和Datanode节点并不需要重新指定GTM地址,只需要GTM Proxy重新连接到新的GTM地址即可。

比较好的做法就是将datanode和coordinator组件跑在同一个server上面,这样就不用担心二者间的负载均衡的问题,可以从本地的复制表来获取数据,不用发送请求到网络上。可以在多个server上运行datanode和coordinator组件组,datanode和coordinator组件本质上都是PostgresSQL实例,配置时需要配置不同的工作目录和端口以避免冲突。

coordinator不存储用户数据,它仅存储catalog数据,用来决定如何处理statements, 去那个datanode执行,并为每个datanode产生本地的SQL statements。故不需担心coordinator组件失效,直接切换到另外一个就可以。coordinator接收数据访问请求的节点,本质上是由PG后台进程组成。接收的一条查询后,Coordinator节点执行查询计划,然后会根据查询数据涉及的数据节点将查询分发给相关的数据节点。写入数据时,也会根据不同的数据分布策略将数据写入相关的节点。可以说Coordinator节点上保存着集群的全局数据位置。Coordinator节点可以任意扩展,各个节点之间除了访问地址不同以外是完全对等的,通过一个节点更新的数据可以在另一个节点上立刻看到。每个Coordinator节点可以配置一个对应的standby节点,避免单点故障。

Datanode是实际存取数据的节点,接收Coordinator的请求并执行SQL语句存取数据,节点之间也会互相通信。一般的,一个节点上的数据并不是全局的,数据节点不直接对外提供数据访问。一个表的数据在数据节点上的分布存在两种模式:复制模式和分片模式,复制模式下,一个表的数据在指定的节点上存在多个副本;分片模式下,一个表的数据按照一定的规则分布在多个数据节点上,这些节点共同保存一份完整的数据。这两种模式的选择是在创建表的时候执行CREATE TABLE语句指定的,具体语法如下:

CREATE TABLE table_name(...)
DISTRIBUTE BY
HASH(col)|MODULO(col)|ROUNDROBIN|REPLICATION
TO NODE(nodename1,nodename2...)

可以看到,如果DISTRIBUTE BY 后面是REPLICATION,则是复制模式,其余则是分片模式,HASH指的是按照指定列的哈希值分布数据,MODULO指的是按照指定列的取摩运算分布数据,ROUNDROBIN指的是按照轮询的方式分布数据。TO NODE指定了数据分布的节点范围,如果没有指定则默认所有数据节点参与数据分布。如果没有指定分布模式,即使用普通的CREATE TABLE语句,PGXL会默认采用分片模式将数据分布到所有数据节点。

GTM是一个失效单点所在,可以通过配置GTM-slave来备份GTM的状态,当GTM失效时,GTM-proxy可以切换到slave节点。

整个集群由GTM、GTM-Proxy、Coordinator、Datanode组成。

GTM(Gloable Transaction Manager)负责提供事务的ACID属性;

Datanode负责存储表的数据和本地执行由Coordinator派发的SQL任务;

Coordinator负责处理每个来自Application的SQL任务,并且决定由哪个Datanode执行,然后将任务计划派发给相应的Datanode,根据需要收集结果返还给Application;

GTM通常由一台独立的服务器承担,GTM需要处理来自所有GTM-Proxy或者Coordinator和Datanode的事务请求。

每台机器最好同时配置一个Coordinator、一个Datanode与GTM-Proxy。

每台机器同时配置一个Coordinator和一个Datanode,可以负载均衡,同时降低网络流量。GTM-Proxy会减少GTM的负载,将Coordinator和Datanode上进程的请求和响应聚集到一台机器上,同时会帮助处理GTM失效的情况。

GTM可能会发生单点故障,可以配置一个GTM-Standby节点作为GTM的备用节点。

2.1协调器(Coordinator)

处理客户端连接。

分析查询语句,生成执行计划,并将计划传递给数据节点实际执行。

对数据节点返回的查询中间结果集执行最后处理。

管理事务两阶段提交(2PC)。

存储全局目录(GlobalCatalog)信息。

2.2数据节点(DataNode)

实际存储表和索引数据,数据自动打散分布(或者复制)到集群中各数据节点。

只有协调器连接到数据节点才能可读写。

执行协调器下传的查询,一个查询在所有相关节点上并行查询。

两个数据节点间可建立一对一通讯连接,交换分布式表关联查询的相关信息。

2.3全局事务管理器(GTM)

全局事务管理器(GTM:Global Transaction Manager)

全集群只有一个GTM节点,会有单点故障问题,可以配置StranBy热备节点保证高可用。

通过部署GTM Proxy,解决GTM性能瓶颈。

提供事务间一致性视图。

处理必须的MVCC任务:

transaction IDs 事务ID。

snapshots 数据快照,MVCC使用。

管理全局性数据值:

timestamps 时间戳。

sequences 序列对象。

2.4GTM Proxy

Ø  与协调器(Coordinator)和数据节点(DataNode)在一起运行。

Ø  协调器、数据节点直接与GTM Proxy交互替代GTM,它做为后端与GTM间的中间人。

Ø  将对GTM的请求分组归集,多个请求一次提交给GTM。

Ø  获取transaction ids(XIDs)范围。

Ø  获取数据快照。

2.5数据分布

数据分布有两种模式: 复制表(Replicated Table)与分布表(Distributed Table)

复制表(Replicated Table):每行记录复制到集群中所有的数据节点,每节点一份。

分布表(DistributedTable):记录分片存在不同节点,可用的分片策略方式Hash、Round Robin、Modulo。

2.6高可用性

全局事务管理器采用热备方式。

多个协调器间负载均衡。

数据节点使用流复制,复制数据到备节点。

Reference:

https://www.postgres-xl.org/documentation/tutorial-arch.html

https://www.linuxidc.com/Linux/2016-11/137238.htm

转载于:https://my.oschina.net/u/2449787/blog/1789094

Postgres XL 集群中各节点的角色和作用相关推荐

  1. K8S集群中Node节点资源不足导致Pod无法运行的故障排查思路

    K8S集群中Node节点资源不足导致Pod无法运行的故障排查思路 文章目录 K8S集群中Node节点资源不足导致Pod无法运行的故障排查思路 1.Node节点资源不足可能会产生的故障 2.Node节点 ...

  2. 在不停业务的情况下重启ES集群中的节点

    之前写了一篇文章如何安全重启ES集群的节点,这又一个前提,就是需要停止写入业务.但是,有些时候业务是不能停的,又需要重启某一个节点(例如补丁修复,服务器更换等),这就需要用到本篇文章提到的不停业务重启 ...

  3. OpenShift 4 之让Route只运行在集群中Infra节点

    很多OpenShift的用户都非常喜欢其自带的Route功能,Route为外部用户提供了访问Pod的负载均衡功能,它要比Kubernetes缺省提供的Ingress功能强大很多.有关介绍可参见< ...

  4. mq 2085 java_websphere mq 不能访问集群中其它节点对列

    zh_CN.gb18030 简体中文 GB18030 5488 参考链接: How to find the CCSID value associated with the coded characte ...

  5. ES系列:停用集群中的节点

    目录 下线方法 按IP下线 按id下线 按name下线 验证方法 下线方法 按IP下线 PUT _cluster/settings {"transient": {"clu ...

  6. 在多节点集群中运行Cassandra

    这篇文章收集了我在多节点中设置Apache Cassandra集群的步骤. 在设置集群时,我已经参考了Cassandra Wiki和Datastax文档. 详细介绍了以下过程,分享了我建立群集的经验. ...

  7. 如何从rabbitmq集群中剔除某个节点以及如何将该节点加回集群

    一 如何从rabbitmq集群中剔除某个节点 这里打算移除rabbit@rabbitmq-03. ① 首先将要移除的节点停机 root@rabbitmq-03 ~]# rabbitmqctl stop ...

  8. Nacos8# 集群中节点之间健康检查

    引言 当新的节点加入集群或者集群中有节点下线了,集群之间可以通过健康检查发现.健康检查的频率是怎么样的?节点的状态又是如何变动的?状态的变动又会触发什么动作.带着这些问题本文捋一捋. 一.内容提要 内 ...

  9. Tomcat5集群中的SESSION复制详解

    Tomcat 5服务器为集群和SESSION复制提供了集成的支持.本系列的第一篇文章将为大家提供SESSION持久性以及TOMCAT集群中SESSION复制的 内在工作机制一个概要认识.我将会讨论SE ...

最新文章

  1. 目录/文件攻击防范策略研究
  2. MySQL-常用命令大全
  3. [javaweb] servlet介绍与servlet的继承关系 和 service 方法 (一)
  4. Jupyter Notebook——设置远程服务器登陆
  5. C++运算符重载讲解与经典实例
  6. PS图片后期之超简易造光调色方法
  7. typedef函数用法
  8. Python中遍历指定目录
  9. 解析文本文件 r 与 rb 模式的区别(Python)
  10. arm x86 区别_深入了解arm架构和x86架构有什么区别及各自的优势选型者重点查看...
  11. VS2019安装教程
  12. Java -- Servlet面试题及答案(需更深入了解)
  13. php渐变闪动字体代码,《天龙八部2》33种超好看彩色闪字渐变代码分享
  14. 网页录音之麦克风权限问题
  15. 使用Raygun Pulse进行真实用户监控
  16. QQ音乐车机模式中蓝牙音乐无效
  17. Open AI 自监督学习笔记:Self-Supervised Learning | Tutorial | NeurIPS 2021
  18. win7做服务器性能如何,win7如何做服务器配置
  19. 2022最火的Linux性能分析工具--perf
  20. python将图片转矩阵

热门文章

  1. javadoc 程序包android.content不存在,Eclipse中的Javadoc无法识别包
  2. HTML Img Compression(压缩)
  3. 7-5 图形继承与多态 (50 分)
  4. 汇编语言---统计数据区的正、负数并分开存放
  5. java 模板接口开发_微信公众平台 发送模板消息(Java接口开发)
  6. java cookie 覆盖吗_Java Web-Cookie和Session
  7. 编译单元必须以 java_java中什么是编译单元
  8. win10远程桌面 CredSSP加密Oracle修正的解决办法
  9. 【UOJ 50】树状数组2
  10. 标准WPS框架下的空间信息处理服务部署方法