本篇介绍如何在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 = 15432max_connections = 1500 # 最大连接数,据说从机需要大于或等于该值wal_level = replicamax_wal_senders = 2 #最多有2个流复制连接wal_keep_segments = 16wal_sender_timeout = 60s#流复制超时时间
  • 修改pg_hba.conf,添加图中红框中2行配置
vim pg_hba.conf

  • 赋予权限(root执行)
chown -R postgres:postgres /var/run/postgresql/
  • 启动PG
pg_ctl start
  • 创建流复制用户
su - postgrespsql -h localhost -p 15432create 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/pgdatasystemctl enable postgresql-11.servicesystemctl start postgresql-11.service

  • 查看启动状态
systemctl status postgresql-11