跳转到主要内容

PostgreSQL高可用协调器和CLI

项目描述

Tests Status Coverage Status

Patroni:基于ZooKeeper、etcd或Consul的PostgreSQL高可用性模板

您可以在patroni.readthedocs.io找到可搜索且易于导航的此文档版本。

运行PostgreSQL高可用性的方法有很多;有关列表,请参阅PostgreSQL文档

Patroni是使用Python实现的高可用性(HA)PostgreSQL解决方案的模板。为了最大程度地提高可用性,Patroni支持多种分布式配置存储,如ZooKeeperetcdConsulKubernetes。对于希望在数据中心或任何其他地方快速部署高可用性PostgreSQL的数据库工程师、DBA、DevOps工程师和SRE,Patroni可能很有用。

我们称Patroni为“模板”,因为它远非万能或即插即用的复制系统。它会有自己的局限性。请明智使用。

当前支持的PostgreSQL版本:9.3至16。

注意:Citus用户:从3.0版开始,Patroni与Citus数据库扩展很好地集成了Postgres。有关如何将Patroni高可用性与Citus分布式集群一起使用的更多信息,请参阅Patroni文档中的Citus支持页面

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

Patroni的工作原理

Patroni(以前称为Zalando的Patroni)最初是从Compose的项目Governor分支出来的。它包含了许多新功能。

有关更多信息,请参阅

开发状态

Patroni正在积极开发中,并接受贡献。有关详细信息,请参阅下面的贡献部分。

我们在这里报告新版本的信息这里

社区

有两个地方可以与Patroni社区取得联系:在github上,通过问题和PR,以及在PostgreSQL Slack#patroni频道。如果您正在使用Patroni,或者只是感兴趣,请加入我们。

技术要求/安装

Mac OS的先决条件

要在Mac上安装要求,请运行以下命令

brew install postgresql etcd haproxy libyaml python

Psycopg

psycopg2-2.8 版本开始,psycopg2 的二进制版本将不再默认安装。从源代码安装它需要 C 编译器和 postgres+python 开发包。由于在 Python 世界中无法指定依赖项为 psycopg2 或 psycopg2-binary,您必须决定如何安装它。

有以下几种选择

  1. 使用您发行版的包管理器

sudo apt-get install python3-psycopg2  # install psycopg2 module on Debian/Ubuntu
sudo yum install python3-psycopg2      # install psycopg2 on RedHat/Fedora/CentOS
  1. 在安装 Patroni 时(见下文),在依赖项列表中指定 psycopgpsycopg2psycopg2-binary 之一。

pip 的一般安装

Patroni 可以使用 pip 安装

pip install patroni[dependencies]

其中依赖项可以是空的,也可以由以下一个或多个组成

etcd 或 etcd3

使用 Etcd 作为 DCS 的 python-etcd 模块

consul

使用 Consul 作为 DCS 的 python-consul 模块

zookeeper

使用 Zookeeper 作为 DCS 的 kazoo 模块

exhibitor

使用 Exhibitor 作为 DCS 的 kazoo 模块(与 Zookeeper 相同的依赖项)

kubernetes

使用 Kubernetes 作为 Patroni 中的 DCS 的 kubernetes 模块

raft

使用 python Raft 实现作为 DCS 的 pysyncobj 模块

aws

使用 AWS 回调的 boto3

all

所有上述内容(除 psycopg 家族外)

psycopg3

psycopg[binary]>=3.0.0 模块

psycopg2

psycopg2>=2.5.4 模块

psycopg2-binary

psycopg2-binary 模块

例如,安装 Patroni 与 psycopg3、Etcd 作为 DCS 的依赖项以及 AWS 回调的命令是

pip install patroni[psycopg3,etcd3,aws]

请注意,在副本创建或自定义引导脚本(例如 WAL-E)中调用的外部工具应独立于 Patroni 安装。

运行和配置

要从不同的终端开始,请执行以下操作

> etcd --data-dir=data/etcd --enable-v2=true
> ./patroni.py postgres0.yml
> ./patroni.py postgres1.yml

然后您将看到高可用性集群启动。测试 YAML 文件中的不同设置,以查看集群行为如何变化。杀死一些组件,以查看系统行为。

添加更多 postgres*.yml 文件以创建更大的集群。

Patroni 提供了 HAProxy 配置,该配置将为您的应用程序提供一个连接到集群主节点的单一端点。要配置,请运行

> haproxy -f haproxy.cfg
> psql --host 127.0.0.1 --port 5000 postgres

YAML配置

有关 etcd、consul 和 ZooKeeper 设置的详细信息,请参阅 此处。例如,请参阅 postgres0.yml

环境配置

有关通过环境变量配置(覆盖)设置的详细信息,请参阅 此处

复制选择

Patroni 使用 Postgres 的流式复制,默认情况下是异步的。Patroni 的异步复制配置允许设置 maximum_lag_on_failover。此设置确保如果从属副本落后于主副本超过一定字节数,则不会发生故障转移。根据业务需求,应增加或减少此设置。还可以使用同步复制以获得更好的持久性保证。有关详细信息,请参阅 复制模式文档

应用程序不应使用超级用户

从应用程序连接时,始终使用非超级用户。Patroni 需要访问数据库才能正常工作。通过从应用程序使用超级用户,您可以使用 superuser_reserved_connections 设置使用整个连接池,包括为超级用户保留的连接。如果 Patroni 由于连接池已满而无法访问主副本,则行为将不受欢迎。

项目详情


发布历史 发布通知 | RSS 源

下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于安装软件包的信息。

源分布

patroni-4.0.2.tar.gz (429.1 kB 查看哈希值)

上传时间

构建分布

patroni-4.0.2-py3-none-any.whl (359.8 kB 查看哈希值)

上传时间 Python 3

由以下组织支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面