目录

环境

  • 主服务器 地址: 172.24.89.190
  • 从服务器 地址: 172.24.89.191

两台服务器都已经安装了postgres,且版本均为13。安装过程可以参考postgres安装

首先可以在从服务器中使用psql命令测试能不能与主服务器连接,如果无法连接可能是防火墙端口没有打开,如果是云服务器检查两台服务器是否在同一个安全组策略中。

主服务器配置

修改postgres.conf

listen_addresses = '*' #此处设置为*,具体的访问控制可以在pg_hba.conf 里设置
archive_mode = on # 归档模式开
archive_command= 'cp %p /var/lib/pg13_wal/%f' #归档命令,注意此处的路径必须要事先创建好,且postgres有可写权限
archive_cleanup_command='pg_archivecleanup /var/lib/pg13_wal %r' # 此命令会删除过期的归档文件,如果此命令不开,长时间运行下去会导致磁盘空间被占满!
wal_level = replica
max_wal_senders = 10
wal_sender_timeout = 60s
max_connections = 500

生成posgresql.auto.conf文件

psql -c "ALTER SYSTEM SET listen_addresses TO '*';"/

此命令会将配置保存在postgresql.auto.conf中,且与posgressql.conf并存,会优先使用 .auto.conf配置

创建复制角色

createuser --replication -P -e backupUser # -P:设置密码,-e:回显

角色授权

pg_hba.conf文件中加入

host    replication     backup_user     172.24.89.191/32        scram-sha-256

重启服务

pg_ctl restart -l pg.log

从服务器配置

将从服务器原有内容备份

pg_ctl stop # 停掉postgres
tar -zcvf ~/pgData.tar.gz /data/pg13Data/ # 备份
rm -rf /data/pg13Data/* # 按回车之前请慎重检查

将主机基础数据备份到从机

pg_basebackup -h 172.24.89.190 -p 54322 -D /data/postgresData/ -U backupUser -P -v -R -X stream -C -S pgstandby_1
  • -h 指定主服务器地址
  • -p 指定主服务器端口
  • -D 指定数据目录
  • -U 指定连接用户
  • -P 启用进度报告
  • -v 启用详细模式
  • -R 启用恢复配置的创建,创建一个standby.signal文件,并将连接设置附加到数据目录下的postgresql.auto.conf
  • -X 用于在备份中包括所需的预写日志文件(WAL文件)。流的值表示在创建备份时流式传输WAL
  • -C 在开始备份之前,允许创建由-S选项命名的复制插槽
  • -S 指定复制插槽名称

备份完成之后,会在/data/postgresData目录下创建一个standby.signal,并将primary_conninfo写入postgresql.auto.conf中.

如果postgresql.conf中的hot_standby = on,并且数据目录中存在Standby.signal文件,则replication slave将在“热备”模式下运行。

如果出现replication slot "pgstandby_1" already exists 说明已经有同名的从服务器slot了,需要更换新的名称,也可删除存在的slot。

在主服务器中查询pg_replication_slots表信息,获取slot_name,然后删除对应的slot。

SELECT slot_name from pg_replication_slots;

SELECT pg_drop_replication_slot('pgstandy_1');

测试

在主服务器中对数据库进行一些操作,到从服务器中查看是否同步过来.

参考