在Ubuntu上部署PostgreSQL集群,通常指的是使用Patroni或Repmgr等工具来实现高可用性和故障转移。以下是使用Patroni进行PostgreSQL集群部署的基本步骤:
sudo apt-get update
sudo apt-get install -y python3-pip git
pip3 install patroni[etcd]
Patroni使用etcd作为分布式配置存储和协调服务。
安装etcd:
sudo apt-get install -y etcd
启动并启用etcd服务:
sudo systemctl start etcd
sudo systemctl enable etcd
验证etcd状态:
sudo etcdctl endpoint status
在每个节点上创建Patroni配置文件/etc/patroni.yml。
scope: postgres
name: master
namespace: /db/
restapi:
listen: 0.0.0.0:8008
connect_address: 192.168.1.101 # 替换为你的IP地址
etcd:
host: 192.168.1.101 # 替换为你的IP地址
port: 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
archive_mode: on
archive_command: 'test ! -f /var/lib/postgresql/9.6/main/archive/%f && cp %p /var/lib/postgresql/9.6/main/archive/%f'
restore_command: 'cp /var/lib/postgresql/9.6/main/archive/%f %p'
wal_keep_segments: 8
max_wal_senders: 4
wal_sender_timeout: 60
synchronous_commit: off
synchronous_standby_names: '*'
authentication:
listen: 0.0.0.0:8009
connection_string: 'user=replicator password=replicator dbname=postgres sslmode=disable'
scope: postgres
name: standby
namespace: /db/
restapi:
listen: 0.0.0.0:8008
connect_address: 192.168.1.102 # 替换为你的IP地址
etcd:
host: 192.168.1.101 # 替换为你的IP地址
port: 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
archive_mode: on
archive_command: 'test ! -f /var/lib/postgresql/9.6/main/archive/%f && cp %p /var/lib/postgresql/9.6/main/archive/%f'
restore_command: 'cp /var/lib/postgresql/9.6/main/archive/%f %p'
wal_keep_segments: 8
max_wal_senders: 4
wal_sender_timeout: 60
synchronous_commit: off
synchronous_standby_names: 'master'
authentication:
listen: 0.0.0.0:8009
connection_string: 'user=replicator password=replicator dbname=postgres sslmode=disable'
scope: postgres
name: standby2
namespace: /db/
restapi:
listen: 0.0.0.0:8008
connect_address: 192.168.1.103 # 替换为你的IP地址
etcd:
host: 192.168.1.101 # 替换为你的IP地址
port: 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
archive_mode: on
archive_command: 'test ! -f /var/lib/postgresql/9.6/main/archive/%f && cp %p /var/lib/postgresql/9.6/main/archive/%f'
restore_command: 'cp /var/lib/postgresql/9.6/main/archive/%f %p'
wal_keep_segments: 8
max_wal_senders: 4
wal_sender_timeout: 60
synchronous_commit: off
synchronous_standby_names: 'master'
authentication:
listen: 0.0.0.0:8009
connection_string: 'user=replicator password=replicator dbname=postgres sslmode=disable'
在主节点上初始化数据库:
sudo systemctl stop postgresql
sudo patroni /etc/patroni.yml --initdb
sudo systemctl start postgresql
在每个节点上启动Patroni服务:
sudo systemctl start patroni
sudo systemctl enable patroni
使用patronictl命令检查集群状态:
sudo patronictl status
通过以上步骤,你可以在Ubuntu上部署一个基本的PostgreSQL集群。根据实际需求,你可能需要进一步调整配置,例如增加更多的备节点、优化性能参数等。