在Linux上配置PostgreSQL集群通常涉及使用Patroni、Repmgr或Stolon等工具,这些工具可以帮助你管理PostgreSQL的高可用性和故障转移。以下是使用Patroni进行PostgreSQL集群配置的基本步骤:
首先,确保所有节点上都安装了PostgreSQL和Patroni。你可以使用包管理器来安装它们。
# 在Debian/Ubuntu上
sudo apt-get update
sudo apt-get install postgresql postgresql-contrib patroni
# 在CentOS/RHEL上
sudo yum install postgresql-server postgresql-contrib patroni
在每个节点上配置postgresql.conf和pg_hba.conf文件,确保它们允许集群中的其他节点进行通信。
# postgresql.conf
listen_addresses = '*' # 或者指定具体的IP地址
wal_level = replica
max_wal_senders = 10
wal_keep_segments = 64
hot_standby = on
# pg_hba.conf
host replication replicator <其他节点IP>/32 md5
host all all 0.0.0.0/0 md5
在其中一个节点上初始化Patroni。你需要创建一个Patroni配置文件(例如/etc/patroni.yml),并运行Patroni。
scope: postgres
name: node1 # 节点名称
namespace: /db
restapi:
listen: 0.0.0.0:8008
connect_address: 192.168.1.101 # 当前节点的IP地址
etcd:
host: 192.168.1.101:2379 # etcd集群的地址
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: 10
wal_keep_segments: 64
hot_standby: on
data_dir: /var/lib/postgresql/12/main
pg_hba:
- host replication replicator 192.168.1.101/32 md5
- host all all 0.0.0.0/0 md5
然后运行Patroni:
sudo patroni /etc/patroni.yml
在其他节点上重复步骤3,但需要更改name和connect_address字段。
scope: postgres
name: node2 # 节点名称
namespace: /db
restapi:
listen: 0.0.0.0:8008
connect_address: 192.168.1.102 # 当前节点的IP地址
etcd:
host: 192.168.1.101:2379 # etcd集群的地址
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: 10
wal_keep_segments: 64
hot_standby: on
data_dir: /var/lib/postgresql/12/main
pg_hba:
- host replication replicator 192.168.1.102/32 md5
- host all all 0.0.0.0/0 md5
然后运行Patroni:
sudo patroni /etc/patroni.yml
你可以使用Patroni的REST API来检查集群的状态:
curl http://192.168.1.101:8008/cluster
这将返回集群的详细信息,包括当前的主节点和副本节点。
你可以通过停止主节点上的PostgreSQL服务来测试故障转移:
sudo systemctl stop postgresql
Patroni应该会自动检测到主节点的故障,并将一个副本节点提升为新的主节点。
通过以上步骤,你应该能够在Linux上成功配置一个PostgreSQL集群。根据你的具体需求和环境,可能需要进一步调整配置。