基于PG12.2实现主从异步流复制及主从切换教程(下)

概述

今天主要介绍如何搭建PG主从流复制及主从切换,仅供参考。


PostgreSQL数据库主从异步流复制搭建

环境说明:


1、安装PG数据库(主从库进行)

用脚本进行,略。


2、主库配置

2.1、添加流复制用户

--修改/data/pgdata/以下参数wal_level=hot_standby这个设置了可以最多有几个流复制连接,差不多有几个从,就设置几个wal_keep_segments=256"on"allowsqueriesduringrecovery设置为备库时是否支持可读wal_ser_timeout=120s'


2.2、修改配置文件

--修改/data/pgdata/以下参数wal_level=hot_standby这个设置了可以最多有几个流复制连接,差不多有几个从,就设置几个wal_keep_segments=256"on"allowsqueriesduringrecovery设置为备库时是否支持可读wal_ser_timeout=120s'


2.3、修改配置文件pg_

增加如下参数

systemctlrestartpostgresql

2.4、重启主库

systemctlrestartpostgresql
3、从库配置

PG12把废掉了,与PG11略有不同,但大同小异。

3.1、通过pg_basebackup命令行在从库上生成基础备份

这里以/data/pgdata做数据目录,迁移之前需保证/data/pgdata目录为空

systemctlstoppostgresqlrm-rf/data/pgdata/*备份完成,使用-R选项,在data目录下自动生成“信号”文件(可手工使用touch命令生成)以及更新了文件Permissionsshouldbeu=rwx(0700)oru=rwx,g=rx(0750)chmod-R750/data/pgdata/chown-Rpostgres:postgres/data/pgdata/systemctlrestartpostgresql4、主从流复制检查4.1、检查进程查看进程,主库所在的机器中会看到ser进程从库所在的机器中会看到receiver进程4.2、检查异步流复制的情况

3.3、启动从库

ser的进程

usename复制的客户端地址

client_port主从搭建的时间

stateMaster传送WAL的位置

write_locationSlave同步到磁盘的WAL位置

replay_location同步Replication的优先度,0:异步、1~?:同步(数字越小优先度越高)

sync_state#有三个值,async:异步、sync:同步、potential:虽然现在是异步模式,但是有可能升级到同步模式

2)查看从服务(WAL接收器进程)状态

psql-c"\x"-c"SELECT*FROMpg_stat_wal_receiver;"


4.3、数据测试

1)主库写入数据

createtabletb1(iint,ttext);brinsertintotb1values(1,'hwb');


2)备库查询并写入数据

select*fromtb1;brinsertintotb1values(2,'hwb2');


PostgreSQL主从数据库切换

当主库出现故障时,我们需要将备库提升为主库进行读写操作。激活备库有3种方式:

1)pg_ctl方式:在备库主机执行pg_ctlpromoteshell脚本

2)触发器文件方式:备库配置文件的trigger_file参数,之后在备库主机上创建触发器文件

3)pg_promote()函数方式,可以通过SQL命令激活备库(pg12之后)

1、识别当前库主从角色

1)查看pg_is_in_recovery()视图

psql-c"\x"-c"SELECT*FROMpg_stat_wal_receiver;"

2)pg_controldata识别

pg_controldata结果为clusterstate是inproduction则为主库;结果为clusterstate是inarchiverecovery则为备库。

./pg_controldata-D/data/pgdata/|grepcluster


3)查看pg_stat_replication

--查询到结果为主库,查询不到结果为备库selectpid,application_name,client_addr,client_port,state,sync_statefrompg_stat_replication;


2、基于pg_promote函数主从切换

2.1、关闭主库,模拟故障

systemctlstoppostgresql

2.2、激活备库

pg_promote语法:

pg_promote(waitbooleanDEFAULTtrue,wait_secondsintegerDEFAULT60)

两个参数:

wait:表示是否等待备库的promotion完成或者wait_seconds秒之后返回成功,默认值为true。

wait_seconds:等待时间,单位秒,默认60

psql-c"\x"-c"selectpg_promote(true,60);"

2.3、验证

cd/usr/local/postgres/bindate./pg_controldata-D/data/pgdata/|grepcluster


至此便完成备库的激活,当原主库修复完后,我们可重复之前步骤将原主库作为新的备库使用。

2.4、原主库切换为新备库(在原主库进行)

_mode='on'_conninfo='user=replicapassword=''replica@1234''host==55432sslmode=prefersslcompression=0gssencmode=disablekrbsrvname=postgrestarget_session_attrs=any'EOF--重启备库systemctlrestartpostgresql



免责声明:本文章如果文章侵权,请联系我们处理,本站仅提供信息存储空间服务如因作品内容、版权和其他问题请于本站联系