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

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
云原生数据库 PolarDB 分布式版,标准版 2核8GB
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: PostgreSQL 主备同步机制是通过流复制实现,其原理见之前的月报PG主备流复制机制。 Greenplum 是基于PostgreSQL开发的,它的主备也是通过流复制实现,但是Segment节点中的Primary和Mirror之间的数据同步是基于文件级别的同步实现的。为什么Primary和Mir

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同步将有可能成为瓶颈。

目录
相关文章
|
SQL 关系型数据库 数据库
MySQL · 社区动态 · Online DDL 工具 gh-ost 支持阿里云 RDS
背景 Online DDL 一直都是 DBA 运维时比较头疼的事,一般都会选择在业务低峰期谨慎的操作,比较常用的几个工具比如 percona pt-online-schema-change , Facebook OSC, 本质上它们都是基于触发器的,简单来讲就是通过数据库的触发器把作用在源表的操作在一个事务内同步到修改后的表中,这在业务高峰期时会极大的加重主库的负载。
4578 0
|
7月前
|
关系型数据库 调度 数据库
直播预告 | PolarDB-PG 企业级特性 —— Shared Server特性详解
PolarDB-PG 提供了 Shared Server 内置连接池功能,实现了用户连接与后端进程的解绑。后端进程在运行时可以根据实时负载和进程污染情况进行动态转换。负载调度算法使用 Stall 机制弹性控制 Worker 数量,同时避免用户连接饿死。从根本上解决了高并发或者大量短连接带来的性能、稳定性问题。
|
并行计算 关系型数据库 测试技术
PgSQL · 特性分析 · PostgreSQL 9.6 让多核并行起来
背景 经过多年的酝酿(从支持work process到支持动态fork共享内存,再到内核层面支持并行计算),PostgreSQL 的多核并行计算功能终于在2016年发布的9.6版本中正式上线,为PG的scale up能力再次拔高一个台阶,标志着开源数据库已经攻克了并行计算的难题。 相信有很多小伙伴已经开始测试了。 在32物理核的机器上进行了测试,重计算的场景,性能程线性提升。 目前并行计算支
5428 0
|
存储 关系型数据库 数据库
|
存储 监控 NoSQL
MongoDB · 引擎特性 · journal 与 oplog,究竟谁先写入?
MongoDB journal 与 oplog,谁先写入?最近经常被人问到,本文主要科普一下 MongoDB 里 oplog 以及 journal 这两个概念。 journal journal 是 MongoDB 存储引擎层的概念,目前 MongoDB主要支持 mmapv1、wiredtiger、mongorocks 等存储引擎,都支持配置journal。
1890 0
|
SQL MySQL 关系型数据库
MySQL · 引擎特性 · Group Replication内核解析之二
背景 前文已经介绍了MySQL的Group Replication的实现机制和原理,本文就Group Replication的具体实现进行详细的阐述,以更深入的理解Group Replication的机制,在实践中更好的应用Group Replication,提升应用系统的可用性,优化其性能。
1631 0
|
MySQL 关系型数据库 数据库
MySQL · 引擎特性 · Group Replication内核解析
背景 为了创建高可用数据库系统,传统的实现方式是创建一个或多个备用的数据库实例,原有的数据库实例通常称为主库master,其它备用的数据库实例称为备库或从库slave。当master故障无法正常工作后,slave就会接替其工作,保证整个数据库系统不会对外中断服务。master与slaver的切换不管是主动的还是被动的都需要外部干预才能进行,这与数据库内核本身是按照单机来设计的理念悉悉相关,并且数
4917 0
|
关系型数据库
GPDB · 特性分析· Greenplum 备份架构
Greenplum是分布式数据库,这为备份带来了一些困难。其本身提供了一个工具是gpcrondump,对其二进制备份工具gp_dump做了一些封装,而gp_dump则是对pg_dump做了封装,在每个节点上执行pg_dump完成数据的备份。在其每个节点的行为上,与PG类似,但其分布式的架构,则有值得了解的地方。 备份方法 GP备份的工具gpcrondump是一个Python脚本,是对gp_du
2703 0