实战案例:PostgreSQL高可用,实现流复制

470 阅读1分钟

1.基础环境准备

10.0.0.14 Master
10.0.0.15 Standby

2.Master 节点配置

#创建复制的用户并授权

[postgres@master ~]$ psql
postgres=#create role repluser with replication login password '123456';

#修改pg_hba.conf进行授权

[postgres@master ~]$vi /pgsql/data/pg_hba.conf
host replication repluser 0.0.0.0/0 md5

[postgres@master ~]$pg_ctl restart -D /pgsql/data

3.Standby 节点配置

#清空数据和归档

[postgres@standby ~]$ pg_ctl stop -D $PGDATA
[postgres@standby ~]$ rm -rf /pgsql/data/*
[postgres@standby ~]$ rm -rf /archive/*
[postgres@standby ~]$ rm -rf /pgsql/backup/*

#备份主库数据到备库

[postgres@standby ~]$ pg_basebackup -D /pgsql/backup/ -Ft -Pv -Urepluser -h 10.0.0.14 -p 5432 -R

#还原备份的数据,实现初始的主从数据同步

[postgres@standby ~]$ tar xf /pgsql/backup/base.tar -C /pgsql/data 
[postgres@standby ~]$ tar xf /pgsql/backup/pg_wal.tar -C /archive/

#方法1

#修改postgresql.conf文件

[postgres@standby ~]$ vi /pgsql/data/postgresql.conf

#添加下面两行

primary_conninfo = 'host=10.0.0.101 port=5432 user=repluser password=123456' 
restore_command = 'cp /archive/%f %p' #此项可不配置

[postgres@standby ~]$ pg_ctl -D /pgsql/data start

4.监控同步状态

主从已成功同步

在主库查看状态

[root@master ~]#pg_controldata

postgres=#select pid,state,client_addr,sync_priority,sync_state from pg_stat_replication;

#下面只在主节点查看同步模式,注意:如果无从节点连接,将无任何显示信息 
postgres=# SELECT pg_current_wal_insert_lsn(),* from pg_stat_replication;

#服务器查看数据库是否为备库,f表主库 t表示为备库 
postgres=# select * from pg_is_in_recovery();

image.png

image.png

image.png

image.png

在主库新增数据可以在从库查看

image.png

image.png