在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高可用架構。根據實際需求,你可能還需要進一步優化和調整配置。