主库配置

  • 修改 postgresql.conf
    1
    2
    3
    4
    5
    
    listen_address = '*'
    wal_level = replica
    wax_wal_senders = 10
    wal_keep_segments = 64
    hot_standby = on
    
  • 启动主库 postgresql-10 服务
    1
    
    systemctl start postgresql-10
    
  • 创建同步账户
    1
    2
    
    create user replica superuser password '123456';
    -- 这里可以只赋予 replication 权限,后面从库复制初始数据库时使用其他有权限帐号
    
  • 修改 pg_hba.conf
    1
    
    host replication replica samenet md5
    

从库配置

  • 停止从库 postgresql-10 服务,清空数据库目录
    1
    2
    
    systemctl stop postgresql-10
    rm -rf /var/lib/pgsql/10/data/*
    
  • 从主库复制初始数据库
    1
    2
    3
    4
    5
    6
    7
    8
    
    pg_basebackup \
        -h <主库ip> \
        -U replica \
        -F p \
        -X stream \
        -P -R \
        -D /var/lib/pgsql/10/data/ \
        -l backup_20191104
    
    • -h 指定连接的数据库的主机名或IP地址
    • -U 指定连接的用户名
    • -F 指定了输出的格式,支持p(原样输出)或者t(tar格式输出)
    • -X 表示备份开始后,启动另一个流复制连接从主库接收WAL日志
    • -P 表示允许在备份过程中实时的打印备份的进度
    • -R 表示会在备份结束后自动生成recovery.conf文件
    • -D 指定备份写入的数据目录,需要与数据库配置的数据库目录一致,初次备份之前从库的数据目录需要手动清空
    • -l 表示指定一个备份的标识

检查状态

  • 检查从库进程
    1
    2
    
    ps -ef|grep postgres
    # 可以看到 wal sender 和 receiver process 两个进程
    
  • 从库为只读模式,无法进行 增/删/改 操作
  • 主库查看 replication 客户端
    1
    
    select client_addr,sync_state from pg_stat_replication;