PostgreSQL高可用协调器和CLI
项目描述
Patroni:基于ZooKeeper、etcd或Consul的PostgreSQL高可用性模板
您可以在patroni.readthedocs.io找到可搜索且易于导航的此文档版本。
运行PostgreSQL高可用性的方法有很多;有关列表,请参阅PostgreSQL文档。
Patroni是使用Python实现的高可用性(HA)PostgreSQL解决方案的模板。为了最大程度地提高可用性,Patroni支持多种分布式配置存储,如ZooKeeper、etcd、Consul或Kubernetes。对于希望在数据中心或任何其他地方快速部署高可用性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分支出来的。它包含了许多新功能。
有关更多信息,请参阅
Elephants on Automatic: HA Clustered PostgreSQL with Helm,Josh Berkus和Oleksii Kliukin在2017年KubeCon柏林的演讲
PostgreSQL HA with Kubernetes and Patroni,Josh Berkus在2016年KubeCon(视频)的演讲
开发状态
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,您必须决定如何安装它。
有以下几种选择
使用您发行版的包管理器
sudo apt-get install python3-psycopg2 # install psycopg2 module on Debian/Ubuntu sudo yum install python3-psycopg2 # install psycopg2 on RedHat/Fedora/CentOS
在安装 Patroni 时(见下文),在依赖项列表中指定 psycopg、psycopg2 或 psycopg2-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 由于连接池已满而无法访问主副本,则行为将不受欢迎。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于安装软件包的信息。
源分布
构建分布
patroni-4.0.2.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 16c2e5661a47a79f54ccf9672f9e30a141d7ec3ff05b3b92235833ff0600d1ad |
|
MD5 | 308d1c5599e9a42628d20d61790ad991 |
|
BLAKE2b-256 | 7d867435a9cae429466d883da636c06a86143b5c0f2b238434677ee764d72904 |
patroni-4.0.2-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 6acd8b0de5cc3d0fd1ae0c526770ac049c71597fd0f8efcc200a4204e5ae2cb7 |
|
MD5 | ed35a786099826dfd0647ff6294c3c09 |
|
BLAKE2b-256 | 8adb43399a108a6fb092ff758830ad6ce30fecf1c0320111ab6a5c098f24d3f6 |