PostgreSQL主从备份-异步流复制
前言
PostgreSQL集群搭建有多种方式,本文仅展示异步流复制方式搭建PostgreSQL数据库一主两备。
主库可进行插入,查询等操作,备库只能进行查询操作。
步骤
以下命令均使用postgres账户执行。
配置环境
主机名 | IP地址 | 角色 | 数据目录 |
---|---|---|---|
pg01 | 10.0.3.101 | 主库 | /home/postgres/pgdata |
pg02 | 10.0.3.102 | 备库 | /home/postgres/pgdata |
pg03 | 10.0.3.102 | 备库 | /home/postgres/pgdata |
主库设置
主库设置接受流复制的连接
# pg_hba.conf
# 允许来自所有机器ip的复制链接
host replication all 0/0 md5
# 允许来自所有机器ip的链接
host all all 0/0 md5
修改主库配置文件参数,如果一致就不用修改。
# postgresql.conf
listen_addresses = '*'
max_wal_senders = 10
wal_level = replica
min_wal_size = 800MB
wal_log_hints = on
# 归档参数设置
archive_mode = on
archive_command = 'test ! -f /home/postgres/archive/%f && cp %p /home/postgres/archive/%f'
wal_keep_segments = 256
wal_sender_timeout = 60s
# 当变成备库时,是否可以接受查询请求
hot_standby = on
# 配置文件最后添加如下行
unix_socket_directories = '/tmp'
创建archive文件夹:
mkdir /home/postgres/archive
重启主库,建议在第一次建立生产库的时候就设置好以上参数。
备库设置
备库在pg02机器上试用pg_basebackup命令生成基础备份:
pg_basebackup -h 10.0.3.101 -U postgres -F p -P -X stream -R -D $PGDATA -l liu20220729
执行完成后,在pg02机器上的/home/postgres/pgdata目录下看到复制过来的各种数据。
检查备库的配置文件postgresql.conf中hot_standby
是否为on。
pg_ctl start
启动备库。
备库pg03上的操作同pg02。
测试
测试1
在主库pg01的pg_stat_replication视图中,查看备库过来的流复制连接
select client_addr,state,sync_state from pg_stat_replication;
测试2
在主库中新建表,并插入数据,然后在备库中检查:
# pg01
create table test01(id int primary key, note text);
insert into test01 values(1, '11111');
insert into test01 values(2, '22222');
insert into test01 values(3, '33333');
#pg02
select * from test01;
#pg03
select * from test01;