在CentOS上設計PostgreSQL的高可用性架構,可以采用多種策略和技術。以下是一個基本的設計方案,使用了Patroni和Keepalived來實現高可用性:
在所有服務器上安裝PostgreSQL:
sudo yum install -y postgresql-server
初始化數據庫并啟動服務:
sudo postgresql-setup initdb
sudo systemctl start postgresql
sudo systemctl enable postgresql
編輯主節點的postgresql.conf文件:
sudo vi /var/lib/pgsql/data/postgresql.conf
修改以下參數:
listen_addresses = '*' # 監聽所有IP
wal_level = replica # 設置為replica級別
max_wal_senders = 10 # 允許的最大WAL發送者數量
wal_keep_segments = 64 # 保留的WAL文件數量
hot_standby = on # 啟用熱備
編輯pg_hba.conf文件:
sudo vi /var/lib/pgsql/data/pg_hba.conf
添加以下行以允許從節點連接:
host replication replicator 192.168.1.0/24 md5
重啟PostgreSQL服務:
sudo systemctl restart postgresql
在從節點上執行以下步驟:
停止PostgreSQL服務:
sudo systemctl stop postgresql
備份主節點數據:
sudo pg_basebackup -h <master_ip> -U replicator -D /var/lib/pgsql/data --wal-method=stream --no-password
修改從節點的postgresql.conf文件:
sudo vi /var/lib/pgsql/data/postgresql.conf
修改以下參數:
listen_addresses = '*' # 監聽所有IP
wal_level = replica # 設置為replica級別
max_wal_senders = 10 # 允許的最大WAL發送者數量
hot_standby = on # 啟用熱備
修改從節點的recovery.conf文件:
sudo vi /var/lib/pgsql/data/recovery.conf
添加以下內容:
standby_mode = 'on'
primary_conninfo = 'host=<master_ip> dbname=postgres user=replicator password=<password>'
restore_command = 'cp /var/lib/pg_xlog/archive/%f %p'
trigger_file = '/tmp/postgresql.trigger.5432'
啟動從節點PostgreSQL服務:
sudo systemctl start postgresql
Patroni是一個用于管理PostgreSQL高可用性的工具。
在所有服務器上安裝Patroni:
sudo yum install -y python-pip
sudo pip install patroni
創建Patroni配置文件/etc/patroni.yml:
scope: postgres
namespace: /db
name: postgres_master
restapi:
listen: 0.0.0.0:8008
connect_address: <master_ip>
etcd:
host: <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
shared_buffers: 25% of total RAM
work_mem: 4MB
maintenance_work_mem: 128MB
effective_cache_size: 75% of total RAM
postgresql:
listen: 0.0.0.0:5432
connect_address: <master_ip>
data_dir: /var/lib/pgsql/data
pg_hba:
- host replication replicator 0.0.0.0/0 md5
authentication:
replication:
username: replicator
password: <password>
parameters:
wal_level: replica
max_connections: 100
shared_buffers: 25% of total RAM
work_mem: 4MB
maintenance_work_mem: 128MB
effective_cache_size: 75% of total RAM
postgresql:
listen: 0.0.0.0:5433
connect_address: <slave_ip>
data_dir: /var/lib/pgsql/data
pg_hba:
- host replication replicator 0.0.0.0/0 md5
authentication:
replication:
username: replicator
password: <password>
parameters:
wal_level: replica
max_connections: 100
shared_buffers: 25% of total RAM
work_mem: 4MB
maintenance_work_mem: 128MB
effective_cache_size: 75% of total RAM
在主節點上啟動Patroni:
sudo patroni /etc/patroni.yml
Patroni會自動檢測并管理PostgreSQL集群。
Keepalived用于實現虛擬IP(VIP)的高可用性。
在所有服務器上安裝Keepalived:
sudo yum install -y keepalived
創建Keepalived配置文件/etc/keepalived/keepalived.conf:
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass <password>
}
virtual_ipaddress {
<vip_ip>
}
}
virtual_server <vip_ip> 5432 {
delay_loop 6
lb_algo rr
lb_kind DR
nat_mask 255.255.255.0
persistence_timeout 50
protocol TCP
real_server <master_ip> 5432 {
weight 1
TCP_CHECK {
connect_timeout 10
connect_port 5432
}
}
real_server <slave_ip> 5432 {
weight 1
TCP_CHECK {
connect_timeout 10
connect_port 5432
}
}
}
在所有服務器上啟動Keepalived:
sudo systemctl start keepalived
<vip_ip>,應該能夠連接到PostgreSQL數據庫。通過以上步驟,你可以在CentOS上實現一個基本的PostgreSQL高可用性架構。根據實際需求,可以進一步優化和擴展。