一、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/manualhttps://www.csudata.com/clup/manual

Logo

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

更多推荐