PG高可用学习@2
目录标题
- 一、Patroni 支持在同步复制下备库故障时自动降级为异步复制?
- 参考依据
- 1. PostgreSQL 官方文档
- 2. Patroni 官方文档
- 3. 高可用和容错设计原则
- 二、patroni 是如何检测备库故障的?
- 1. 心跳机制
- 2. 监控数据库进程状态
- 3. 查询系统视图
- 4. 复制延迟监测
- 5. 网络连接测试
- 三、动态配置设置
一、Patroni 支持在同步复制下备库故障时自动降级为异步复制?
synchronous_commit
synchronous_mode
synchronous_standby_names
备库优先级别
模拟故障
同步备库从1-0切换到2-0
当 synchronous_commit
设置为 on
时,PostgreSQL 主库会等待至少一个同步备库确认接收到事务日志后才会向客户端返回事务提交成功的信息。如果备库挂掉,主库就会一直等待,导致卡住。Patroni 是一个用于管理 PostgreSQL 高可用集群的工具,它支持将同步复制降级为异步复制,以解决主库卡住的问题。
根据 Patroni 官方文档,Patroni 使用 PostgreSQL 的流复制。默认情况下,Patroni 配置 PostgreSQL 为异步复制。选择复制模式取决于您的业务考虑。需要调查异步复制和同步复制,以及其他高可用性解决方案,以确定哪种解决方案最适合您的需求。在异步复制模式下,集群被允许丢失一些已提交的事务,以确保可用性。当主服务器失败或因其他任何原因变得不可用时,Patroni 将自动提升一个足够健康的备用服务器为主服务器。任何尚未复制到备用服务器的事务都保留在主服务器上的“分叉时间线”中,并且实际上是可恢复的。
要启用 PostgreSQL 的同步复制,可以在 Patroni 的 YAML 配置文件中的 parameters
部分添加以下行:
synchronous_commit: "on"
synchronous_standby_names: "*"
启用同步复制后,使用至少三个 Postgres 数据节点以确保写入可用性,如果一个主机失败。使用 PostgreSQL 同步复制并不保证在所有情况下都不会丢失事务。当主服务器和当前作为同步副本的服务器同时失败时,可能会提升一个不包含所有事务的第三个节点。
Patroni 的 synchronous_mode
可以在运行时通过 patronictl edit-config
命令或通过 Patroni REST 接口开启或关闭。有关动态配置的说明,请参见 Patroni 官方文档。开启 synchronous_mode
并不保证在所有情况下都能实现多节点提交的持久性。当没有合适的备用服务器可用时,主服务器仍然会接受写入,但不保证它们的复制。当主服务器以这种模式失败时,不会提升任何备用服务器。当主机重新上线时,它将自动被提升,除非系统管理员执行了手动故障转移。这种行为使得同步模式适用于具有两个节点的集群集。
当 synchronous_mode
打开且备用服务器崩溃时,提交将阻塞,直到下一次迭代的 Patroni 运行并切换主服务器到独立模式(在最坏情况下,写入延迟为 ttl
秒,平均情况下为 loop_wait
/2 秒)。手动关闭或重新启动备用服务器不会导致提交服务中断。备用服务器将在 PostgreSQL 关闭之前向主服务器发出信号,以释放其同步备用职责,然后 PostgreSQL 关闭。
如果需要保证每个写入都持久地存储在至少两个节点上,请启用 synchronous_mode_strict
以及 synchronous_mode
。此参数会阻止 Patroni 在没有同步备用候选时关闭主服务器上的同步复制。缺点是,主服务器在没有同步副本候不可写入(除非 Postgres 事务显式关闭 synchronous_mode
),这会阻塞所有客户端写入请求,直到至少有一个同步副本可用。
您可以通过设置 nosync
标签为 true
来确保备用服务器永远不会成为同步备用。这对于通过网络连接缓慢且可能导致性能下降的备用服务器,建议设置此标签。将标签 nostream
设置为 true
也将产生相同的效果。
参考依据
1. PostgreSQL 官方文档
PostgreSQL 官方文档详细解释了 synchronous_commit
参数的作用和不同取值的含义。当 synchronous_commit
设置为 on
时,主库会严格等待同步备库的确认,这可能导致在备库故障时主库卡住。而将其设置为 off
可以让主库在提交事务时不等待备库确认,实现异步复制。
2. Patroni 官方文档
Patroni 官方文档提供了关于如何通过修改配置文件来调整 PostgreSQL 参数的详细说明。我们可以通过修改 patroni.yml
文件中的 postgresql.parameters
部分来动态调整 synchronous_commit
参数,以适应不同的集群状态。
3. 高可用和容错设计原则
在高可用集群设计中,当同步备库出现故障时,将同步复制降级为异步复制是一种常见的容错策略。这样可以确保主库在备库故障时仍然能够继续处理事务,避免因等待备库确认而导致系统卡住,从而提高系统的可用性。
replication_modes
第10章 复制模式
二、patroni 是如何检测备库故障的?
Patroni 是一款用于管理 PostgreSQL 高可用集群的工具,它主要通过心跳机制、监控数据库进程状态、查询系统视图以及利用 PostgreSQL 内置的复制状态信息等方式来检测备库故障,以下为你详细介绍:
1. 心跳机制
- 原理:Patroni 基于 etcd、Consul 或 ZooKeeper 等分布式键值存储系统实现心跳机制。主库和备库会定期向这些存储系统写入自己的状态信息(心跳信息),包括节点的健康状况、角色(主库或备库)、当前时间戳等。
- 故障检测:Patroni 会持续监控这些心跳信息。如果某个备库在规定的时间内没有更新其心跳信息,Patroni 就会认为该备库可能出现故障。例如,设置的心跳间隔为 2 秒,超时时间为 10 秒,若备库超过 10 秒未更新心跳,Patroni 就会触发故障处理流程。
2. 监控数据库进程状态
- 进程检查:Patroni 会定期检查备库上的 PostgreSQL 进程是否正常运行。它可以通过操作系统命令(如
ps
命令)来查看 PostgreSQL 进程是否存在。 - 故障判定:如果在多次检查中都无法找到 PostgreSQL 进程,Patroni 会判定该备库出现故障。例如,每隔 5 秒检查一次,连续 3 次都未发现进程,就认为备库故障。
3. 查询系统视图
- 状态查询:Patroni 会在备库上执行 SQL 查询,通过查询 PostgreSQL 的系统视图来获取备库的状态信息。常用的系统视图包括
pg_stat_replication
(主库上查看复制状态)和pg_stat_wal_receiver
(备库上查看 WAL 接收状态)。 - 故障识别:如果查询结果显示备库的复制状态异常,如
pg_stat_wal_receiver
中的state
字段不是正常的streaming
状态,或者pg_stat_replication
中显示备库长时间没有接收或应用 WAL 日志,Patroni 会判断备库可能存在故障。
4. 复制延迟监测
- 延迟计算:Patroni 会监控备库与主库之间的复制延迟。通过比较主库和备库的 WAL 位置(如
pg_current_wal_lsn()
函数获取的日志序列号),计算出备库落后主库的日志量。 - 故障判断:如果复制延迟超过了预设的阈值,Patroni 会认为备库可能出现问题。例如,设定延迟阈值为 100MB,当备库落后主库的日志量超过 100MB 且持续一段时间(如 5 分钟),就判定备库故障。
5. 网络连接测试
- 连接尝试:Patroni 会定期尝试与备库建立网络连接,包括数据库连接和其他必要的通信连接。
- 故障确认:如果多次连接尝试都失败,Patroni 会认为备库可能由于网络问题或自身故障而无法正常响应,从而判定备库故障。例如,每隔 3 秒尝试连接一次,连续 5 次失败就触发故障处理。
三、动态配置设置
动态配置存储在DCS(分布式配置存储)中并应用于所有集群节点。
为了更改动态配置,您可以使用:ref:patronictl_edit_config 工具或 Patroni:ref:REST API <rest_api>
。
-
loop_wait:循环休眠的秒数。默认值:10,最小可能值:1
-
ttl:获取领导者锁的 TTL(以秒为单位)。可以将其视为启动自动故障转移过程之前的时间长度。默认值:30,最小可能值:20
-
retry_timeout:DCS 和 PostgreSQL 操作重试的超时时间(以秒为单位)。短于此时间的 DCS 或网络问题不会导致 Patroni 降级领导者。默认值:10,最小可能值:3
当改变 loop_wait、retry_timeout 或 ttl 的值时,必须遵循以下规则:
loop_wait + 2 * retry_timeout <= ttl
Dynamic Configuration Settings
相关文章:

PG高可用学习@2
目录标题 一、Patroni 支持在同步复制下备库故障时自动降级为异步复制?参考依据1. PostgreSQL 官方文档2. Patroni 官方文档3. 高可用和容错设计原则 二、patroni 是如何检测备库故障的?1. 心跳机制2. 监控数据库进程状态3. 查询系统视图4. 复制延迟监测5. 网络连接…...

centos 8和centos 9 stream x64的区别
以下是 CentOS 8 与 CentOS Stream 9 的主要区别,从技术架构、更新策略到适用场景等维度进行对比: AI产品独立开发实战营 联系我了解 1. 定位与更新策略 特性CentOS 8CentOS Stream 9定位原为 RHEL 8 的免费稳定复刻版RHEL 9 的上游开发分支ÿ…...

C++基础学习记录—类
1、面向对象的三大特征:封装、继承、多态 2、类和对象 2.1、类的概念 类:类是一个抽象的概念,用于描述同一类对象的特点。 对象:根据类的概念所创造的实体。 类中包含属性和行为 属性:描述类的数据,一…...
云原生时代的后端开发:架构、工具与最佳实践
随着云计算的迅猛发展,云原生(Cloud Native)逐渐成为后端开发的主流趋势。云原生后端不仅能够提高应用的灵活性和可扩展性,还能显著优化开发和运维流程。本文将围绕云原生后端的关键概念、当前热门技术及最佳实践,帮助…...

ARM Cortex-M3/M4 权威指南 笔记【一】技术综述
一、Cortex-M3/M4 处理器的一般信息 1.1 处理器类型 ARM Cortex-M 为 32 位 RISC(精简指令集)处理器,其具有: 32位寄存器32位内部数据通路32位总线接口 除了 32 位数据,Cortex-M 处理器(以及其他任何 A…...

12.项目结构
后端结构 ruoyi-admin 项目启动的入口 提供了两种启动方式 1.RuoYiApplication基于springboot,内置tomcat,直接运行。 2.RuoYiServletInitializer将springboot项目打成一个war包,用外置的servlet容器来运行。 通用功能的controller 后台登录相关的、权限控制相关的、数据字…...

保研考研机试攻略:python笔记(4)
🐨🐨🐨15各类查找 🐼🐼二分法 在我们写程序之前,我们要定义好边界,主要是考虑区间边界的闭开问题。 🐶1、左闭右闭 # 左闭右闭 def search(li, target): h = len(li) - 1l = 0#因为都是闭区间,h和l都可以取到并且相等while h >= l:mid = l + (h - l) // 2…...
高阶C语言|枚举与联合
💬 欢迎讨论:在阅读过程中有任何疑问,欢迎在评论区留言,我们一起交流学习! 👍 点赞、收藏与分享:如果你觉得这篇文章对你有帮助,记得点赞、收藏,并分享给更多对C语言感兴…...

【天梯赛】L1-104 九宫格(C++)
易忽略的错误:开始习惯性地看到n就以为是n*n数组了,实际上应该是9*9的固定大小数组,查了半天没查出来 题面 L1-104 九宫格 - 团体程序设计天梯赛-练习集 代码实现 #include<bits/stdc.h> using namespace std; //易错:开…...
现代C++多线程基础 -忆苦思甜pthread_mutex
c 老古董 文章目录 c 老古董pthread_mutex概念常用apipthread_mutex_initpthread_mutex_lockpthread_mutex_trylockpthread_mutex_unlockpthread_mutex_destroy 案例 pthread_mutex 概念 互斥锁 mutex是一种简单的加锁的方法来控制对共享资源的访问,mutex只有两种…...

soular基础教程-使用指南
soular是TikLab DevOps工具链的统一帐号中心,今天来介绍如何使用 soular 配置你的组织、工作台,快速入门上手。  1. 账号管理 可以对账号信息进行多方面管理,包括分配不同的部门、用户组等,从而确保账号权限和职责…...

网络安全网格架构(CSMA) 网络安全框架csf
CSRF:Cross Site Request Forgy(跨站请求伪造) 用户打开另外一个网站,可以对本网站进行操作或攻击。容易产生传播蠕虫。 CSRF攻击原理: 1、用户先登录A网站 2、A网站确认身份返回用户信息 3、B网站冒充用户信息而不是直接获取用…...

基于DeepSeek API和VSCode的自动化网页生成流程
1.创建API key 访问官网DeepSeek ,点击API开放平台。 在开放平台界面左侧点击API keys,进入API keys管理界面,点击创建API key按钮创建API key,名称自定义。 2.下载并安装配置编辑器VSCode 官网Visual Studio Code - Code Editing…...

【AI时代】Page Assist - 本地 AI 模型的 Web UI (谷歌浏览器) 本地DeepSeek启用联网功能
Page Assist - 本地 AI 模型的 Web UI 一、部署本地模型 参考教程:https://blog.csdn.net/Bjxhub/article/details/145536134二、安装插件 Page Assist 浏览器谷歌商店搜索 Page Assist ,安装该插件。 注意:需要一点科学的魔法。 三、使用…...

电脑IP地址自定义
1.连接WIFI 2.打开控制面板 3.打开网络共享中心 4.选择想要修改的WIFI 点击连接的WIFI选择属性 点击要修改的配置协议IPV4/IPV6 设置IP地址为需要的地址...

python卷积神经网络人脸识别示例实现详解
目录 一、准备 1)使用pytorch 2)安装pytorch 3)准备训练和测试资源 二、卷积神经网络的基本结构 三、代码实现 1)导入库 2)数据预处理 3)加载数据 4)构建一个卷积神经网络 5࿰…...
EX_25/2/11
将 epoll 服务器 客户端拿来用 客户端: 写一个界面,里面有注册登录 服务器:处理注册和登录逻辑,注册的话将注册的账号密码写入数据库,登录的话查询数据库中是否存在账号,并验证密码是否正确 额外功能&a…...

二.2 整数表示(2.1-2.4)
在本节中,我们描述用位来编码整数的两种不同的方式:一种只能表示非负数,而另一种能够表示负数、零和正数。后面我们将会看到它们在数学属性和机器级实现方面密切相关。我们还会研究扩展或者收缩一个已编码整数以适应不同长度表示的效果。 图2…...

中间件-安装Minio-集成使用(ubantu-docker)
目录 1、安装docer 2、运行以下命令拉取MinIO的Docker镜像 3、检查当前所有Docker下载的镜像 4、创建目录 5、创建Minio容器并运行 6、SDK操作 FileUploader.java 1、安装docer 参考这篇:Linux安装Docker 2、运行以下命令拉取MinIO的Docker镜像 docker pull…...
夸克网盘多链接批量保存,自动同步更新,批量分享
最近夸克网盘有点火,好多资源都上夸克网盘了,做了一个夸克网盘的批量化程序,已经打包好了,不用配置代码环境就能用 夸克网盘工具:https://pan.quark.cn/s/c22f3451a6ab 百度网盘工具:https://pan.quark.cn…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...
基于Uniapp开发HarmonyOS 5.0旅游应用技术实践
一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架,支持"一次开发,多端部署",可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务,为旅游应用带来…...
数据链路层的主要功能是什么
数据链路层(OSI模型第2层)的核心功能是在相邻网络节点(如交换机、主机)间提供可靠的数据帧传输服务,主要职责包括: 🔑 核心功能详解: 帧封装与解封装 封装: 将网络层下发…...

VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP
编辑-虚拟网络编辑器-更改设置 选择桥接模式,然后找到相应的网卡(可以查看自己本机的网络连接) windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置,选择刚才配置的桥接模式 静态ip设置: 我用的ubuntu24桌…...

人机融合智能 | “人智交互”跨学科新领域
本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲
文章目录 前言第一部分:体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分:体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...

Python Ovito统计金刚石结构数量
大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...

手机平板能效生态设计指令EU 2023/1670标准解读
手机平板能效生态设计指令EU 2023/1670标准解读 以下是针对欧盟《手机和平板电脑生态设计法规》(EU) 2023/1670 的核心解读,综合法规核心要求、最新修正及企业合规要点: 一、法规背景与目标 生效与强制时间 发布于2023年8月31日(OJ公报&…...
上位机开发过程中的设计模式体会(1):工厂方法模式、单例模式和生成器模式
简介 在我的 QT/C 开发工作中,合理运用设计模式极大地提高了代码的可维护性和可扩展性。本文将分享我在实际项目中应用的三种创造型模式:工厂方法模式、单例模式和生成器模式。 1. 工厂模式 (Factory Pattern) 应用场景 在我的 QT 项目中曾经有一个需…...

小智AI+MCP
什么是小智AI和MCP 如果还不清楚的先看往期文章 手搓小智AI聊天机器人 MCP 深度解析:AI 的USB接口 如何使用小智MCP 1.刷支持mcp的小智固件 2.下载官方MCP的示例代码 Github:https://github.com/78/mcp-calculator 安这个步骤执行 其中MCP_ENDPOI…...