↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

Patroni 4.1.5

Patroni 4.1.5 中文文档

Patroni PostgreSQL 高可用模板,v4.1.5 中文文档

警告

在内存受限的系统上运行 Python 3.11+ 版本的 Patroni

如果系统设置了严格的内存限制,例如启用 PostgreSQL 推荐的 vm.overcommit_memory=2,并使用 Python 3.11 或更高版本,可能出现以下异常:

  • Patroni 表面上保持健康;
  • PostgreSQL 继续运行;
  • Patroni REST API 失去响应;
  • 操作系统仍显示 Patroni 正在监听 REST API 端口;
  • Patroni 日志看似正常,但可能短暂出现 Exception ignored in thread started by: <object repr() failed>、MemoryError;
  • 内核日志可能出现 not enough memory for the allocation 等消息。

该行为源于 Python 3.11+ 的缺陷 :在严格的内存约束下,如果可用内存不足,启动新线程可能会无限期挂起。

推荐方案

Patroni 4.1.1+ 与 4.0.8+ 会在启动早期、系统尚未承受内存压力时创建所需线程,从而降低该问题的影响。

其他建议(Linux、glibc)

使用 vm.overcommit_memory=2 时,建议通过以下环境变量启动 Patroni:

  • MALLOC_ARENA_MAX=1:减少 glibc 为多线程应用分配的虚拟内存;
  • PG_MALLOC_ARENA_MAX=:为 Patroni 启动的 PostgreSQL 进程清除 MALLOC_ARENA_MAX。

还可以调整以下 Patroni 参数:

  • thread_stack_size:Patroni 线程栈大小。调低可减少 Patroni 的内存用量;默认值为 512kB。仅在线程栈相关崩溃时才建议调高;
  • thread_pool_size:异步任务以及领导者竞选或故障安全检查期间 REST API 通信所用的线程池大小,默认值 5 足以满足三节点集群;
  • restapi.thread_pool_size:处理 REST API 请求的线程池大小,默认值 5。涉及 SQL 查询的请求会因为共用一个数据库连接而实际串行执行,因此调高该值通常没有收益。

Patroni 是一个基于 Python 的 PostgreSQL 高可用(HA)解决方案模板。为了最大程度地兼容各种环境,Patroni 支持多种分布式配置存储后端,包括 ZooKeeper 、etcd 、Consul 和 Kubernetes 。希望在数据中心或任何其他环境中快速部署 PostgreSQL 高可用的数据库工程师、DBA、DevOps 工程师和 SRE 们,都能从中受益。

我们将 Patroni 称为"模板",是因为它远非一套放之四海而皆准的即插即用复制系统,使用时需要结合实际情况量力而行。实现 PostgreSQL 高可用的方案有很多,详情可参阅 PostgreSQL 文档 。

目前支持的 PostgreSQL 版本:9.3 至 18。

Citus 用户注意:从 3.0 版本起,Patroni 已与 PostgreSQL 扩展 Citus 深度集成。如需了解如何将 Patroni 高可用与 Citus 分布式集群结合使用,请参阅文档中的 Citus 支持页面 。

Kubernetes 用户注意:Patroni 可原生运行在 Kubernetes 之上。请参阅文档中的 Kubernetes 章节。

image

Patroni 简介、快速上手以及高可用核心概念。

在各支持平台上安装和升级 Patroni 的详细说明。

Patroni 配置模型、优先级规则与验证工具。

从库镜像、引导及自定义从库创建工作流。

Patroni 管理的异步与同步复制模式。

备用集群的搭建、行为及从远程主库复制的说明。

Patroni 集群的 watchdog 集成与隔离(fencing)注意事项。

Patroni 与 Citus 协调节点及工作节点组的集成详情。

将现有 PostgreSQL 数据迁移并转换为 Patroni 集群的操作步骤。

Patroni 与外部备份及编排工具的集成方法。

关于 Patroni 运维与故障排查的常见问题解答。

Patroni 各版本发布说明与变更历史。

贡献工作流程、支持渠道与开发指南。

来源与许可

文档取自 pig.center · 上游文档

版本
4.1.5
许可
MIT
来源修订
d7e5839711c06b72e00f8d20abb0792c8ee0e1bcd872812599bc9769f4d6e932
译文修订
d7e5839711c06b72e00f8d20abb0792c8ee0e1bcd872812599bc9769f4d6e932
原始 Markdown