本篇介绍如何在centos7系统搭建一个postgresql主备集群实现最近的HA(高可用)架构。后续更高级的HA模式都是基于这个最基本的主备搭建。
节点规划
ip 主机名 用途
192.168.182.4 node1 主库(读写)
192.168.182.5 node2 备库(只读)
安装PG
在主、备两台节点分别安装好pg11。
参考我的另一篇文章:
https://blog.csdn.net/IndexMan/article/details/131646090
配置主从
4主库执行,以下操作无特殊情况在postgres用户下执行
- 修改postgresql.conf,修改如下配置项:
# 在文件中修改(此配置仅用于远程访问, 流复制后续还有额外配置):
listen_addresses = '*'
port = 15432
max_connections = 1500 # 最大连接数,据说从机需要大于或等于该值
wal_level = replica
max_wal_senders = 2 #最多有2个流复制连接
wal_keep_segments = 16
wal_sender_timeout = 60s #流复制超时时间
- 修改pg_hba.conf,添加图中红框中2行配置
vim pg_hba.conf
- 赋予权限(root执行)
chown -R postgres:postgres /var/run/postgresql/
- 启动PG
pg_ctl start
- 创建流复制用户
su - postgres
psql -h localhost -p 15432
create role replica login replication encrypted password 'abc123';
SELECT rolname from pg_roles;
从库执行
- 赋权
chown -R postgres:postgres /var/run/postgresql/
- 从主库复制数据文件到本地
# 先清空原有数据文件(如非空)
rm -rf /home/postgres/pgdata/*
# 执行复制
pg_basebackup -h 192.168.182.4 -p 15432 -U replica -Fp -Xs -Pv -R -D /home/postgres/pgdata
# 输入主库中创建的replica用户密码后,开始同步
- 更改/home/postgres/pgdata目录权限为700
chmod -R 700 /home/postgres/pgdata/
- 启动PG
pg_ctl start
验证主从
主库操作
select * from pg_stat_replication;
select pg_is_in_recovery();
- 创建数据库、表然后插入1条数据
备库执行
select pg_is_in_recovery();
- 查看数据是否正常同步
- 测试插入数据
配置自启动服务
主、备2台都执行
vim /usr/lib/systemd/system/postgresql-11.service
# 将PGDATA修改为: /home/postgres/pgdata
systemctl enable postgresql-11.service
systemctl start postgresql-11.service
- 查看启动状态
systemctl status postgresql-11