在Debian系统上搭建PostgreSQL集群,通常指的是使用Patroni和Pacemaker来管理高可用性的PostgreSQL集群。以下是搭建PostgreSQL集群的基本步骤:
准备工作:
安装必要的软件包: 在所有节点上安装PostgreSQL、Patroni和Pacemaker。可以使用以下命令:
sudo apt-get update
sudo apt-get install -y postgresql-12 postgresql-12-pgdg pacemaker patroni
请根据你的需求选择合适的PostgreSQL版本,并替换postgresql-12和postgresql-12-pgdg。
配置PostgreSQL:
在每个节点上编辑/etc/postgresql/<version>/main/postgresql.conf文件,确保以下参数被正确设置:
listen_addresses = '*' # 或者指定IP地址
wal_level = replica
max_wal_senders = 4
wal_keep_segments = 64
hot_standby = on
同时,编辑/etc/postgresql/<version>/main/pg_hba.conf文件,添加允许其他节点连接的条目:
host replication replicator <其他节点IP>/32 md5
host all all 0.0.0.0/0 md5
替换<其他节点IP>为实际的IP地址。
初始化数据库集群: 在主节点上初始化数据库集群:
sudo pg_createcluster 12 main --start --pgdata=/var/lib/postgresql/12/main
这将创建一个新的PostgreSQL集群,并启动服务。
配置Patroni:
在每个节点上创建Patroni配置文件/etc/patroni.yml,并确保配置指向正确的PostgreSQL实例和节点信息。一个基本的配置文件示例如下:
scope: postgres
name: <节点名称>
namespace: /db/
restapi:
listen: 0.0.0.0:8008
connect_address: <节点IP>
etcd:
host: <etcd服务器IP>: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_connections: 100
hot_standby: on
postgresql:
listen: 0.0.0.0:5432
connect_address: 127.0.0.1
data_dir: /var/lib/postgresql/12/main
pg_hba:
- host replication replicator <其他节点IP>/32 md5
- host all all 0.0.0.0/0 md5
authentication:
replication:
username: replicator
password: <复制用户密码>
superuser:
username: postgres
password: <超级用户密码>
替换<节点名称>、<节点IP>、<etcd服务器IP>以及其他占位符为实际的值。
启动Patroni: 在每个节点上启动Patroni服务:
sudo systemctl enable patroni
sudo systemctl start patroni
验证集群状态: 使用Patroni提供的API来检查集群状态:
curl http://<节点IP>:8008/postgres
这将返回集群的状态信息,包括当前的主节点和副本节点。
测试故障转移: 你可以通过停止主节点上的PostgreSQL服务来测试故障转移:
sudo systemctl stop postgresql
观察其他节点是否能够自动选举出新的主节点,并且应用程序是否能够无缝切换到新的主节点。
请注意,这些步骤提供了一个基本的指南,实际部署时可能需要根据你的具体环境和需求进行调整。在生产环境中部署之前,建议详细阅读Patroni和Pacemaker的官方文档,并进行充分的测试。