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

环境说明:

用脚本进行,略。

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、重启主库
systemctlrestartpostgresql3、从库配置
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、关闭主库,模拟故障
systemctlstoppostgresql2.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
免责声明:本文章如果文章侵权,请联系我们处理,本站仅提供信息存储空间服务如因作品内容、版权和其他问题请于本站联系







