在Ubuntu上搭建PostgreSQL集群,通常指的是设置一个高可用的PostgreSQL集群,例如使用Patroni和Keepalived来实现。以下是一个基本的步骤指南:
在每台服务器上安装PostgreSQL:
sudo apt update
sudo apt install postgresql postgresql-contrib
编辑/etc/postgresql/<version>/main/postgresql.conf文件,确保以下参数设置正确:
listen_addresses = '*' # 允许所有IP连接
wal_level = replica # 设置为replica以支持流复制
max_wal_senders = 10 # 最大WAL发送者数量
wal_keep_segments = 64 # 保留的WAL段数量
编辑/etc/postgresql/<version>/main/pg_hba.conf文件,添加允许复制的条目:
host replication replicator <replica_ip>/32 md5
重启PostgreSQL服务:
sudo systemctl restart postgresql
在主节点上创建一个用于复制的用户:
CREATE USER replicator WITH REPLICATION PASSWORD 'your_password' LOGIN;
在每台服务器上安装Patroni:
sudo apt install python3-pip
pip3 install patroni
创建Patroni配置文件/etc/patroni.yml,示例配置如下:
scope: postgres
name: pg1
namespace: /db
restapi:
listen: 0.0.0.0:8008
connect_address: <master_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_wal_senders: 10
wal_keep_segments: 64
replication:
slot_name: pg1_slot
listen: 0.0.0.0:5432
connect_address: <master_ip>
authentication:
username: replicator
password: your_password
ssl: false
nodes:
- name: pg1
host: <node1_ip>
port: 5432
data_dir: /var/lib/postgresql/12/main
pg_hba:
- host replication replicator <node1_ip>/32 md5
parameters:
hot_standby: on
- name: pg2
host: <node2_ip>
port: 5432
data_dir: /var/lib/postgresql/12/main
pg_hba:
- host replication replicator <node2_ip>/32 md5
parameters:
hot_standby: on
- name: pg3
host: <node3_ip>
port: 5432
data_dir: /var/lib/postgresql/12/main
pg_hba:
- host replication replicator <node3_ip>/32 md5
parameters:
hot_standby: on
在每台服务器上启动Patroni:
sudo patroni /etc/patroni.yml
访问任意一台服务器的Patroni API来验证集群状态:
curl http://<server_ip>:8008/master
通过以上步骤,你可以在Ubuntu上搭建一个基本的PostgreSQL高可用集群。根据具体需求,可能还需要进行更多的配置和优化。