debian

Debian上PostgreSQL如何实现高可用性

小樊
46
2025-07-24 11:27:29
栏目: 云计算

在Debian上实现PostgreSQL的高可用性,可以采用多种方法。以下是两种常见的解决方案:

1. 使用Patroni和Keepalived

Patroni是一个用于管理PostgreSQL高可用性的工具,它可以与Keepalived结合使用来实现故障转移。

步骤:

  1. 安装Patroni和Keepalived

    sudo apt-get update
    sudo apt-get install patroni keepalived
    
  2. 配置Patroni: 创建一个Patroni配置文件,例如 /etc/patroni.yml,并配置PostgreSQL集群的信息。

    scope: postgresql
    namespace: /db/
    name: db1
    
    restapi:
      listen: 0.0.0.0:8008
      connect_address: 127.0.0.1:8008
    
    etcd:
      host: 127.0.0.1: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
    
    postgresql:
      listen: 0.0.0.0:5432
      connect_address: 127.0.0.1:5432
      data_dir: /var/lib/postgresql/12/main
      pg_hba:
        - host replication replicator 127.0.0.1/32 md5
        - host all all 0.0.0.0/0 md5
      authentication:
        replication:
          username: replicator
          password: your_replicator_password
        superuser:
          username: postgres
          password: your_superuser_password
    
    tags:
      nofailover: false
      noloadbalance: false
      clonefrom: false
      nosync: false
    
  3. 配置Keepalived: 创建Keepalived配置文件,例如 /etc/keepalived/keepalived.conf,并配置虚拟IP地址和故障转移逻辑。

    vrrp_script chk_psql {
        script "pg_isready -h 127.0.0.1 -U replicator -d your_database"
        interval 2
        weight 2
    }
    
    vrrp_instance VI_1 {
        state MASTER
        interface eth0
        virtual_router_id 51
        priority 100
        advert_int 1
    
        authentication {
            auth_type PASS
            auth_pass your_keepalived_password
        }
    
        virtual_ipaddress {
            192.168.1.100
        }
    
        track_script {
            chk_psql
        }
    }
    
  4. 启动Patroni和Keepalived

    sudo systemctl start patroni
    sudo systemctl start keepalived
    

2. 使用Pgpool-II

Pgpool-II是一个中间件,可以提供连接池、负载均衡和高可用性。

步骤:

  1. 安装Pgpool-II

    sudo apt-get update
    sudo apt-get install pgpool2
    
  2. 配置Pgpool-II: 编辑Pgpool-II配置文件,例如 /etc/pgpool2/pgpool.conf,并配置PostgreSQL集群的信息。

    backend_hostname0 = '192.168.1.1'
    backend_port0 = 5432
    backend_weight0 = 1
    backend_data_directory0 = '/var/lib/postgresql/12/main'
    backend_flag0 = 'ALLOW_TO_FAILOVER'
    
    backend_hostname1 = '192.168.1.2'
    backend_port1 = 5432
    backend_weight1 = 1
    backend_data_directory1 = '/var/lib/postgresql/12/main'
    backend_flag1 = 'ALLOW_TO_FAILOVER'
    
    listen_addresses = '*'
    port = 9999
    auth_type = md5
    auth_file = '/etc/pgpool2/usermap.csv'
    load_balance_mode = on
    master_slave_mode = on
    promote_pattern = '.*'
    failover_command = '/usr/lib/postgresql/12/bin/pg_ctl promote -D /var/lib/postgresql/12/main'
    failback_command = '/usr/lib/postgresql/12/bin/pg_ctl demote -D /var/lib/postgresql/12/main'
    
  3. 配置用户映射: 编辑用户映射文件,例如 /etc/pgpool2/usermap.csv,并添加PostgreSQL用户。

    "postgres","md5","your_superuser_password","postgres"
    "replicator","md5","your_replicator_password","postgres"
    
  4. 启动Pgpool-II

    sudo systemctl start pgpool2
    

通过以上两种方法,你可以在Debian上实现PostgreSQL的高可用性。选择哪种方法取决于你的具体需求和环境。Patroni提供了更全面的故障转移和监控功能,而Pgpool-II则更轻量级,适合简单的负载均衡和高可用性需求。

0
看了该问题的人还看了