搭建物理流复制
搭建物理流复制
本章为集群安装中的操作流程指引,照做即可装出一主两备的物理流复制集群;物理复制的机制与参数说明详见第六篇《物理复制》。
演示环境:
本次搭建为一主两从的物理流复制,准备三台已完成单机安装的数据库服务器。
| IP地址 | 角色 |
|---|---|
| 192.168.221.136 | 主库 |
| 192.168.221.137 | 备库 |
| 192.168.221.138 | 备库 |
主库创建复制用户
halo0root=# CREATE USER replica PASSWORD '123456' REPLICATION;
主库配置
编辑 pg_hba.conf,添加一行规则,允许 replica 用户以 md5 加密方式从任意主机连接到数据库的复制功能:
vi $PGDATA/pg_hba.conf
添加以下规则:
host replication replica 0.0.0.0/0 md5
主库重新加载配置
pg_ctl reload
创建备库
创建备库时,需要将两个节点的数据库关闭并清空数据目录。
node2 节点执行(halo 用户下):
[halo@node2 ~]$ pg_basebackup -F p -X stream -v -P -h 192.168.221.136 -p 1921 -U replica -D $PGDATA -R -C --slot node2
Password:
pg_basebackup: initiating base backup, waiting for checkpoint to complete
pg_basebackup: checkpoint completed
pg_basebackup: write-ahead log start point: 0/2000028 on timeline 1
pg_basebackup: starting background WAL receiver
pg_basebackup: created replication slot "node2"
28085/28085 kB (100%), 1/1 tablespace
pg_basebackup: write-ahead log end point: 0/2000100
pg_basebackup: waiting for background process to finish streaming ...
pg_basebackup: syncing data to disk ...
pg_basebackup: renaming backup_manifest.tmp to backup_manifest
pg_basebackup: base backup completed
node3 节点执行(halo 用户下):
[halo@node3 ~]$ pg_basebackup -F p -X stream -v -P -h 192.168.221.136 -p 1921 -U replica -D $PGDATA -R -C --slot node3
Password:
pg_basebackup: initiating base backup, waiting for checkpoint to complete
pg_basebackup: checkpoint completed
pg_basebackup: write-ahead log start point: 0/4000028 on timeline 1
pg_basebackup: starting background WAL receiver
pg_basebackup: created replication slot "node3"
28085/28085 kB (100%), 1/1 tablespace
pg_basebackup: write-ahead log end point: 0/4000100
pg_basebackup: waiting for background process to finish streaming ...
pg_basebackup: syncing data to disk ...
pg_basebackup: renaming backup_manifest.tmp to backup_manifest
pg_basebackup: base backup completed
注意:备库执行pg_basebackup时,备库的$PGDATA数据目录(/data/halo)一定要为空,不然会报错的。
启动备库
两个备库(node2、node3)都需要启动。
--halo用户下
pg_ctl start
查看流复制状态
主库查看pg_stat_replication视图,该视图主要用于监控流复制的状态,揭示有关wal sender进程的信息,所以在流复制集群中只有拥有wal sender进程的主库才会有信息。
halo0root=# select * from pg_stat_replication;
-[ RECORD 1 ]----+------------------------------
pid | 4856
usesysid | 65553
usename | replica
application_name | walreceiver
client_addr | 192.168.221.138
client_hostname |
client_port | 53910
backend_start | 2026-08-11 10:15:44.511157+08
backend_xmin |
state | streaming
sent_lsn | 0/5000060
write_lsn | 0/5000060
flush_lsn | 0/5000060
replay_lsn | 0/5000060
write_lag |
flush_lag |
replay_lag |
sync_priority | 0
sync_state | async
reply_time | 2026-08-11 10:15:54.696141+08
-[ RECORD 2 ]----+------------------------------
pid | 4859
usesysid | 65553
usename | replica
application_name | walreceiver
client_addr | 192.168.221.137
client_hostname |
client_port | 59236
backend_start | 2026-08-11 10:15:46.457255+08
backend_xmin |
state | streaming
sent_lsn | 0/5000060
write_lsn | 0/5000060
flush_lsn | 0/5000060
replay_lsn | 0/5000060
write_lag |
flush_lag |
replay_lag |
sync_priority | 0
sync_state | async
reply_time | 2026-08-11 10:15:57.310791+08
注意:看见sync_state状态为async就是异步同步状态,也可以主库创建表插入数据测试,在备库查看
备库查看pg_stat_replication为空。
halo0root=# select * from pg_stat_replication;
pid | usesysid | usename | application_name | client_addr | client_hostname | client_port | backend_start | backend_xmin | state | sent_lsn | write_lsn | flush_lsn | replay_lsn | write_lag | flush_lag | replay_lag | sync_priority | sync_state | reply_time
-----+----------+---------+------------------+-------------+-----------------+-------------+---------------+--------------+-------+----------+-----------+-----------+------------+-----------+-----------+------------+---------------+------------+------------
(0 行记录)