PostgreSQL Patroni 高可用集群部署(Linux)
一、Patroni 是什么
Patroni 是一款开源、轻量级、原生适配 PostgreSQL 的企业级高可用集群管理组件,采用 Python 开发,专为 PostgreSQL 设计自动主从切换、集群元数据管理、节点健康检测、故障自愈的一体化高可用管控框架。
它解决了原生 PostgreSQL 无自带自动故障转移、人工切换繁琐、传统主从架构单点故障风险高的痛点,是目前生产环境 PostgreSQL 高可用架构的工业级标准方案。
二、核心定位
Patroni 并非替代 PostgreSQL,而是外挂式集群编排管控层:
- 不侵入 PostgreSQL 内核;
- 接管集群角色选举、健康探测、故障判定、自动主从切换;
- 依赖 etcd / Consul / ZooKeeper 作为分布式配置中心与选种元数据存储(生产首选 etcd);
- 实现 PostgreSQL 秒级故障自动转移、无人工干预自愈。
三、部署Patroni
| IP | 组件 | 流复制用户 | 备注 |
|---|---|---|---|
| 10.197.166.7 | PostgreSQL 13.3、Patroni、Etcd | replicator/secret | 主节点 |
| 10.197.166.21 | PostgreSQL 13.0、Patroni、Etcd | replicator/secret | 备节点1 |
| 10.197.166.61 | PostgreSQL 13.0、Patroni、Etcd | replicator/secret | 备节点2 |
我这里以及搭建好了流复制集群和安装好了Etcd,现在我们进入Patroni的部署,在这之前我们要
1、安装
#安装Partroni(三台主机都要安装)
pip3 install patroni[etcd] -i https://mirrors.aliyun.com/pypi/simple/
pip3 install psycopg2-binary -i https://mirrors.aliyun.com/pypi/simple/
pip3 install patroni -i https://mirrors.aliyun.com/pypi/simple/
查看版本,确认是否安装成功
patroni --version
返回patroni 4.1.0
其他两台都要安装执行
2、patroni文件配置:
主机:10.197.166.7
创建patroni-master目录,进入该目录创建文件pg_mypg.yml并写入内容:
mkdir /opt/patroni-master
cd /opt/patroni-master/
cat >/opt/patroni-master/pg_mypg.yml <<EOF
scope: pgsql
namespace: /service/
name: pg1
restapi:
listen: 0.0.0.0:8000
connect_address: 10.197.166.7:8000
etcd:
host: 10.197.166.7:2379
bootstrap:
dcs:
ttl: 30
loop_wait: 10
retry_timeout: 10
maximum_lag_on_failover: 1048576
master_start_timeout: 300
synchronous_mode: false
postgresql:
use_pg_rewind: true
use_slots: true
parameters:
listen_addresses: "*"
port: 5432
wal_level: replica
hot_standby: "on"
wal_keep_segments: 1000
max_wal_senders: 10
max_replication_slots: 10
wal_log_hints: "on"
initdb:
- encoding: UTF8
- locale: C
- data-checksums
pg_hba:
- host replication repl 0.0.0.0/0 md5
- host all all 0.0.0.0/0 md5
postgresql:
listen: 0.0.0.0:5432
connect_address: 10.197.166.7:5432
data_dir: /home/postgres/pgdata
bin_dir: /usr/local/pgsql/bin
pgpass: /home/postgres/.pgpass
authentication:
replication:
username: replicator
password: "secret"
superuser:
username: postgres
password: "postgres"
tags:
nofailover: false
noloadbalance: false
clonefrom: false
nosync: false
EOF
递归修改 /opt/patroni-master 目录及其所有子文件、子目录的属主与属组为 postgres 用户,确保 Patroni 与 PostgreSQL 进程拥有对该目录的完整读写执行权限,避免因权限不足导致服务启动失败、配置无法加载、日志无法写入等生产级故障。,后进入postgres用户
chown -R postgres. /opt/patroni-master
su - postgres
主机:10.197.166.21和主机:10.197.166.21
和上面配置一样,不过需要修改的是pg_mypg.yml文件的name分别改为pg2和pg3
主机ip也对应的修改
四、启动-状态查询
以后台守护进程方式启动 Patroni 高可用管控服务,加载指定的 PostgreSQL 集群配置文件,并将标准输出日志 + 错误输出日志全部重定向至日志文件持久化存储,确保 Patroni 进程脱离终端会话持续运行
patroni /opt/patroni-master/pg_mypg.yml > /opt/patroni-master/pg_mypg.log 2>&1 &
三台都要启动,出现错误可以查看日志解决
tail -f /opt/patroni-master/pg_mypg.log
查看Patroni集群状态
patronictl -c /opt/patroni-master/pg_mypg.yml list

获取Patroni集群的详细状态信息
curl -s "http://10.197.166.7:8000/cluster" | jq .

csudata.com https://www.csudata.com/clup/manual
https://www.csudata.com/clup/manual
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)