在CentOS上搭建PostgreSQL集群,通常指的是使用Patroni来管理PostgreSQL的高可用性。Patroni是一个用于管理PostgreSQL、MariaDB和MongoDB高可用性的工具,它可以与Pacemaker和Corosync一起工作,提供故障转移和自动恢复功能。
以下是在CentOS上使用Patroni搭建PostgreSQL集群的基本步骤:
准备工作:
安装依赖:
在所有服务器上安装必要的软件包,例如pacemaker
、corosync
和patroni
。
sudo yum install -y 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_ip
、server2_ip
和server3_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: postgresql
name: postgresql@server1_ip
namespace: /db
restapi:
listen: 0.0.0.0:8008
connect_address: server1_ip
etcd:
host: etcd_ip
port: 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: hot_standby
postgresql:
listen: 0.0.0.0:5432
connect_address: 127.0.0.1
data_dir: /var/lib/postgresql/data
pg_hba:
- host replication replicator 0.0.0.0/0 md5
- host all all 0.0.0.0/0 md5
authentication:
replication:
username: replicator
password: replicator_password
resources:
- name: postgresql
type: PostgreSQL
roles:
- standby
- master
- monitor
- clone
- manage
- notify
替换server1_ip
、etcd_ip
和密码为实际的值。每个服务器的name
应该是唯一的,并且listen
地址应该是该服务器的IP地址。
启动Patroni: 在每台服务器上启动Patroni服务。
sudo systemctl start patroni
sudo systemctl enable patroni
验证集群状态:
使用crm_mon
命令检查集群状态。
sudo crm_mon -1
你应该能看到所有的资源(包括PostgreSQL实例)都在运行,并且集群状态是健康的。
请注意,这些步骤提供了一个基本的指南,实际部署时可能需要根据你的具体需求和环境进行调整。在生产环境中部署之前,建议进行充分的测试。