如何在 Debian 11 服务器上部署并优化高可用性 PostgreSQL 集群,确保跨地域数据同步

在现代分布式系统架构中,关系型数据库的高可用性(High Availability)与跨地域数据同步是关键能力。A5数据以 Debian 11(Bullseye)为操作系统,以 PostgreSQL 14/15 为数据库核心,通过开源组件构建一个高可用性、支持跨地域同步的 PostgreSQL 集群,并在此基础上深入讲解架构设计、硬件选型、配置细节、自动故障切换、监控与性能优化。

本文适用于:

  • 数据库管理员(DBA)
  • 系统运维工程师
  • 架构师

部署集群核心目标:

  1. 主从复制(物理流复制 + 自动故障切换)
  2. 自动高可用性管理(自动选主、容错)
  3. 跨地域同步(跨多个数据中心)
  4. 性能与网络优化
  5. 集群监控与维护

第一部分 系统与硬件选型

一、操作系统

项目 A5IDC建议版本
操作系统 Debian 11 "Bullseye"
内核 5.10 及以上
文件系统 XFS / EXT4(XFS 在大文件写入更稳定)
内核参数(sysctl) 调优见下文

二、PostgreSQL 版本

选择 PostgreSQL 14 或 PostgreSQL 15,二者在逻辑复制与性能上都有显著提升。本文以 PostgreSQL 15 为主,但示例兼容 PostgreSQL 14。

三、香港服务器www.a5idc.com硬件建议

建议分别在各地域部署至少 3 节点(主/备用/仲裁 / 管理节点)。A5数据推荐配置如下:

节点类型 CPU 内存 存储 网络
主节点 / 备用 Intel Xeon Silver 4214 / AMD EPYC 7252 32GB 1--2TB NVMe 10Gbps
ETCD / HA 管理节点 4 核 8GB 100GB SSD 1--10Gbps
监控节点 4--8 核 16GB 200GB SSD 1--10Gbps

NVMe 存储能够显著提高写性能,尤其在高负载下流复制 WAL 传输。


第二部分 架构方案

本文采用的高可用性架构如下:

复制代码
           Region A                         Region B
   ┌─────────────────┐             ┌─────────────────┐
   |  PostgreSQL A   | <======= WAN =======> | PostgreSQL B   |
   |  Primary/Replica |             |  Replica       |
   └───────┬─────────┘             └───────┬─────────┘
           │                                 │
           └─────────── Patroni Cluster ─────┘
                       │     │     │
                       ETCD/Consul/RAFT 集群
  • Patroni:自动高可用管理,健康检测、自动选主
  • ETCD / Consul / RAFT:分布式一致性存储
  • 物理流复制:跨地域同步主节点 WAL 日志
  • 逻辑复制(可选):针对不同版本或表级复制

第三部分 环境准备

一、安装 PostgreSQL

  1. 添加 PostgreSQL APT 源:
bash 复制代码
echo "deb http://apt.postgresql.org/pub/repos/apt/ bullseye-pgdg main" |
  sudo tee /etc/apt/sources.list.d/pgdg.list
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc |
  sudo apt-key add -
sudo apt update
  1. 安装 PostgreSQL 15:
bash 复制代码
sudo apt install -y postgresql-15 postgresql-client-15

二、设置内核参数(适用于所有节点)

/etc/sysctl.d/99-postgresql.conf 添加:

conf 复制代码
# 增强网络连接
net.core.somaxconn = 1024
net.ipv4.tcp_tw_reuse = 1
net.ipv4.ip_forward = 1
# 内存与IO设置
vm.swappiness = 10
vm.dirty_ratio = 15
vm.dirty_background_ratio = 5

加载:

bash 复制代码
sudo sysctl -p /etc/sysctl.d/99-postgresql.conf

三、关闭防火墙或添加服务访问规则

示例开放 PostgreSQL 默认端口与 Patroni 管理端口:

bash 复制代码
sudo ufw allow 5432/tcp
sudo ufw allow 8008/tcp
sudo ufw allow 2379/tcp

第四部分 配置 PostgreSQL 流复制 + Patroni

一、PostgreSQL 配置

在主节点和备节点上编辑 /etc/postgresql/15/main/postgresql.conf

conf 复制代码
listen_addresses = '*'
wal_level = replica
max_wal_senders = 10
wal_keep_size = 1024
archive_mode = on
archive_command = 'cd .'
synchronous_commit = remote_apply
synchronous_standby_names = '*'

参数说明:

参数 作用
wal_level 决定 WAL 日志保留级别
max_wal_senders 最大 WAL 发送进程数
wal_keep_size 保留 WAL 大小(MB)
synchronous_commit 指定同步提交级别
synchronous_standby_names 定义同步备用节点

二、创建复制用户

bash 复制代码
sudo -u postgres psql -c \
  "CREATE ROLE replicator WITH REPLICATION LOGIN ENCRYPTED PASSWORD 'Rep1!cP@ss';"

三、配置 pg_hba.conf

在主节点与备用节点加入:

复制代码
# 允许复制连接
host replication replicator 0.0.0.0/0 md5
host all all 0.0.0.0/0 md5

重启 PostgreSQL:

bash 复制代码
sudo systemctl restart postgresql

第五部分 部署 Patroni + etcd

一、安装 Patroni 与 etcd

在所有 HA 管理节点上:

bash 复制代码
sudo apt install -y python3-pip
pip3 install patroni[etcd] psycopg2-binary

安装 etcd:

bash 复制代码
wget https://github.com/etcd-io/etcd/releases/download/v3.5.9/etcd-v3.5.9-linux-amd64.tar.gz
tar xzf etcd-v3*.tar.gz
sudo mv etcd-v3.5.9-linux-amd64/etcd* /usr/local/bin/

二、配置 etcd

在每个 etcd 节点创建 /etc/default/etcd

bash 复制代码
ETCD_NAME="node1"
ETCD_DATA_DIR="/var/lib/etcd"
ETCD_INITIAL_CLUSTER="node1=http://10.0.0.1:2380,node2=http://10.0.0.2:2380"
ETCD_INITIAL_CLUSTER_STATE="new"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-01"
ETCD_LISTEN_PEER_URLS="http://10.0.0.1:2380"
ETCD_LISTEN_CLIENT_URLS="http://10.0.0.1:2379"
ETCD_ADVERTISE_CLIENT_URLS="http://10.0.0.1:2379"

启动服务:

bash 复制代码
sudo systemctl enable etcd
sudo systemctl start etcd

三、Patroni 配置

在每个 PostgreSQL 节点(含主/备)创建 /etc/patroni.yml

yaml 复制代码
scope: postgres-ha
namespace: /db/
name: node1

restapi:
  listen: 0.0.0.0:8008
  connect_address: 10.0.0.1:8008

etcd:
  host: 10.0.0.1:2379,10.0.0.2:2379

bootstrap:
  dcs:
    ttl: 30
    loop_wait: 10
    retry_timeout: 10
    maximum_lag_on_failover: 1048576
  initdb:
    - encoding: UTF8
    - data-checksums
  pg_hba:
    - host replication replicator 0.0.0.0/0 md5
    - host all all 0.0.0.0/0 md5

postgresql:
  listen: 10.0.0.1:5432
  connect_address: 10.0.0.1:5432
  data_dir: /var/lib/postgresql/15/main
  bin_dir: /usr/lib/postgresql/15/bin
  authentication:
    superuser_username: postgres
    superuser_password: supersecret
    replication_username: replicator
    replication_password: Rep1!cP@ss

启动 Patroni:

bash 复制代码
patroni /etc/patroni.yml

通过访问 http://<node-ip>:8008 可查看状态。


第六部分 跨地域复制细节

一、物理流复制 + 延迟容忍

如果地域延迟较高,则 synchronous_commit = remote_apply 可能影响主库写性能。可根据需求选择:

参数值 行为
local 仅本地写入确认
remote_write 等待 WAL 到远程节点
remote_apply 等待远程节点应用 WAL(最安全但最慢)

建议在跨地域复制中使用 remote_write,并监控延迟。

二、逻辑复制(表级粒度)

逻辑复制适用于需要跨版本或跨表同步:

  1. 在发布端:
sql 复制代码
CREATE PUBLICATION my_pub FOR ALL TABLES;
  1. 在订阅端:
sql 复制代码
CREATE SUBSCRIPTION my_sub
  CONNECTION 'host=10.0.1.1 port=5432 dbname=mydb user=replicator password=Rep1!cP@ss'
  PUBLICATION my_pub;

第七部分 性能与监控

一、性能调优参数示例

在 PostgreSQL 配置中加入:

conf 复制代码
shared_buffers = 8GB
effective_cache_size = 24GB
work_mem = 50MB
maintenance_work_mem = 2GB
checkpoint_completion_target = 0.9
wal_buffers = 16MB
max_worker_processes = 16

参数解释请参考 PostgreSQL 配置指南。

二、监控方案

建议使用以下组合:

工具 用途
Prometheus 指标采集
Grafana 可视化仪表盘
pg_stat_activity / pg_stat_replication 内置监控视图
Patroni API HA 状态监控

示例 Grafana 指标:

bash 复制代码
# Prometheus PostgreSQL Exporter
docker run -d \
  --name pg-exporter \
  -p 9187:9187 \
  -e DATA_SOURCE_URI="postgresql://postgres:supersecret@localhost:5432/postgres?sslmode=disable" \
  wrouesnel/postgres_exporter

第八部分 故障演练与恢复

一、主节点故障模拟

  1. 停止主节点数据库:
bash 复制代码
sudo systemctl stop postgresql
  1. Patroni 会自动触发故障切换,选取健康备用。

二、故障恢复

恢复故障节点:

bash 复制代码
sudo rm -rf /var/lib/postgresql/15/main
patronictl reinit node1
patronictl restart node1

结语

通过本文配置:

  • Debian 11 + PostgreSQL 15
  • Patroni+etcd 高可用管理
  • 跨地域物理复制 + 逻辑复制支持
  • 自动故障切换与监控体系

可以构建一个稳定可靠的、具备跨地域容灾能力的 PostgreSQL 集群。

如需进一步扩展:

  • 引入备份策略(pgBackRest)
  • 更细粒度权限与审计
  • 跨云平台复制策略优化

欢迎按需调整参数以满足业务峰值与可用性 SLA 要求。

相关推荐
草莓熊Lotso12 小时前
脉脉独家【AI创作者xAMA】| 多维价值与深远影响
运维·服务器·数据库·人工智能·脉脉
liulilittle12 小时前
libxdp: No bpffs found at /sys/fs/bpf
linux·运维·服务器·开发语言·c++
liulilittle12 小时前
AF_XDP开发环境(Ubuntu24.04.3)
linux·运维·服务器·ubuntu
学烹饪的小胡桃13 小时前
WGCAT工单系统操作指南,如何将工单指派给多人处理
linux·运维·服务器·网络·工单系统
AI科技星13 小时前
统一场论变化的引力场产生电磁场推导与物理诠释
服务器·人工智能·科技·线性代数·算法·重构·生活
liulilittle13 小时前
Windows WSL部署Ubuntu子系统到其它磁盘上
linux·运维·服务器·网络·windows·ubuntu·wsl
Ydwlcloud13 小时前
2026年1月云服务器优惠活动全解析:聪明选云的新策略
大数据·服务器·人工智能·云计算
魏波.13 小时前
华为云(Huawei Cloud)ECS(弹性云服务器)的实例规格名称规范
服务器·华为云
Ydwlcloud13 小时前
2026年1月华为云国际促销活动期间如何省钱?
大数据·服务器·人工智能·华为云·云计算
郝学胜-神的一滴13 小时前
Linux线程使用注意事项:骈文技术指南
linux·服务器·开发语言·数据结构·c++·程序人生