使用Bucardo搭建PG的双主

0    323    3

👉 本文共约2059个字,系统预计阅读时间或需8分钟。

简介

OGG方式实现双主可以参考:

https://www.xmmup.com/shiyongogg-for-pgweifuwukuaisushuangxiangtongburdsshujukushuangzhu.html

https://www.xmmup.com/oggyongyupgshujukuzhijianshuangzhushishitongburds-for-pgyikeoggyuanchengbuhuohetoudi.html

Bucardo开源工具是一个perl语言编写的程序,其依赖PG数据库的plperl语言组件,进而严格依赖perl的版本(数据库服务器安装的perl大版本号必须和官方说明的perl版本严格一致,小版本号不限制)。

Bucardo是PostgreSQL数据库中实现双向同步的软件,可以实现PostgreSQL数据库的双master的方案,不过bucardo中的同步都是异步的,它是通过触发器记录变化,程序是perl写的。Bucardo可以实现postgresql的多主复制、主从同步,甚至可以以postgresql为源库,可以和oracle、mysql、mongodb等很多数据库进行数据异步同步。

而pg原生的流复制(stream replication)虽可以同步,但只能单向同步,而且备库只能是只读操作,而bucardo不支持DDL的同步。

Bucardo 是基于表复制的系统,通过触发器记录变化,同步的表必须有主键,不能同步DDL语句(truncate可以同步)。Bucardo 可以实现PostgreSQL数据库的双master/多master的方案。Bucardo的核心是一个Perl守护进程,它侦听通知请求并对其进行操作,方法是连接到远程数据库并来回复制数据。

守护进程需要的所有特定信息都存储在主bucardo数据库中,包括复制所涉及的所有数据库的列表以及如何到达这些数据库、要复制的所有表以及如何复制每个表。

运行Bucardo的第一步是向主Bucardo数据库添加两个或更多数据库。

完成此操作后,将添加关于要复制哪些表的信息以及表的任何分组。然后添加同步。

同步被称为复制操作,将一组特定的表从一台服务器复制到另一台服务器或一组服务器。

一旦设置好Bucardo,触发器就开始存储有关所有相关的表中哪些行被更改的信息。

对于多主机,过程是这样的:

1、对表进行更改并记录在bucardo_delta表中。

2、向主Bucardo守护进程发送通知,让它知道表已经更改。

3、守护进程通知控制器进行同步,然后返回侦听。

4、控制器创建一个“kid”来处理复制,或者通知已经存在的复制。

5、孩子开始一个新的事务,禁用相关表上的触发器和规则。

6、然后,它收集自上次复制以来哪些行发生了更改的列表,然后比较这两个行以确定应该做什么。

7、如果存在冲突,则会运行标准冲突处理程序,或者为每个表设置的自定义处理程序来对内容进行排序。

8、触发器和规则被重新启用,事务被提交。

9、如果事务失败,则运行任何自定义异常处理程序。

10、子程序向控制器发出它已经完成的信号。

环境架构

本人提供Oracle、MySQL、PG等数据库的培训和考证业务,私聊QQ646634621或微信db_bao,谢谢!

安装bucardo

https://github.com/bucardo/bucardo

https://bucardo.org/Bucardo/

Bucardo版本5.6.0需要如下组件:

在2个节点都需要安装:

安装plperl语言组件

初始化bucardo

过程:

创建需要同步的库

配置bucardo单向同步

首先,配置pg1到pg2的单向同步。以下步骤在节点1上操作。

添加数据库信息

添加表

如果要添加某一个表,则可以bucardo add table tablename

添加群组

过程:

添加同步

这里注意的是;同步到表需要主键约束;不然同步是添加不了的。这个是跟触发器有关系;bucardo是建立在触发器之上的。

查询

启动

日志:

过程:

同步测试

配置双向同步(双主)

在节点2操作:

压测

过程:

经过压测,双向数据同步正常!!!

初始化数据

总结

1、Bucardo 是基于表复制的系统,通过触发器记录变化,同步的表必须有主键,不能同步DDL语句(truncate可以同步)

2、Bucardo可以安装在一台单独的机器上,类似OGG的远程replicate或OGG的微服务架构,不同的是,OGG使用的是日志抽取,而Bucardo使用的是触发器。

    头像

    小麦苗

    学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

    您可能还喜欢...

    发表评论

    您的电子邮箱地址不会被公开。

    11 + 18 =

     

    嘿,我是小麦,需要帮助随时找我哦
    • 18509239930
    • 个人微信

    • 麦老师QQ聊天
    • 个人邮箱
    • 点击加入QQ群
    • 个人微店

    • 回到顶部
    返回顶部