PostgreSQL etcd 集群介绍

PostgreSQL 使用 etcd 集群主要是为了实现高可用性(HA)和自动故障转移,通常与 Patroni 这样的工具配合使用。

架构概述

复制代码
+------------+    +------------+    +------------+
| PostgreSQL |    | PostgreSQL |    | PostgreSQL |
|   Node 1   |    |   Node 2   |   |   Node 3   |
+------------+    +------------+    +------------+
       |                 |                 |
       +-----------------+-----------------+
                         |
              +---------------------+
              |     etcd Cluster    |
              |  (3 or 5 nodes)     |
              +---------------------+

核心组件作用

1. etcd 的角色

  • 分布式配置存储:存储集群状态、成员信息
  • 领导者选举:协调哪个 PostgreSQL 节点是主节点
  • 分布式锁:确保同一时间只有一个主节点
  • 服务发现:客户端可以查询当前的主节点信息

2. PostgreSQL 集群

  • 一主多从:一个主节点(可读写),多个备节点(只读)
  • 流复制:数据从主节点实时同步到备节点
  • 自动故障转移:主节点故障时自动提升备节点为主节点

部署配置示例

1. etcd 集群配置

yaml 复制代码
# etcd 1 配置
name: etcd1
listen-client-urls: http://192.168.1.10:2379
advertise-client-urls: http://192.168.1.10:2379
initial-cluster: etcd1=http://192.168.1.10:2380,etcd2=http://192.168.1.11:2380,etcd3=http://192.168.1.12:2380
initial-cluster-token: pg-cluster
initial-cluster-state: new

2. Patroni 配置

yaml 复制代码
# postgresql1.yml
scope: my-pg-cluster
name: postgresql1

restapi:
  listen: 192.168.1.20:8008
  connect_address: 192.168.1.20:8008

etcd:
  hosts: ["192.168.1.10:2379", "192.168.1.11:2379", "192.168.1.12:2379"]

bootstrap:
  dcs:
    ttl: 30
    loop_wait: 10
    retry_timeout: 10
    maximum_lag_on_failover: 1048576
    postgresql:
      use_pg_rewind: true
      use_slots: true
      parameters:
        wal_level: replica
        hot_standby: "on"
        max_wal_senders: 10
        wal_keep_size: 1GB

postgresql:
  listen: 192.168.1.20:5432
  connect_address: 192.168.1.20:5432
  data_dir: /var/lib/postgresql/15/main
  bin_dir: /usr/lib/postgresql/15/bin
  pgpass: /tmp/pgpass

操作命令

1. 检查 etcd 集群状态

bash 复制代码
# 检查集群成员
etcdctl --endpoints=192.168.1.10:2379 member list

# 检查集群健康状态
etcdctl --endpoints=192.168.1.10:2379,192.168.1.11:2379,192.168.1.12:2379 endpoint health

2. 检查 PostgreSQL 集群状态

bash 复制代码
# 通过 Patroni API 检查
curl http://192.168.1.20:8008
curl http://192.168.1.21:8008
curl http://192.168.1.22:8008

# 或使用 patronictl
patronictl -c /etc/patroni.yml list

3. 手动故障转移

bash 复制代码
# 安全地切换主节点
patronictl -c /etc/patroni.yml switchover

# 重新加载配置
patronictl -c /etc/patroni.yml reload my-pg-cluster

优势特点

优点

  • 高可用性:自动故障转移,服务中断时间短
  • 数据一致性:基于流复制,数据同步可靠
  • 易于管理:Patroni 自动化运维操作
  • 可扩展性:轻松添加新的 PostgreSQL 节点

注意事项

  • etcd 集群规模:建议 3 或 5 个节点(奇数个)
  • 网络要求:节点间低延迟网络通信
  • 资源规划:etcd 需要足够的磁盘 I/O 和内存
  • 监控告警:需要监控两个集群的状态

故障排查

bash 复制代码
# 查看 Patroni 日志
journalctl -u patroni -f

# 检查 etcd 领导状态
etcdctl --endpoints=192.168.1.10:2379 endpoint status

# 验证 PostgreSQL 复制状态
psql -h 192.168.1.20 -c "SELECT * FROM pg_stat_replication;"

这种架构非常适合生产环境,能够提供企业级的高可用 PostgreSQL 服务。

相关推荐
科技小花1 分钟前
数据治理平台架构演进观察:AI原生设计如何重构企业数据管理范式
数据库·重构·架构·数据治理·ai-native·ai原生
航Hang*2 分钟前
Windows Server 配置与管理——第3章:文件系统管理
运维·服务器·windows·vmware
一江寒逸2 分钟前
零基础从入门到精通MySQL(中篇):进阶篇——吃透多表查询、事务核心与高级特性,搞定复杂业务SQL
数据库·sql·mysql
D4c-lovetrain4 分钟前
linux个人心得22 (mysql)
数据库·mysql
lifewange28 分钟前
Linux ps 进程查看命令详解
linux·运维·服务器
功德+n35 分钟前
Linux下安装与配置Docker完整详细步骤
linux·运维·服务器·开发语言·docker·centos
阿里小阿希41 分钟前
CentOS7 PostgreSQL 9.2 升级到 15 完整教程
数据库·postgresql
荒川之神1 小时前
Oracle 数据仓库雪花模型设计(完整实战方案)
数据库·数据仓库·oracle
做个文艺程序员1 小时前
MySQL安全加固十大硬核操作
数据库·mysql·安全