在Ubuntu上实现PostgreSQL集群部署,可以使用Patroni和Pacemaker来管理高可用性和故障转移。以下是一个基本的步骤指南:
在所有节点上执行以下命令来安装Patroni和Pacemaker:
sudo apt-get update
sudo apt-get install -y pacemaker patroni postgresql-12-pgpool
在每个节点上编辑/etc/postgresql/12/main/postgresql.conf文件,确保以下参数设置正确:
listen_addresses = '*' # 或者指定具体的IP地址
wal_level = replica
max_wal_senders = 10
wal_keep_segments = 64
hot_standby = on
编辑/etc/postgresql/12/main/pg_hba.conf文件,添加以下行以允许从其他节点进行连接:
host replication replicator <其他节点的IP>/32 md5
host all all 0.0.0.0/0 md5
重启PostgreSQL服务:
sudo systemctl restart postgresql
在每个节点上创建一个Patroni配置文件,例如/etc/patroni.yml。以下是一个示例配置:
scope: postgres
name: node1 # 每个节点的名称必须唯一
namespace: /db
restapi:
listen: 0.0.0.0:8008
connect_address: <当前节点的IP>
etcd:
host: <etcd服务器的IP>:2379
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_connections: 100
hot_standby: on
synchronous_commit: off
synchronous_standby_names: 'node2,node3'
primary_conninfo:
dbname: 'postgres'
user: 'replicator'
password: 'password'
host: <当前节点的IP>
standby_conninfo:
dbname: 'postgres'
user: 'replicator'
password: 'password'
host: <其他节点的IP>
在每个节点上运行Patroni:
sudo patroni /etc/patroni.yml
在其中一个节点上安装并配置Pacemaker:
sudo apt-get install -y pcs
sudo pcs status
创建集群:
sudo pcs cluster auth node1 node2 node3
sudo pcs cluster setup --name pg_cluster node1 node2 node3
sudo pcs cluster start --all
配置资源代理:
sudo pcs resource create pgsql ocf:heartbeat:pgsql \
op monitor interval=30s \
params pgctl="/usr/lib/postgresql/12/bin/pg_ctl" \
op start timeout=60s \
op stop timeout=60s \
op promote timeout=60s \
op demote timeout=60s \
op monitor timeout=30s
将Patroni资源添加到集群中:
sudo pcs resource create patroni ocf:heartbeat:patroni \
params config="/etc/patroni.yml" \
op monitor interval=30s
将Patroni资源克隆到其他节点:
sudo pcs resource clone patroni node2
sudo pcs resource clone patroni node3
检查集群状态:
sudo pcs status
你应该看到所有节点都在线,并且PostgreSQL资源正在运行。
通过以上步骤,你可以在Ubuntu上实现一个基本的PostgreSQL集群部署。Patroni和Pacemaker将帮助你管理高可用性和故障转移。根据你的具体需求,可能需要进一步调整配置。