在Ubuntu上部署PostgreSQL集群可以通过多种方式实现,其中一种常见的方法是使用Patroni和Pacemaker来管理高可用性和故障转移。以下是一个基本的步骤指南:
在所有节点上执行以下命令来安装必要的软件包:
sudo apt update
sudo apt install -y postgresql-13 postgresql-13-pgdg pacemaker patroni
在每个节点上编辑/etc/postgresql/13/main/postgresql.conf文件,确保以下参数设置正确:
listen_addresses = '*' # 或者指定具体的IP地址
wal_level = replica
max_wal_senders = 10
wal_keep_segments = 64
hot_standby = on
编辑/etc/postgresql/13/main/pg_hba.conf文件,添加允许从其他节点连接的条目:
host replication replicator <其他节点的IP>/32 md5
host all all 0.0.0.0/0 md5
在主节点上初始化数据库集群:
sudo systemctl stop postgresql
sudo pg_createcluster 13 main --start --no-password
sudo systemctl start postgresql
在每个节点上创建Patroni配置文件/etc/patroni.yml,以下是一个示例配置:
scope: postgresql
name: master
namespace: /db
restapi:
listen: 0.0.0.0:8008
connect_address: <主节点的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: replica
max_connections: 100
hot_standby: on
max_wal_senders: 10
wal_keep_segments: 64
synchronous_commit: off
synchronous_standby_names: '*'
primary_conninfo:
dbname: postgres
user: replicator
password: <复制用户的密码>
host: <当前节点的IP>
standby_conninfo:
dbname: postgres
user: replicator
password: <复制用户的密码>
host: <主节点的IP>
在备用节点上,将scope改为standby,并将name改为备用节点的名称。
在主节点上启动Patroni:
sudo patroni /etc/patroni.yml
在备用节点上启动Patroni:
sudo patroni /etc/patroni.yml
你可以通过访问主节点的Patroni REST API来验证集群状态:
curl http://<主节点的IP>:8008/master
如果一切正常,你应该会看到主节点的信息。
通过以上步骤,你应该能够在Ubuntu上成功部署一个PostgreSQL集群,并实现高可用性和故障转移。