前言

PostgreSQL集群搭建有多种方式,本文仅展示异步流复制方式搭建PostgreSQL数据库一主两备。

主库可进行插入,查询等操作,备库只能进行查询操作。

步骤

以下命令均使用postgres账户执行。

配置环境

主机名IP地址角色数据目录
pg0110.0.3.101主库/home/postgres/pgdata
pg0210.0.3.102备库/home/postgres/pgdata
pg0310.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;

标签: none

添加新评论