首页
Linux教程
MongoDB教程
FTP教程
Apache教程
Nginx
jQuery
Redis
MySQL
PostgreSQL教程
PHP教程
Elasticsearch

PostgreSQL教程

目录
PostgreSQL教程

PostgreSQL主从流复制


一、系统环境

  1. 操作系统:CentOS7
  2. PostgreSQL版本:12.1
  3. 主节点局域网IP:10.29.81.105
  4. 从节点局域网IP:10.30.176.213
  5. 假设主节点和从节点都已经成功安装了PostgreSQL数据库,而且主从节点数据库的超级用户名和密码都一样

二、主节点配置

  1. 创建用户

      [root@iZ28lcmnq9qZ /root]#su postgres
      [postgres@iZ28lcmnq9qZ /home/postgresql]$/usr/local/pgsql/bin/psql
      postgres=# CREATE ROLE replica login replication encrypted password 'replica的密码';

  2. 编辑pg_hba.conf

      # 追加
      # replica为postgres用户
      # XX.XX.XX.XX为从节点的完整IP,如果为网段配置就不是32了,md5为允许密码验证,trust为免密
      # TYPE DATABASE USER ADDRESS METHOD
      host replication replica XX.XX.XX.XX/32 trust
      # 需要远程访问,记得加(还有一个监听,在后面配置)
      # 0.0.0.0/0为任意IP
      host all all 0.0.0.0/0 md5

  3. 编辑postgresql.conf

      # 新增或修改下列属性设置
      listen_addresses = '*' # 监听所有IP
      archive_mode = on # 开启归档
      archive_command = 'test ! -f /usr/local/pgsql/pg_archive/%f && cp %p /usr/local/pgsql/pg_archive/%f'
      wal_level = replica # 9.6开始木有hot_standby
      wal_keep_segments = 16 # 暂时还不知道设置为多大合适
      wal_sender_timeout = 60s
      max_connections = 100 # 最大连接数,据说从机需要大于或等于该值
      # 保存退出
      # 建立归档文件夹
      mkdir /usr/local/pgsql/pg_archive
      chown -R postgres:postgres /usr/local/pgsql/pg_archive

  4. 重启postgres

      # /usr/local/pgsql/data 为postgres的数据文件夹
      pg_ctl -D /usr/local/pgsql/data -l logfile restart

  5. 验证在从节点是否可以访问主节点

      # 在从节点(10.30.176.213)执行
      psql -h 10.29.81.105 -U postgres

  6. 如果发现不知道密码或密码不正确

      #修改postgres用户密码(数据库)
      ALTER USER postgres WITH PASSWORD '你的密码';

二、从节点配置

  1. 停止从节点的postgres

      # /usr/local/pgsql/data 为从节点的数据文件加
      pg_ctl -D /usr/local/pgsql/data -l /usr/local/pgsql/log/pg_server.log stop

  2. 清空数据文件夹(是的你没看错)

      rm -rf /usr/local/pgsql/data/*

  3. 从主节点获取数据

      # 使用replica用户,从主节点获取备份数据(这条命令建议照抄,有兴趣在深究内部参数)
      pg_basebackup -h 主节点IP -p 5432 -U replica -Fp -Xs -Pv -R -D /usr/local/pgsql/data
      chown -R postgres:postgres /usr/local/pgsql/data

  4. 编辑standby.signal文件(在数据文件夹内,以此标识从节点)

      # 添加
      standby_mode = 'on'
      # 保存,退出

  5. 修改postgresql.conf文件

      primary_conninfo = 'host=主节点IP port=5432 user=replica password=replica用户的密码'
      recovery_target_timeline = latest #默认
      max_connections = 120 #大于主节点,正式环境应当重新考虑此值的大小
      hot_standby = on
      max_standby_streaming_delay = 30s
      wal_receiver_status_interval = 10s
      hot_standby_feedback = on

  6. 重新启动从节点

      pg_ctl -D /usr/local/pgsql/data -l /usr/local/pgsql/log/pg_server.log start