GPDB · 特性分析· GreenPlum Primary/Mirror 同步机制

PostgreSQL 主备同步机制是通过流复制实现,其原理见之前的月报PG主备流复制机制

Greenplum 是基于PostgreSQL开发的,它的主备也是通过流复制实现,但是Segment节点中的Primary和Mirror之间的数据同步是基于文件级别的同步实现的。为什么Primary和Mirror不能再使用流复制实现呢?主要有两个原因:

  1. Append Only表不写WAL日志,所以Append Only表的数据就不能通过XLOG发送到Mirror再Apply;
  2. pg_control等文件也是不写WAL日志,也只能通过文件方式同步到Mirror。

GP总体结构

Greenplum 的架构采用了MPP 无共享体系。在 MPP 系统中,每个数据节点有自己的CPU、磁盘和内存(Share nothing),每个节点内的 CPU 不能访问另一个节点的内存。节点之间的信息交互是通过节点互联网络实现的,这个过程一般称为数据重分配(Data Redistribution)。GP master负责协调整个集群 ,一个数据节点可以配置多个节点实例(Segment Instances),节点实例并行处理查询(SQL)。

Primary和Mirror同步机制

Primary和Mirror同步的内容主要有两部分,即文件和数据。之所以Primary和Mirror要同步文件,是Primary和Mirror之间可以自动failover,只有两者保持同步才能相互替代,如果只把数据同步过去,pg_control、pg_clog、pg_subtrans 没有同步,那么从Primary切换到Mirror会出现问题。GP master和GP slave却不用担心这些问题,Append Only 表的数据只会存在 Segment,所以WAL日志足够保持GP master和GP slave同步(只要是流复制,pg_control、pg_clog、pg_subtrans 这些文件Slave会自动更新,无需从Master同步)。

数据同步

当GP master向Primary下发执行计划后,Primary开始执行,如果是DML操作,那么Primary会产生XLOG及更新page。会在SlruPhysicalWritePage函数中(写数据页)产生FileRepOperationOpen、FileRepOperationWrite、FileRepOperationFlush、FileRepOperationClose等指令消息(消息中包含具体要更新的文件page及内容),通过primary sender进程向Mirror发送Message,然后Mirror的mirror consumer等进程解析消息,执行变更。XLOG通过XLogWrite函数(写XLOG)执行同样的操作,把XLOG更新同步过去。

文件同步

Primary会有个recovery进程,这个进程会循环把Primary的 pg_control、pg_clog、pg_subtrans 等文件覆盖到Mirror。同时检查XLOG是否一致,如果不一致以Primary为主,对Mirror进行覆盖。除了把Primary部分文件同步到Mirror之外recovery进程还会将Mirror上面的临时文件删掉。

总结

Primary和Mirror同步数据的时候,Primary对于每一次写page都会通过消息发送到Mirror,如果Primary大量的更新page,那么Primary和Mirror同步将有可能成为瓶颈。

时间: 2024-12-28 20:45:13

GPDB · 特性分析· GreenPlum Primary/Mirror 同步机制的相关文章

GreenPlum Primary/Mirror 同步机制

PostgreSQL 主备同步机制是通过流复制实现,其原理见之前的月报PG主备流复制机制. Greenplum 是基于PostgreSQL开发的,它的主备也是通过流复制实现,但是Segment节点中的Primary和Mirror之间的数据同步是基于文件级别的同步实现的.为什么Primary和Mirror不能再使用流复制实现呢?主要有两个原因: Append Only表不写WAL日志,所以Append Only表的数据就不能通过XLOG发送到Mirror再Apply: pg_control等文件也

GPDB · 特性分析· GreenPlum FTS 机制

前言 FTS(Fault Tolerance Serve)是GreenPlum中的故障检测服务,是保证GP高可用的核心功能.GreenPlum的Segment的健康检测及HA是由GP Master实现的,GP Master上面有个专门的进程–FTS进程,它可以快速检测到Primary或者Mirror是否挂掉,并及时作出Primary/Mirror 故障切换.如果FTS挂掉了,Master将会重新fork出来一个FTS进程. FTS实现原理 GP Master上面的FTS进程每隔60s(时间可以配

GPDB · 特性分析· Greenplum 备份架构

Greenplum是分布式数据库,这为备份带来了一些困难.其本身提供了一个工具是gpcrondump,对其二进制备份工具gp_dump做了一些封装,而gp_dump则是对pg_dump做了封装,在每个节点上执行pg_dump完成数据的备份.在其每个节点的行为上,与PG类似,但其分布式的架构,则有值得了解的地方. 备份方法 GP备份的工具gpcrondump是一个Python脚本,是对gp_dump的一个封装.而gp_dump则负责整个备份过程的控制与结果处理,包括获取元数据信息.启动Segmen

GPDB · 特性分析 · Segment 修复指南

问题背景 GPDB是中央控制节点式的架构,在一个 GreenPlum 集群中,有一个 Master 节点和多个 Segment 节点.Master 是中央控制节点,Segment 是数据存放节点.所有的Segment节点平等,均由Master管理.架构如下图: GreenPlum架构图 当GP Master出现问题的时候,可以通过外部的HA监控模块发现并激活备库,Standby Master 正常后删除原来的 Master 进行重建备库. 而 Segment 的修复与此不同!由上图可知,Segm

GPDB · 特性分析 · Segment事务一致性与异常处理

事务一致性 这篇月报Primary和Mirror同步机制讲了Primary和Mirror之间各种数据和文件的同步过程.这些数据和文件的同步,看似彼此独立.那么如何保证某个时间点Mirror的所有数据是一致的,即任何时间点发生HA切换,Mirror都能达到一致性状态并对外提供服务?正如我们前面提到的,这主要靠同步的顺序来保证: AO表的同步是个强同步的过程,数据在更新发生时即同步到Mirror,Primary和Mirror时刻保持着数据一致性.另一方面,事务提交时会更新AO表文件的尾指针信息,并同

GPDB · 特性分析· Filespace和Tablespace

Filespace和Tablespace Tablespace允许每个节点使用多种文件目录或者文件系统,当前所有数据都是存储在默认base目录下.我们可以根据需要制定最优的物理存储方式.使用表空间有下面几个优点: 根据数据使用频率来选择不同的存储类型 控制一些数据库对象的IO性能 比如历史数据表我们存放在SATA盘,频繁使用的表存放在SSD盘. filespace指的是所有的存储文件系统位置的集合. 1个filespace可以被1个或多个tablespace使用,可以通过 select * fr

PgSQL · 特性分析 · checkpoint机制浅析

背景 上期月报PgSQL · 特性分析 · Write-Ahead Logging机制浅析中简单介绍了PostgreSQL中WAL机制,其中讲到如果是创建checkpoint会触发刷新xlog日志页到磁盘,本文主要分析下PostgreSQL中checkpoint机制. checkpoint又名检查点,一般checkpoint会将某个时间点之前的脏数据全部刷新到磁盘,以实现数据的一致性与完整性.目前各个流行的关系型数据库都具备checkpoint功能,其主要目的是为了缩短崩溃恢复时间,以Oracl

MySQL · 引擎特性 · InnoDB 同步机制

前言 现代操作系统以及硬件基本都支持并发程序,而在并发程序设计中,各个进程或者线程需要对公共变量的访问加以制约,此外,不同的进程或者线程需要协同工作以完成特征的任务,这就需要一套完善的同步机制,在Linux内核中有相应的技术实现,包括原子操作,信号量,互斥锁,自旋锁,读写锁等.InnoDB考虑到效率和监控两方面的原因,实现了一套独有的同步机制,提供给其他模块调用.本文的分析默认基于MySQL 5.6,CentOS 6,gcc 4.8,其他版本的信息会另行指出. 基础知识 同步机制对于其他数据库模

PgSQL · 特性分析 · 金融级同步多副本分级配置方法

背景 对于金融级的应用场景,2个副本通常是不够的,用户可能会需要多个副本. 例如,一主4从,要求除了主以外,还需要2个同步的副本,其他可以为异步的副本. 另一方面,我们在使用数据库时,为了扩展读的能力,读写分离是比较常见的用法. 9.6以前的版本,同步复制是确保XLOG已经复制到备库,而不是已经在备库apply,虽然APPLY通常都很快,可能也在毫秒级别完成,但是以前没有apply级别的同步机制. 例如,用户A往用户B的账户汇了一笔钱,同一时间用户B在异地马上要看到A汇过来的钱,这种异地.异库的