在CentOS上设计PostgreSQL的高可用架构,可以采用多种策略和技术。以下是一个基本的设计方案,使用了Patroni和Keepalived来实现高可用性:
在所有服务器上安装相同版本的PostgreSQL。
sudo yum install postgresql-server
sudo systemctl start postgresql
sudo systemctl enable postgresql
编辑/var/lib/pgsql/data/postgresql.conf
和/var/lib/pgsql/data/pg_hba.conf
文件,确保配置适合你的环境。
Patroni是一个用于管理PostgreSQL高可用性的工具。
sudo yum install python3-pip
sudo pip3 install patroni
在每台服务器上创建一个Patroni配置文件(例如/etc/patroni.yml
),内容如下:
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.102 # etcd服务器的IP
port: 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
synchronous_commit: off
synchronous_standby_names: '*'
archive_mode: on
archive_command: 'cp %p /var/lib/pgsql/archive/%f'
wal_keep_segments: 64
max_wal_senders: 4
wal_sender_timeout: 60
max_replication_slots: 4
track_commit_timestamp: on
hot_standby_feedback: on
synchronous_commit: remote_write
synchronous_standby_names: 'node2,node3'
nodes:
- name: node1
host: 192.168.1.101
data_dir: /var/lib/pgsql/data
pg_hba:
- host replication replicator 192.168.1.0/24 md5
- host all all 192.168.1.0/24 md5
parameters:
listen_addresses: '*'
hot_standby: on
- name: node2
host: 192.168.1.102
data_dir: /var/lib/pgsql/data
pg_hba:
- host replication replicator 192.168.1.0/24 md5
- host all all 192.168.1.0/24 md5
parameters:
listen_addresses: '*'
hot_standby: on
- name: node3
host: 192.168.1.103
data_dir: /var/lib/pgsql/data
pg_hba:
- host replication replicator 192.168.1.0/24 md5
- host all all 192.168.1.0/24 md5
parameters:
listen_addresses: '*'
hot_standby: on
Keepalived用于提供虚拟IP地址,确保在主节点故障时,虚拟IP可以自动切换到备用节点。
sudo yum install keepalived
在每台服务器上创建一个Keepalived配置文件(例如/etc/keepalived/keepalived.conf
),内容如下:
vrrp_instance VI_1 {
state MASTER # 主节点设置为MASTER,备用节点设置为BACKUP
interface eth0 # 替换为实际的网络接口
virtual_router_id 51
priority 100 # 主节点优先级高于备用节点
advert_int 1
authentication {
auth_type PASS
auth_pass 42 # 替换为你选择的密码
}
virtual_ipaddress {
192.168.1.100 # 替换为你选择的虚拟IP地址
}
}
在所有节点上启动Patroni和Keepalived服务。
sudo systemctl start patroni
sudo systemctl enable patroni
sudo systemctl start keepalived
sudo systemctl enable keepalived
通过以上步骤,你可以在CentOS上实现一个基本的PostgreSQL高可用架构。根据实际需求,你可能还需要进一步优化和调整配置。