当前位置:网站首页>使用Patroni回调脚本绑定VIP的坑
使用Patroni回调脚本绑定VIP的坑
2022-08-04 04:34:00 【墨天轮】
我们知道patroni可以通过参数callbacks执行回调脚本, 当patroni触发的特定动作比如启动、关闭或者角色切换时会触发这个脚本,我们可以通过这个脚本绑定VIP、立刻执行一次数据库备份或者启动某个服务等等。
对于集群VIP配置网上有很多方案,但是最简单的莫过于使用回调脚本绑定VIP,简单又方便,但是简单就会带来问题,下面分享一个关于使用回调脚本绑定VIP遇到的坑。
我有一个patroni管理的三节点集群(一个主节点、一个同步备节点和一个异步备节点),在一次上线新应用的时候,由于应用同事连接池配置问题导致连接占满(包括复制用到的连接)、负载过高,主备发生了切换,原主节点降备,同步备节点升主,但是由于原主节点负载过高导致VIP没有及时释放,应用仍然对持有VIP的备节点执行大量并发的DML\DDL操作,短暂延迟后新主节点获取VIP同时应用通过VIP在新主节点上执行了大量并发DML\DDL操作,由于连接池配置问题新主节点再次因为连接占满、负载过高发生了主备切换,此时就出现了一个问题,集群所有节点均为只读,主节点错误信息如下:
ERROR: cannot execute UPDATE in a read-only transaction
官方文档中有两个参数:
max_standby_streaming_delay默认为-1允许备机一直等到冲突查询结束。
hot_standby_feedback默认为off,它阻止VACUUM 移除最近死亡的元组并且因此清除冲突不会产生。
这两个参数都使用了默认值,也就是说当备节点执行一个慢SQL,同时主节点对慢查询SQL进行DDL操作时,首先主备会产生延迟,在延迟发生之后再次发生主备切换就会导致集群异常,所有节点均为只读。
如果遇到这样的问题我们只要在所有节点找到并停掉慢查询语句就可以。当然还有最简单的方法,把主节点reovery.conf文件(PG12之前)删掉,重启主节点数据库即可,但是同时可能相应的备节点需要重建。v
数据库集群系统使用一般分为几种情况;
- 主节点负责读写,备节点只作为高可用。
- 主节点负责读写,备节点负责读。
- 主节点只负责写,备节点负责读。
如果第一种情况不使用CALLBACKS方式绑定VIP的话倒是无所谓,如果使用,那么上述三种情况为了避免此类问题都应当合理配置三个参数:
- max_standby_streaming_delay
- hot_standby_feedback
- max_standby_archive_delay
其实问题的根本还是连接池配置不合理,作为数据库DBA的我们很难去左右应用的开发和配置,但是我们要做到数据库合理的参数配置、完善的监控以及合理的建议。
边栏推荐
- 杭电多校-Slipper-(树图转化+虚点建图)
- Jenkins 导出、导入 Job Pipeline
- Innovation and Integration | Huaqiu Empowerment Helps OpenHarmony Ecological Hardware Development and Landing
- 10 Convolutional Neural Networks for Deep Learning 3
- 深度学习环境配置
- 系统设计.如何设计一个秒杀系统(完整版 转)
- Basic characteristics of TL431 and oscillator circuit
- Hey, I had another fight with HR in the small group!
- 附加:对于“与数据表对应的实体类“,【面对MongoDB时,使用的@Id等注解】和【以前面对MySQL时,使用的@Id等注解】,是不同的;
- 外卖店优先级
猜你喜欢
机器学习模型的“可解释性”
Significant differences between Oracle and Postgresql in PLSQL transaction rollback
docker安装mysql与宿主机相差8小时的问题。
用户与用户互发红包/支付宝C2C/B2C现金红包php源码示例/H5方式/兼容苹果/安卓
mq应用场景介绍
3000 words, is take you understand machine learning!
3000字,一文带你搞懂机器学习!
打造一份优雅的简历
Introduction to mq application scenarios
if,case,for,while
随机推荐
2022 software test interview questions The latest ByteDance 50 real interview questions, 15k have been won after brushing, with explanation + Q&A
移动支付线上线下支付场景
2022软件测试面试题 最新字节跳动50道真题面试题 刷完已拿下15k 附讲解+答疑
Jenkins 导出、导入 Job Pipeline
2003. 每棵子树内缺失的最小基因值 DFS
pnpm 是凭什么对 npm 和 yarn 降维打击的
Introduction to mq application scenarios
【21天学习挑战赛】直接插入排序
杭电多校-Slipper-(树图转化+虚点建图)
FFmpeg —— 录制麦克风声音(附源码)
Enterprise live broadcast is on the rise: Witnessing focused products, micro-like embracing ecology
Oracle与Postgresql在PLSQL内事务回滚的重大差异
软件测试如何系统规划学习呢?
2022年软件测试——精选金融银行面试真题
There is an 8 hour difference between the docker installation of mysql and the host.
How to dynamically add script dependent scripts
技术解析|如何将 Pulsar 数据快速且无缝接入 Apache Doris
10 Convolutional Neural Networks for Deep Learning 3
[Skill] Using Sentinel to achieve priority processing of requests
drools from download to postman request success