溫馨提示×

centos postgresql高可用性架構設計

小樊
75
2025-05-17 07:34:10
欄目: 云計算

在CentOS上設計PostgreSQL的高可用性架構,可以采用多種策略和技術。以下是一個基本的設計方案,使用了Patroni和Keepalived來實現高可用性:

1. 環境準備

  • 兩臺或多臺CentOS服務器:用于部署PostgreSQL主從復制。
  • 網絡配置:確保服務器之間可以互相通信。

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. 驗證高可用性

  • 訪問VIP地址<vip_ip>,應該能夠連接到PostgreSQL數據庫。
  • 模擬主節點故障,觀察從節點是否能夠自動接管成為新的主節點。

通過以上步驟,你可以在CentOS上實現一個基本的PostgreSQL高可用性架構。根據實際需求,可以進一步優化和擴展。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女