PostgreSQL流复制搭建

PostgreSQL流复制搭建

    • 环境信息
        • 主库需配置的参数
        • 备库配置
            • 使用pg_basebackup搭建基础备份
            • 编辑recovery.conf文件
    • 验证
      • 启动数据库
      • 监控流复制
      • 判断主机类型

环境信息

主库为已初始化好数据库PG实例,备库为已安装好软件但未初始化的数据库

ip status name
192.168.100.10 主库 db
192.168.100.12 备库 stb

主库需配置的参数

  • hot_standby 设置为ON,这样备库可以供查询使用
  • 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 的权限,需要先创建repliaction 用户

  • 创建用户
    createuser --login --replication replication -P -s
  • pg_hba.conf 文件中需要添加repliaction 的权限
    host replication all 192.168.100.0/24 md5

备库配置

使用pg_basebackup搭建基础备份

备库上使用pg_basebackup拉取主库数据,作为基础备份,数据库拉取到/pgdata目录下
[postgres@pg ~]$ pg_basebackup -D /pgdata/ -h 192.168.100.10-R -X s -P

编辑recovery.conf文件

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

standby_mode = 'on'
recovery_target_timeline = 'latest'
primary_conninfo = 'application_name=sdb user=postgres host=192.168.100.10 port=5432 user=replication password=replication sslmode=prefer sslcompression=1 target_session_attrs=any'

验证

启动数据库

pg_ctl start -D /pgdata/

监控流复制

在主库上查看

postgres=# select * from pg_stat_replication ;
-[ RECORD 1 ]----+------------------------------
pid              | 10807
usesysid         | 10
usename          | postgres
application_name | stb
client_addr      | 192.168.56.40
client_hostname  |
client_port      | 50660
backend_start    | 2018-05-06 23:27:42.625869+08
backend_xmin     |
state            | streaming
sent_lsn         | 2/95000140
write_lsn        | 2/95000140
flush_lsn        | 2/95000140
replay_lsn       | 2/95000140
write_lag        |
flush_lag        |
replay_lag       |
sync_priority    | 0
sync_state       | async

或者
ps -ef | grep wal

判断主机类型

 [postgres@pg ~]$ pg_controldata |grep cluster
Database cluster state:               in archive recovery //备库
 [postgres@pg ~]$ pg_controldata |grep cluster
Database cluster state:               in production //主库

你可能感兴趣的:(postgresql)