温馨提示×

Debian PostgreSQL集群搭建方案

小樊
60
2025-06-16 01:09:38
栏目: 云计算

在Debian系统上搭建PostgreSQL集群可以采用多种高可用性解决方案,例如使用Patroni结合etcd、Corosync实现自动故障转移,或者使用Pgpool-II提供负载均衡和故障转移功能。以下是使用Patroni搭建PostgreSQL高可用集群的详细步骤:

准备工作

  • 确保你有三台或以上的服务器,每台服务器都将运行一个PostgreSQL实例。
  • 所有服务器都应该安装相同版本的PostgreSQL。
  • 确保服务器之间可以互相通信,并且防火墙设置允许必要的端口(默认是5432)。

安装依赖

在所有服务器上安装必要的软件包,例如pacemaker、corosync和patroni。

sudo apt-get update sudo apt-get install pacemaker corosync patroni 

配置Corosync

编辑 /etc/corosync/corosync.conf 文件,配置集群成员和网络设置。

totem { version: 2 cluster_name: pg_cluster transport: udpu } nodelist { node { ring0_addr: server1_ip NodeId: 1 } node { ring0_addr: server2_ip NodeId: 2 } node { ring0_addr: server3_ip NodeId: 3 } } quorum { provider: corosync_votequorum } logging { to_logfile: yes logfile: /var/log/corosync/corosync.log to_syslog: yes } 

替换 server1_ipserver2_ipserver3_ip 为实际的服务器IP地址。

启动并启用Corosync服务

sudo systemctl start corosync sudo systemctl enable corosync 

配置Pacemaker

使用 crm 命令行工具配置Pacemaker资源。

sudo crm configure primitive pgsql ocf:heartbeat:pgsql \ params pgctl "/usr/pgsql-12/bin/pg_ctl" \ op monitor interval="30s" 

这里假设你安装的是PostgreSQL 12版本,请根据实际情况调整路径和版本号。

配置Patroni

在每台服务器上创建Patroni配置文件 /etc/patroni.yml

scope: postgres namespace: /db/ name: postgres restapi: listen: 0.0.0.0:8008 connect_address: 127.0.0.1 etcd: host: 127.0.0.1:2379 scheme: http 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 max_wal_senders: 4 wal_keep_segments: 8 hot_standby: on listen: 0.0.0.0:5432 connect_address: 127.0.0.1 data_dir: /var/lib/postgresql/12/main pg_hba: - host replication replicator 127.0.0.1/32 md5 - host all all 0.0.0.0/0 md5 authentication: replication: username: replicator password: your_replicator_password superuser: username: postgres password: your_superuser_password tags: nofailover: false noloadbalance: false clonefrom: false nosync: false 

替换 server1_ipetcd_ip 和密码为实际的值。每个服务器的 name 应该是唯一的,并且 listen 地址应该是该服务器的IP地址。

启动Patroni

在每台服务器上启动Patroni服务。

sudo patroni /etc/patroni.yml 

验证集群状态

使用 crm_mon 命令检查集群状态。

sudo crm_mon -1 

你应该能看到所有的资源(包括PostgreSQL实例)都在运行,并且集群状态是健康的。

请注意,这些步骤提供了一个基本的指南,实际部署时可能需要根据你的具体需求和环境进行调整。

0