暂无图片
暂无图片
2
暂无图片
暂无图片
暂无图片

如何管理PG主从流复制,这篇精髓必备

1918
作者:IT邦德
中国DBA联盟(ACDU)成员,10余年DBA工作经验
擅长主流数据Oracle、MySQL、PG、openGauss运维
备份恢复,安装迁移,性能优化、故障应急处理等

可提供技术业务:
1.DB故障处理/疑难杂症远程支援
2.Mysql/PG/Oracle/openGauss
数据库部署及数仓搭建

•••
微信:jem_db
QQ交流群:587159446
公众号:IT邦德

文章目录

前言

同步流复制在9.1版中实现。它是一种单主多从复制类型

1.主从流复制

此本机复制功能基于日志传送,这是一种通用的复制技术,其中主服务器不断向备用服务器发送WAL(预写日志)数据,然后备用服务器立即重放接收到的数据。流复制同步方式有同步、异步两种

2.sync_state

sync_state是备用服务器的状态。
sync_state属性指示备用服务器的状态。
它可以是以下值之一:

1.sync:备用服务器处于同步模式,
是当前正在工作的优先级最高的备用服务器。

2.potential:备用服务器处于同步模式,
是当前正在工作的优先级较低的备用服务器。
如果当前同步备用服务器失败,
则此备用服务器将升级为同步状态。

3.async:备用服务器处于异步模式。
(它永远不会处于“同步”或“潜在”模式。)
通过发出以下查询,可以显示备用服务器的优先级和状态:

3.主从Switchover切换

在保证主从数据一致的情况下,做如下操作

3.1 主库操作

1、停止PG服务
[root@primary ~]# su - postgres
[postgres@primary ~]$pg_ctl stop

2、以“postgres”用户创建创建standby.signal文件
touch /pgccc/pgdata/standby.signal

3、配置参数文件
cat >> $PGDATA/postgresql.conf <<"EOF"
primary_conninfo = 'host=192.168.6.21 port=5432 user=repladm password=replica'
EOF

4、启动PG服务
[root@primary ~]# su - postgres
[postgres@primary ~]$ pg_ctl start

3.2 前备库操作

1、停止PG服务
[root@standby01 ~]# su - postgres
[postgres@standby01 ~]$ pg_ctl stop

2、删除“standby.signal”文件
rm -rf  /pgccc/pgdata/standby.signal

3、修改参数文件,注释primary_conninfo
sed -i 's/primary_conninfo/#primary_conninfo/g' /pgccc/pgdata/postgresql.conf

4、启动PG服务
[root@primary ~]# su - postgres
[postgres@primary ~]$ pg_ctl start

4.主从Failover切换

主数据库是读写的,备数据库是只读的。当主库出现故障时,我们需要将备库提升为主库进行读写操作。

1)主库操作:关闭主库,模拟主库故障
[postgres@standby01 ~]$pg_ctl stop
waiting for server to shut down....... done
server stopped
2)备库操作:激活备库为主库:
不关闭主库,也可以执行该命令强制切换为主库角色,切换完成后,主从关系断开
3)原主库修复后降为备库
过程类似于重建备库,操作主从搭建

rm -rf  /backup
mkdir -p /backup
chown postgres:postgres /backup

su - postgres
pg_basebackup -h 192.168.6.20 -p 5432 -U repladm -l bk20240411 -F p -P -R -D /backup

-- 关闭从库,并且将备份文件覆盖从库的数据文件
[postgres@standby01 ~]$echo $PGDATA
/pgccc/pgdata
[postgres@standby01 ~]$ rm -rf /pgccc/pgdata/*
[postgres@standby01 ~]$ cp -r /backup/* /pgccc/pgdata/

4)修改配置参数
vi /pgccc/pgdata/postgresql.conf
primary_conninfo = 'host=192.168.6.20 port=5432 user=repladm password=replica'

5)启动PG服务
[root@standby01 ~]# su - postgres
[postgres@standby01 ~]$ pg_ctl start

5.节点扩容

--在从库对主库进行备份
mkdir -p /backup
chown postgres:postgres /backup

su - postgres
pg_basebackup -h 192.168.6.20 -p 5432 -U \
repladm -l bk20240411 -F p -P -R -D /backup

关闭从库,删除从库的数据文件,并且将备份文件覆盖从库的数据文件
[postgres@standby02 ~]$echo $PGDATA
/pgccc/pgdata
[postgres@standby02 ~]$ rm -rf /pgccc/pgdata/*
[postgres@standby02 ~]$ cp -r /backup/* /pgccc/pgdata/

修改从库primary_conninfo参数
cat >> $PGDATA/postgresql.conf <<"EOF"
primary_conninfo = 'host=192.168.6.20 port=5432 user=repladm password=replica'
EOF

重启备库
[postgres@standby02 ~]$ pg_ctl start

6.异步改同步

--在3个节点都修改如下参数
cat >> /pgccc/pgdata/postgresql.conf <<"EOF"
synchronous_commit='on'	
synchronous_standby_names='*' 
EOF

synchronous_commit说明:
1.on或local当数据库提交事务时,wal先写入到wal buffer在写入到wal日志文件,当写入到wal日志文件后才向客户端返回成功。
优点:非常安全
缺点:数据库性能有损耗

2.off表示不等待本地wal buffer写入到wal日志就向客户端返回成功,设置此参数可以提升数据库性能。
优点:提升数据库性能
缺点:数据库宕机是最新提交的少量事务可能丢失

7.总结

本文详细介绍了物理复制(流复制)的日常管理及避坑要要点

最后修改时间:2024-04-15 17:29:29
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论