PostgreSQL流复制搭建

PG的流复制类似于Oracle中的DG,利用WAL(Redo)日志传输属于物理复制,优点在于延迟较小

搭建步骤

环境信息

主库为已初始化好数据库PG实例,备库为已安装好软件但未初始化的数据库
ip | 角色
———-|———-
192.168.56.39|主库
192.168.56.40|备库

主库需配置的参数

  • wal_level 应设置为replica, or logical
  • max_wal_senders 默认是10 , 不要设置为小于2
  • synchronous_standby_names 如果使用同步复制,这里需要设置standby的名字
  • wal_keep_segments 设置主库上wal的保留个数,防止WAL日志被删除但还未传送到备库上
  • synchronous_commit 同步复制选项
    • 设置为on,代表需要等待备库应用完事务日志并且数据刷到磁盘中,主库才可以返回成功
    • 设置为remote_apply ,代表需要等待备库应用完事务日志,主库即可返回成功
    • 设置为remote_write,代表需要等待备库将事务日志写入到磁盘中,主库即可返回成功
    • 设置为local,代表事务日志写入到主库磁盘中,主库即可返回成功 // 在同步复制中不能设置为local
    • pg_hba.conf 文件中需要添加repliaction 的权限
      1. host replication all 0.0.0.0/0 trust
      这里注意,必须要配置replication权限
      1. host all all 0.0.0.0/0 trust
      这里all 是不包括replication权限的
  • hot_standby 设置为ON,这样备库可以供查询使用

    使用pg_basebackup搭建基础备份

    备库上使用pg_basebackup拉取主库数据,作为基础备份,数据库拉取到/pgdata目录下
    1. [postgres@pg40 ~]$ pg_basebackup -D /pgdata/ -h 192.168.56.39 -R -X s -P
    2. 335994/335994 kB (100%), 1/1 tablespace

编辑recovery.conf文件

我们使用了-R参数,在拉取的备份文件中会自动生成recovery文件

  1. standby_mode = 'on'
  2. recovery_target_timeline = 'latest'
  3. primary_conninfo = 'application_name=stb40 user=postgres passfile=''/home/postgres/.pgpass'' host=192.168.56.39 port=5432 sslmode=prefer sslcompression=1 target_session_attrs=any'

启动数据库

  1. pg_ctl start -D /pgdata/

监控流复制

在主库上查看

  1. postgres=# select * from pg_stat_replication ;
  2. -[ RECORD 1 ]----+------------------------------
  3. pid | 10807
  4. usesysid | 10
  5. usename | postgres
  6. application_name | stb40
  7. client_addr | 192.168.56.40
  8. client_hostname |
  9. client_port | 50660
  10. backend_start | 2018-05-06 23:27:42.625869+08
  11. backend_xmin |
  12. state | streaming
  13. sent_lsn | 2/95000140
  14. write_lsn | 2/95000140
  15. flush_lsn | 2/95000140
  16. replay_lsn | 2/95000140
  17. write_lag |
  18. flush_lag |
  19. replay_lag |
  20. sync_priority | 0
  21. sync_state | async

如何判断实例为主库还是备库

使用pg_controldata查看

  1. [postgres@pg40 ~]$ pg_controldata |grep cluster
  2. Database cluster state: in archive recovery //备库
  3. [postgres@pg39 log]$ pg_controldata |grep cluster
  4. Database cluster state: in production //主库
0 评论  
添加一条新评论