一般postgres高可用集群是一个master配一个slave,但是开发这边需要做db的读写分离,所以运维这边 又添加了一台slave专门暴露出来做读操作。原来的slave还是只做备份。

HA

一主一从高可用的配置可以参考下面这篇文章 postgres streaming replication,有时间的话我可能会搬运一下 :)

安装配置

因为pg数据库集群已经配置好了一主一从,所以在master主机上不需要配置pg_hba.conf, 或者CREATE ROLE等等。

添加第二个slave需要注意以下两点:

  1. 等待pg_basebackupreplicas stream数据同步完成后,再启动 postgresql-9.6 service;
  2. 修改PG_DATA_DIR目录的权限;
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
rm /etc/yum.repos.d/pgdg-96-redhat.repo 
yum install https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-7-x86_64/pgdg-centos96-9.6-3.noarch.rpm
yum install -y postgresql96
yum install -y postgresql96-server
yum install -y postgresql96-contrib
vi /usr/lib/systemd/system/postgresql-9.6.service
mkdir /data/pg9.6
chown postgres:postgres /data/pg9.6/
ls -alh /data/pg9.6/
pg_basebackup --help

## you can add option --checkpoint=fast for an instance backup
## qhich is not recommend
pg_basebackup -X stream -D /data/pg9.6/ -P -R -h 10.3.3.3 -U replicator
ls /data/pg9.6/
cat /data/pg9.6/recovery.conf
vi /data/pg9.6/postgresql.conf
pwd
systemctl start postgresql-9.6.service 
ls -alh /data/pg9.6/
chown -R postgres:postgres /data/pg9.6
chmod 700 /data/pg9.6
systemctl start postgresql-9.6.service 
netstat -nlp | grep 5432
su - postgres
systemctl enable postgresql-9.6.service 

check

在master主机上查看pg_stat_replication表数据,验证第二个slave是否正常工作:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
# on MASTER machine
[dba_lol@pg_master ~]$ sudo su - postgres
上一次登录:五 2月 23 17:12:02 HKT 2018pts/1 上
-bash-4.2$ psql
psql (9.6.6)
Type "help" for help.

postgres=# select * from pg_stat_replication;
 pid  | usesysid | usename | application_name | client_addr | client_hostname | client_port |         backend_start         | backend_xmin |   state   | sent_location | write_location | flush_location | replay_location | sync_priorit
y | sync_state 
------+----------+---------+------------------+-------------+-----------------+-------------+-------------------------------+--------------+-----------+---------------+----------------+----------------+-----------------+-------------
--+------------
 6720 |    19367 | replicator | walreceiver      | 10.2.2.2    |                 |       49308 | 2018-01-24 18:20:47.114058+08 |              | streaming | 82/6B07DD60   | 82/6B07DD60    | 82/6B07DD60    | 82/6B07DD20     |             
0 | async
  446 |    19367 | replicator | walreceiver      | 10.2.2.4   |                 |       54836 | 2018-02-21 13:21:39.420745+08 |              | streaming | 82/6B07DD60   | 82/6B07DD60    | 82/6B07DD60    | 82/6B07DD20     |             
0 | async
(2 rows)

postgres=# 

PS

add slave to slave

编辑recover.conf 文件 的 primary_conninfo地址信息可以实现slave -> slave的数据同步。