主备复制架构是数据库使用最广泛的一种架构,当主库发生故障时可以将备库提升为主,快速恢复业务。主备架构另外一个功能是提供负载均衡,读业务可以路由到备库,减少主库的负载。本文主要介绍PostgreSQL主备流复制的搭建方法。
- PostgreSQL版本:11.5
- 2台机器,搭建PG主备流复制
- 主库:192.168.56.101
- 备库:192.168.56.102
一、环境准确(主备库都要执行)
创建pg用户
useradd pg
创建PG数据目录
mkdir -p /data/pg/
chown -R pg:pg /data/pg
切换到pg用户
su - pg
二、创建PG主库(主库执行)
初始化主库:
initdb -D /data/pg
修改主库配置文件:
vim /data/pg/postgresql.conf
listen_addresses = '*'
port = 5432
max_wal_senders = 10
wal_level = replica
修改主库配置文件,添加配置项:
vim /data/pg/pg_hba.conf
host replication all 0.0.0.0/0 md5
启动主库:
pg_ctl -D /data/pg start
创建复制账号:
CREATE USER repl replication LOGIN CONNECTION LIMIT 5 ENCRYPTED PASSWORD '123456';
三、创建主库的基础备份(备库执行)
创建基础备份到本地:
pg_basebackup -h 192.168.56.101 -U repl -W -p 5432 -D /data/pg -l backup_label
-W参数在终端提示符下输入密码。
设置备库配置文件:
vim /data/pg/postgresql.conf
port = 5432
hot_standby = on
vim /data/pg/recovery.conf
standby_mode = 'on'
primary_conninfo = 'user=repl host=192.168.56.101 password=123456 port=5432 sslmode=disable sslcompression=0 target_session_attrs=any'
启动备库:
pg_ctl -D /data/pg start
四、测试流复制
连接到主库(192.168.56.101),创建表,写入数据:
psql postgres
postgres=# create database db;
postgres=# \l
postgres=# \c db
db=# create table tb(id int);
db=# insert into tb select 1;
db=# exit
连接到备库(192.168.56.102),查询数据:
psql postgres
postgres=# \l
postgres=# \c db
db=# select * from tb;