本文内容总结PostgreSQL数据同步的几种方案并详细介绍Bucardo搭建的过程

以下:

业务需求

由于业务需求要求中国美国异地机房实时(3s内)同步,以满足中国和美国客户的实时协作功能。

整理方案

先说单向同步方案,一个主写数据中心(香港),两个读数据中心(大陆、美国)

所有应用程序连接到数据中间件(Mycat等),通过中间件进行读写分离,用户写入操作都将写入香港数据库,而读操作则读取就近数据库,同时当香港数据库有写入数据的时候会马上同步到中国或者美国数据中。应用程序、写数据库、读数据库都通过云服务商的内网打通(云企业网、高速通道)以保证数据传输过程中的速度。主写数据库之所以放在香港是为了满足大陆及美国用户访问速度均衡,也为后面澳洲数据中心做铺垫。

单向同步的工具有很多对于PostgreSQL来说最方便的就是逻辑订阅机制,而上次介绍的otter也可以满足。

https://github.com/ORGRUI/inzt.github.io/blob/master/images/Bucardo1.png?raw=true

1

再说一下双向同步的方案,及多主写的数据中心。双向同步中有许多坑需要注意例如主键冲突、修改冲突、无限回环等,在这里有两个实现PostgreSQL双向同步的方案,(1)PostgreSQL的逻辑订阅,和单向同步类似的配置,但是双向同步的时候必须检测冲突以及避免回环等,这样就需要写数据库程序,同时还要修改表结构,以满足程序。(2)Bucardo实现多数据中心。配置了这个工具就可以避免我们自己写数据库程序,我们只需要配置需要进行同步的数据库地址以及冲突处理时的规则即可。

Bucardo详解

官网:https://bucardo.org

安装步骤(我这里步骤和官网上有所不一样)

(1)安装plperl

sudo yum install postgresql-plperl

(2)初始化数据库

sudo adduser bucardo
sudo passwd bucardo
su - bucardo
initdb btest

(3)在root下修改文件夹权限

chmod 777 /var/run/postgresql