# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all trust
# IPv4 local connections:
host all all 127.0.0.1/32 trust
# IPv6 local connections:
host all all ::1/128 trust
# Allow replication connections from localhost, by a user with the
# replication privilege.
local replication all trust
host replication all 127.0.0.1/32 trust
host replication all ::1/128 trust
host replication all 1.1.1.1/32 trust
host replication all 2.2.2.2/32 trust
host all all 1.1.1.1/32 md5
host all all 2.2.2.2/32 md5
$ ./bucardo install
Enter a number to change it, P to proceed, or Q to quit: 3
Change the user to: greenplum
Changed user to: greenplum
Current connection settings:
1. Host: <none>
2. Port: 5432
3. User: pgtest
4. Database: bucardo
5. PID directory: $PG_PID_DIR
Enter a number to change it, P to proceed, or Q to quit: P
Creating superuser 'bucardo'
Attempting to create and populate the bucardo database and schema
Database creation is complete
Updated configuration setting "piddir"
Installation is now complete.
现在可以利用bucardo配置双向同步,以下展示的仅为单向(ARM容器 to X86虚机),要保证双向的话,反过来再做一次即可。
作者: bzhaoopenstack(https://github.com/bzhaoopenstack)
PG在混步跨硬件平台的首次試水,此次基於Bucardo部署PG跨硬件平台集群。
基于Bucardo建立PostgreSQL 主主混合集群部署
PostgreSQL集群化部署,有很多种主流方案,包括Bucardo, repmgr, pglogical等方式,并且大致分为两种方式:
那么Bucardo在这里是属于第二种部署形式,而repmgr是使用第一种部署形式,因为它使用了PG内建的复制支持。
Bucardo是一个异步的PostgreSQL复制系统,支持主主、主从方案。它是一款能在PG中实现双向同步的软件,可以实现更多的源数据库(主数据库)以及更多的目标数据库(备份数据库)之间的同步,还可以复制到其他类型的目标数据库,包括Mysql, MariaDB, Oracle, SQLite, MongoDB和Redis等。基于 BSD的开源协议。本文中,主要是描述主主模式的搭建过程。
Bucardo是异步同步,因此实现多主方案时,只能做到数据的最终一致,Bucardo的同步通过触发器来记录变化,并利用PG中的
Notify
消息事件通知机制实现高效同步,并且同步相当灵活,可以只同步数据库中选定的几张表或者几列。由于资源限制,我们当前仅有一台X86虚机,有一台装有Docker的ARM虚机。考虑这种形式:
那么我们现有的测试环境为:
1. 安装
在ARM容器和X86虚机
安装PG及bucardo依赖
为PG服务创建单独用户,后续切换为新建用户执行
用新建用户下载bucardo源码,编译并安装。
另外,bucardo共依赖perl模块为:
可根据缺少的模块进行安装。
此时,所有的安转工作就绪。开始双主配置。
2. 配置
对于双方都是虚机,都有公网IP,且ARM使用的是docker环境,所以对于HostOS上的配置,需要在云平台或者防火墙放通PG的TCP:5432默认端口。
在ARM容器HostOS上,添加一条对于容器内部5432端口的端口转发。
此时,ARM虚机上的5432端口会转发给运行在其上的PG容器,对应的容器出公网的流量会走Docker配置的MASQUERADE SNAT出去。OK,ARM hostOS 网络配置完毕。
同样对于X86,由于PG是直接运行在上面,没有再加任何虚拟化层,所以只要保证云平台安全组或者防火墙放通即可。
下面我们先配置PG,让它能够暴露在公网。
修改PG 配置文件postgresql.conf :
修改PG 配置文件 pg_hba.conf:
其他PG配置保持默认即可。配置完成后就可以启动PG服务:
然后,创建同步用户和要同步的表,注意要同步的对象一定要有主键,如果没有主键,在创建同步队列时会失败。虽然可以通过一些办法强行对无主键表进行同步,但会在同步发生数据冲突时产生不可预测的错误。
OK,开始在两个节点(ARM容器和X86虚机)上部署Bucardo辅助对象,其中PG_PID_DIR需要自行指定:
现在可以利用bucardo配置双向同步,以下展示的仅为单向(ARM容器 to X86虚机),要保证双向的话,反过来再做一次即可。
然后按着相同的配置反向在X86虚机 to ARM容器再做一次配置。这样所有的同步配置就完成了。
最后两个节点启动bucardo
下面是其他的管理命令:
这样,所有对两个节点上dbuser用户的public.t1表的操作都会双向同步到各自运行的PG数据库服务上。
3 总结
对于外围同步的Bucardo来部署不同硬件平台的PG服务,是能够运行的。但是在部署过程中,发现不管X86还是ARM平台在运行Bucardo的相关测试用例时都会有失败,包括社区上游,可见该社区似乎不太活跃,导致正常的CI测试都无人问津。这个部署过程有以下几个看法: