服务器环境

角色 主机 IP 系统版本 数据库版本
主服务器 192.168.0.67 CentOS 7.6 x86_64 11.6
从服务器 192.168.0.66 CentOS 7.6 x86_64 11.6

数据库安装

这里采用了 oneinstack 来实现,方便快捷。
需要注意的是, oneinstack 默认使用了 12.1 (v2019-11-28),你可以通过修改 oneinstack 目录下 verstions.txt 文件来指定你想要的版本,如下所示。

......

alisql_ver=5.6.32-9

pgsql_ver=12.1 # <- 修改这里

mongodb_ver=4.0.13

......

使用 oneinstack 安装完数据库后,PG 数据库的数据目录在 /data/pgsql

配置步骤

  1. 创建用于备份的账号
CREATE ROLE replicator WITH REPLICATION LOGIN ENCRYPTED PASSWORD '123456';
  1. 创建归档目录
mkdir -p /data/pgsql/archives && chown -R postgres:postgres /data/pgsql/archives
  1. 配置 postgresql.conf
    这里采用同步复制。同步与异步的区别:https://www.xiaomastack.com/2019/08/06/postgresql同步复制/
port = 1921
shared_buffers = 2048MB
work_mem = 64
max_connections = 1000             # 一般查多于写的应用从库的最大连接数要比较大
hot_standby = on                   # 说明这台机器不仅仅是用于数据归档,也用于数据查询
max_standby_streaming_delay = 30s  # 数据流备份的最大延迟时间
wal_receiver_status_interval = 5s  # 多久向主报告一次从的状态,当然从每次数据复制都会向主报告状态,这里只是设置最长的间隔时间
hot_standby_feedback = on          # 如果有错误的数据复制,是否向主进行反馈


# for the primary 
wal_level = replica 
#synchronous_commit = remote_apply 
archive_mode = on 
archive_command = 'cp "%p" "/data/pgsql/archives/%f"'
max_wal_senders =  10 
wal_keep_segments = 10 
synchronous_standby_names = 'pgslave001'
  1. 添加 recovery.conf.sample 文件
recovery_target_timeline = 'latest'
standby_mode = 'on'
primary_conninfo = 'application_name=pgslave001 host=192.168.0.67 port=1921 user=replicator password=123456'
  1. 编辑 pg_hba.conf
host    all             all             192.168.0.0/16          md5
host    replication     all             192.168.0.0/16          md5
  1. 从库配置
    需要提前安装好 postgresql 数据库。完成后可以把数据目录删掉,直接从主库备份过来即可。
pg_basebackup -D /data/pgsql -F p -X stream -v -P -h 192.168.0.67 -p 1921 -U replicator

执行完毕后,需要修改文件夹权限:

chown -R postgres:postgres /data/pgsql
  1. 修改从库配置文件 postgresql.conf
max_connections = 1500            # 一般查多于写的应用从库的最大连接数要比较大
  1. 创建恢复文件 recovery.conf,并重启从库
cp /data/pgsql/recovery.conf.sample /data/pgsql/recovery.conf && chown postgres:postgres /data/pgsql/recovery.conf
  1. 备份数据库
pg_dump -U postgres -h 192.168.0.1 -p 1921 postgres -Fd -j 5 -f postgres_backup
  1. 还原数据库
pg_restore -U postgres -h 192.168.0.67 -p 1921 -d pht -j 6 postgres_backup
  1. 查看主从状态
select client_addr,sync_state from pg_stat_replication;