postgresql11主从流复制

631 阅读1分钟

postgresql11主从流复制

环境

OS: centos 7
postgresql:11.8
数据同步方式:同步流复制
IP地址版本主从
192.168.61.13011.8
192.168.61.13111.8

1. 安装postgresql

安装略

配置环境变量

$ sudo vi /etc/profile

增加内容

export PGHOME=/usr/local/pgsql
export PGDATA=/var/lib/pgsql/data
export PGPORT=5432
export PGUSER=postgres
expost PATH=$PGHOME/bin:$PATH

环境变量立即生效

$ source /etc/profile

2. 配置

同步流复制:数据不丢失,但性能差 异步流复制:数据可能丢失,性能好

2.1 修改hosts

在主备机上都修改hosts

$ sudo vi /etc/hosts

文件末尾增加如下内容:

192.168.61.130 pg_master
192.168.61.131 pg_slave

2.1 主机配置

【初始化,并配置流复制】

  • 修改pg_hba.conf文件
$ sudo vi /var/lib/pgsql/data/pg_hba.conf

文件末尾增加如下内容:

host replication all pg_master md5
host replication all pg_slave md5
  • 修改postgresql.conf文件

创建归档文件夹

sudo mkdir /var/lib/pgsql/pg_archive
sudo chmod 0700 /var/lib/pgsql/pg_archive
$ sudo vi /var/lib/pgsql/data/postgresql.conf

修改内容:

listen_addresses = '*'

tcp_keepalives_idle = 60
tcp_keepalives_interval = 10
tcp_keepalives_count = 10

synchronous_commit = off
wal_write_delay = 10ms
max_wal_senders = 10
wal_level = hot_standby

参考内容

listen_addresses = '*'
wal_level = hot_standby
synchronous_commit = on
archive_mode = on
archive_command = 'cp %p /var/lib/pgsql/pg_archive/%f'

max_wal_senders=5
wal_keep_segments = 32

hot_standby = on
restart_after_crash = off
replication_timeout = 5000
wal_receiver_status_interval = 2
max_standby_streaming_delay = -1
max_standby_archive_delay = -1
synchronous_commit = on
restart_after_crash = off
hot_standby_feedback = on

配置recovery文件(主库recovery.done,从库recovery.conf)

sudo vi /var/lib/pgsql/data/recovery.done

standby_mode = on
primary_conninfo = 'host=192.168.61.131 port=5432 user=postgres password=123456'
recovery_target_timeline = 'latest'

修改权限

sudo chown -R postges:postgres /var/lib/pgsql

2.2 从机配置

【不初始化,同步主机数据】

删除原有数据库文件

sudo rm -rf /var/lib/pgsql/*
sudo mkdir /var/lib/pgsql/{data,pg_archive}
sudo chown -R postges:postgres /var/lib/pgsql
sudo chmod 0750 /var/lib/pgsql/data

流复制

su root
su postgres
pg_baseabckup -h 192.168.61.130 -U postgres -D /var/lib/pgsql/data -X stream -P

配置recovery.conf

也可以修改主机已经配置的recovery.done

sudo vi /var/lib/pgsql/data/recovery.conf

standby_mode = on
primary_conninfo = 'host=192.168.61.130 port=5432 user=postgres password=123456'
recovery_target_timeline = 'latest'
sudo chown -R postges:postgres /var/lib/pgsql

重启从库

sudo systemctl restart postgresql

3. 验证

  • 验证主从
ps -ef | grep postgres
  • 主库上查看复制状态
select * from pg_stat_replication;
select pg_is_in_recovery();

f是主,t为从

  • pg_controldata命令
pg_controldata /var/lib/pgsql/data
# 主库
Database cluster state: in production

# 从库
Database cluster state: in archive recovery

Reference:

  1. www.postgresql.org/docs/11/war…
  2. www.pengyuwei.net/PGDOC/110/w…