在Debian系统上设计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
在主节点上创建一个复制用户:
CREATE USER replicator WITH REPLICATION PASSWORD 'your_password' LOGIN;
在主节点上锁定数据库并获取当前的WAL位置:
SELECT pg_start_backup('initial_backup');
在备节点上停止PostgreSQL服务:
sudo systemctl stop postgresql
从主节点复制数据到备节点:
sudo rsync -av --progress /var/lib/postgresql/<version>/main/ <replica_ip>:/var/lib/postgresql/<version>/main/
在备节点上恢复备份并启动PostgreSQL服务:
sudo systemctl start postgresql
在备节点上配置recovery.conf
文件:
standby_mode = 'on'
primary_conninfo = 'host=<master_ip> dbname=postgres user=replicator password=your_password'
restore_command = 'cp /var/lib/postgresql/archive/%f %p'
trigger_file = '/tmp/postgresql.trigger.5432'
在两台服务器上安装Patroni:
sudo apt install patroni
创建Patroni配置文件/etc/patroni.yml
,配置如下:
scope: postgres
name: <node_name>
namespace: /db
restapi:
listen: 0.0.0.0:8008
connect_address: <node_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_wal_senders: 10
wal_keep_segments: 64
replication:
slot_name: pgsql
replication_slots: 1
listen: 0.0.0.0
connect_address: <node_ip>
auth_method: md5
auth_key: <replication_password>
ssl: false
target_session_attrs: read-write
sslmode: disable
synchronous_commit: remote_write
synchronous_standby_names: '*'
hot_standby: true
primary_conninfo:
dbname: postgres
user: replicator
password: <replication_password>
host: <master_ip>
override_standby_names: true
failover_timeout: 60
recovery_target_timeline: latest
recovery_target_xid: -1
recovery_target_inclusive: true
recovery_target_action: promote
trigger_file: /tmp/postgresql.trigger.5432
在两台服务器上启动Patroni:
sudo systemctl start patroni
在两台服务器上安装Keepalived:
sudo apt install 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 <keepalived_password>
}
virtual_ipaddress {
<virtual_ip>
}
}
在备节点上将state
改为BACKUP
,并将priority
改为一个较低的值(例如90)。
启动Keepalived:
sudo systemctl start keepalived
sudo systemctl status patroni
sudo systemctl status keepalived
通过以上步骤,你可以在Debian系统上实现一个基本的PostgreSQL高可用架构。根据实际需求,可以进一步优化和扩展配置。