debian

Debian PostgreSQL高可用架构设计

小樊
37
2025-08-14 08:36:42
栏目: 云计算

在Debian系统上设计PostgreSQL的高可用架构,可以采用多种策略和技术。以下是一个基本的设计方案,使用了Patroni和Keepalived来实现高可用性:

1. 硬件和网络准备

2. 安装PostgreSQL

在两台服务器上安装PostgreSQL:

sudo apt update
sudo apt install postgresql postgresql-contrib

3. 配置PostgreSQL

编辑/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

4. 初始化复制

在主节点上创建一个复制用户:

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'

5. 安装和配置Patroni

在两台服务器上安装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

6. 安装和配置Keepalived

在两台服务器上安装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

7. 验证高可用性

通过以上步骤,你可以在Debian系统上实现一个基本的PostgreSQL高可用架构。根据实际需求,可以进一步优化和扩展配置。

0
看了该问题的人还看了