Postgres的Standby数据库搭建,异步流复制示例及同步流复制实例

来源:互联网 发布:已恢复的网络购彩 编辑:程序博客网 时间:2024/05/22 08:14

参考:《PostgreSQL修炼之道》以及http://www.postgresql.org/docs/9.5/

异步复制的缺点是Standby上的数据落后于主库上的数据,如果使用Hot Standby做读写分离,就会存在数据一致性的问题,这对于一些一致性较高的应用来说是不可接受的。
同步复制要求在数据写入Standby数据库后,事务的commit才返回,所以Standby库出现问题时,会导致主库被hang住,解决这个问题的方法是启动两个Standby库,这两个Standby库只要有一个正常,就不会让主库hang住。

1.异步流复制示例
配置环境:
主库 —— IP:192.168.1.110  数据目录:/var/lib/pgsql/9.5/data
Standby—— IP:192.168.1.122  数据目录:/var/lib/pgsql/9.5/data

主库配置:修改/var/lib/pgsql/9.5/data/pg_hba.conf配置 加入    host    replication     postgres        192.168.1.0/24           trust
                 修改/var/lib/pgsql/9.5/data/postgresql.conf配置 加入 listen_addresses='*' 
                                                                                                          max_wal_senders=5
                                                                                                          wal_level=hot_standby

完成准备工作后使用pg_basebackup工具在122机器上生成基础备份,命令:pg_basebackup -h 192.168.1.110 -U postgres -F p -P -x -R -D /var/lib/pgsql/9.5/data -l postgresbackup20160101(如果提示目录非空时清空相应目录)

命令执行完后可以看到数据目录下有了数据文件。注意这些文件的拥有者,如果不是postgres,则进行修改chown -R postgres.postgres /var/lib/pgsql/9.5/data

启动Standby库时需要修改122上的/var/lib/pgsql/9.5/data/postgresql.conf配置参数 hot_standby=on。

启动/bin/systemctl start postgresql-9.5.service

至此异步流复制实例搭建完成。测试可以在主库建立一个表 ,插入数据,去Standby库查看。在Standby库进行操作会失败因为Hot Standby是只读的。

2.同步流复制示例
同步流复制一般至少两个standby库,这里简单的只用一个。
配置环境:
主库 —— IP:192.168.1.110  数据目录:/var/lib/pgsql/9.5/data
Standby—— IP:192.168.1.122  数据目录:/var/lib/pgsql/9.5/data

主库配置:修改/var/lib/pgsql/9.5/data/pg_hba.conf配置 加入    host    replication     postgres        192.168.1.0/24           trust
                 修改/var/lib/pgsql/9.5/data/postgresql.conf配置 加入 listen_addresses='*' 
                                                                                                          max_wal_senders=5
                                                                                                          wal_level=hot_standby

基础备份工作同异步流复制示例。

主库和Standby库都停止掉。

主库修改配置 /var/lib/pgsql/9.5/data/postgresql.conf 中加入 synchronous_standby_names='standby01'
Standby库配置修改:/var/lib/pgsql/9.5/data/recovery.conf 加入application_name配置,变为 standby_mode = 'on'
primary_conninfo = 'application_name=standby01 user=postgres host=192.168.1.110 port=5432 sslmode=prefer sslcompression=1 krbsrvname=postgres'

启动

主库进行操作时,Standby库同步改变。如果停掉Standby库,主库进行操作会hang住,直到Standby库重新启动可用时。


1 0
原创粉丝点击