本文内容总结PostgreSQL数据同步的几种方案并详细介绍Bucardo搭建的过程
以下:
业务需求
由于业务需求要求中国美国异地机房实时(3s内)同步,以满足中国和美国客户的实时协作功能。
整理方案
先说单向同步方案,一个主写数据中心(香港),两个读数据中心(大陆、美国)
所有应用程序连接到数据中间件(Mycat等),通过中间件进行读写分离,用户写入操作都将写入香港数据库,而读操作则读取就近数据库,同时当香港数据库有写入数据的时候会马上同步到中国或者美国数据中。应用程序、写数据库、读数据库都通过云服务商的内网打通(云企业网、高速通道)以保证数据传输过程中的速度。主写数据库之所以放在香港是为了满足大陆及美国用户访问速度均衡,也为后面澳洲数据中心做铺垫。
单向同步的工具有很多对于PostgreSQL来说最方便的就是逻辑订阅机制,而上次介绍的otter也可以满足。
再说一下双向同步的方案,及多主写的数据中心。双向同步中有许多坑需要注意例如主键冲突、修改冲突、无限回环等,在这里有两个实现PostgreSQL双向同步的方案,(1)PostgreSQL的逻辑订阅,和单向同步类似的配置,但是双向同步的时候必须检测冲突以及避免回环等,这样就需要写数据库程序,同时还要修改表结构,以满足程序。(2)Bucardo实现多数据中心。配置了这个工具就可以避免我们自己写数据库程序,我们只需要配置需要进行同步的数据库地址以及冲突处理时的规则即可。
Bucardo详解
安装步骤(我这里步骤和官网上有所不一样)
(1)安装plperl
1 | sudo yum install postgresql-plperl |
(2)初始化数据库
1 | sudo adduser bucardo |
(3)在root下修改文件夹权限
1 | chmod 777 /var/run/postgresql |
(4)启动PostgreSQL
1 | su - bucardo |
(5)安装一些依赖包
1 | sudo yum install perl-ExtUtils-MakeMaker perl-DBD-Pg perl-Encode-Locale perl-Sys-Syslog perl-boolean perl-Time-HiRes perl-Test-Simple perl-Pod-Parser |
(6)安装DBIx::Safe模块
1 | yum install cpan |
(7)下载Bucardo压缩包
1 | wget http://bucardo.org/downloads/Bucardo-5.5.0.tar.gz |
(8)安装Bucardo
1 | perl Makefile.PL |
命令行输入bucardo命令,如果有提示则证明安装成功
(9)配置数据库
这一步的目的是配置需要进行同步的数据库,下面参数不多解释,pg1、pg2是表示该数据的别名。
1 | bucardo add database pg1 dbname=test port=5432 host=127.0.0.1 user=postgres pass=***** |
(10)开通同步
下面参数不多解释sync表示同步,test表示别名,source表示作为源库,两个都配置source表示都可以作为源库,tables=all
表示所有表,注意这里start或者stop需要在Bucardo目录下进行。
1 | bucardo add sync test dbs=pg1:source,pg2:source tables=all conflict_strategy=latest |
命令行登陆数据库操作
psql -h pgm -p 3433 -U rooot -d uat