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)。

GP

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上面的临时文件删掉。

master_2_

总结

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

目录
相关文章
|
6月前
|
SQL 监控 关系型数据库
MySQL Metadata Locking(MDL)机制的实现与获取机制分析
MySQL Metadata Locking(MDL)机制的实现与获取机制分析 为了满足数据库在并发请求下的事务隔离性和一致性要求,同时针对MySQL插件式多种存储引擎都能发挥作用,MySQL在Server层实现了 Metadata Locking(MDL)机制。这种机制可以灵活自定义锁的对象、锁的类型以及不同锁类型的优先级,甚至可以做到在系统不同状态时动态调整不同锁类型的兼容性。本篇文章将详细介绍MDL系统中的常用数据结构及含义,从实现角度讨论MDL的获取机制与死锁检测,以及在实践中如何监控MDL状态。
184 2
|
关系型数据库 MySQL
Mysql 主键冲突(ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY')
Mysql 主键冲突(ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY')
1067 0
|
6月前
|
关系型数据库 MySQL 数据库
MySQL 并发 insert on duplicate key 导致的死锁
一 前言死锁,其实是一个很有意思也很有挑战的技术问题,大概每个DBA和部分开发同学都会在工作过程中遇见 。关于死锁我会持续写一个系列的案例分析,希望能够对想了解死锁的朋友有所帮助。二 案例分析2.1 业务场景业务方的目的是使用insert on duplicate key update对重复存在的记...
773 0
MySQL 并发 insert on duplicate key 导致的死锁
|
关系型数据库 MySQL Linux
【MySQL】skip-external-locking,是干什么的?底层原理是什么?
【MySQL】skip-external-locking,是干什么的?底层原理是什么?
640 0
|
关系型数据库 C语言