PostgreSQL主从复制 Docker版

版本

Docker 18.03
Postgres 10.3
主IP:172.17.0.12
从IP:172.17.0.13

启动docker容器

  1. 创建数据存储目录 mkdir -p /home/data/pgdata{1,2}

  2. 分别启动主库和从库(建议使用docker-compose)
    docker run -e POSTGRES_PASSWORD=12345678 -e TZ=Asia/Shanghai --name pg-master -d -p 5435:5432 -v /home/data/pgdata1:/var/lib/postgresql/data postgres:10

    docker run -e POSTGRES_PASSWORD=12345678 -e TZ=Asia/Shanghai --name pg-slaver -d -p 5436:5432 -v /home/data/pgdata2:/var/lib/postgresql/data postgres:10

  3. 记录IP【也可以启动命令指定】

主服务器

  • cd /home/data/pgdata1

  • vi pg_hba.conf

    host    replication     all             172.17.0.13/32          trust
    
  • vi postgresql.conf

    archive_mode = on   #开启归档模式
    archive_command = 'cp %p /var/lib/postgresql/data/%f'   #归档命令
    wal_level = hot_standby    #热备模式
    max_wal_senders = 10   #最多有1个流复制连接     
    wal_sender_timeout = 60s    #流复制超时时间
    max_connections = 100   #最大连接时间,必须要小于从库的配置
    
  • 重启

从服务器

  • 进入docker exec

    docker exec -it pg-slaver bash
    cd /var/lib/postgresql
    pg_basebackup -h 172.17.0.12 -U postgres –D data2/ -X stream -R –P
    rm -rf data
    mv data2 data
    

    -R 表示自动生成recovery.conf文件,若不加,可以自定义该文件:

    standby_mode = on  #表示该节点是从库
    primary_conninfo = 'host=172.17.0.12  post=5432  user=postgres  password=12345678'
    recovery_target_timelint = 'latest' #说明恢复到最新状态
    
  • 退出docker
    cd /home/data/pgdata2
    vi postgresql.conf

    wal_level = hot_standby    #热备模式
    max_connections = 200   #最大连接
    hot_standby = on #说明这台机器不仅用于数据归档,还可以用于数据查询
    max_standby_streaming_delay = 30s #流备份的最大延迟时间
    wal_receiver_status_interval = 10s  #向主机汇报本机状态的间隔时间
    hot_standby_feedback = on #r出现错误复制,向主机反馈
    
  • 重启

验证

进入主服务器,连接数据库,执行:select client_addr,sync_state from pg_stat_replication;
正确显示地址,表示配置成功。
接下来可以建表进行测试。

你可能感兴趣的:(数据库,#,PostgreSQL)