centos

centos postgresql高可用性架构设计

小樊
52
2025-05-17 07:34:10
栏目: 云计算

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

1. 环境准备

2. 安装PostgreSQL

在所有服务器上安装PostgreSQL:

sudo yum install -y postgresql-server

初始化数据库并启动服务:

sudo postgresql-setup initdb
sudo systemctl start postgresql
sudo systemctl enable postgresql

3. 配置主从复制

主节点配置

编辑主节点的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

从节点配置

在从节点上执行以下步骤:

  1. 停止PostgreSQL服务:

    sudo systemctl stop postgresql
    
  2. 备份主节点数据:

    sudo pg_basebackup -h <master_ip> -U replicator -D /var/lib/pgsql/data --wal-method=stream --no-password
    
  3. 修改从节点的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         # 启用热备
    
  4. 修改从节点的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'
    
  5. 启动从节点PostgreSQL服务:

    sudo systemctl start postgresql
    

4. 安装和配置Patroni

Patroni是一个用于管理PostgreSQL高可用性的工具。

安装Patroni

在所有服务器上安装Patroni:

sudo yum install -y python-pip
sudo pip install patroni

配置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

在主节点上启动Patroni:

sudo patroni /etc/patroni.yml

Patroni会自动检测并管理PostgreSQL集群。

5. 安装和配置Keepalived

Keepalived用于实现虚拟IP(VIP)的高可用性。

安装Keepalived

在所有服务器上安装Keepalived:

sudo yum install -y keepalived

配置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

在所有服务器上启动Keepalived:

sudo systemctl start keepalived

6. 验证高可用性

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

0
看了该问题的人还看了