溫馨提示×

centos postgresql高可用性解決方案

小樊
42
2025-10-17 22:00:14
欄目: 云計算

CentOS PostgreSQL高可用性解決方案

在CentOS環境下,實現PostgreSQL高可用性需結合數據復制、故障轉移負載均衡等技術。以下是幾種主流方案及詳細實現步驟:

一、基礎方案:流復制(Streaming Replication)

流復制是PostgreSQL原生支持的高可用機制,通過WAL(Write-Ahead Log)日志實現主從數據同步,適用于需要讀寫分離基礎故障轉移的場景。

1. 主節點配置

  • 安裝PostgreSQLsudo yum install -y postgresql-server postgresql-contrib
  • 初始化數據庫sudo postgresql-setup initdb
  • 修改postgresql.conf:設置listen_addresses = '*'(監聽所有IP)、wal_level = replica(開啟復制日志)、max_wal_senders = 10(允許10個WAL發送進程)、wal_keep_segments = 64(保留64個WAL文件)。
  • 修改pg_hba.conf:添加復制權限host replication replicator 0.0.0.0/0 md5(允許所有IP的復制用戶連接,密碼認證)。
  • 創建復制用戶CREATE USER replicator REPLICATION LOGIN ENCRYPTED PASSWORD 'your_password';
  • 重啟服務sudo systemctl restart postgresql

2. 從節點配置

  • 備份主節點數據pg_basebackup -h master_ip -U replicator -D /var/lib/pgsql/data --wal-method=stream --no-password(實時拉取主節點數據)。
  • 修改postgresql.conf:與主節點一致(listen_addresses = '*'、hot_standby = on)。
  • 創建recovery.confstandby_mode = 'on'(聲明為備庫)、primary_conninfo = 'host=master_ip dbname=postgres user=replicator password=your_password'(連接主庫的信息)。
  • 啟動服務sudo systemctl start postgresql

3. 驗證復制狀態

在主節點執行SELECT * FROM pg_stat_replication;,若返回備庫連接信息,則說明復制成功。

二、進階方案:repmgr + 流復制

repmgr是PostgreSQL生態中的復制管理工具,可自動化監控、故障轉移和節點管理,彌補原生流復制的不足。

1. 安裝repmgr

sudo yum install -y repmgr

2. 配置主從節點

  • 主節點:編輯/etc/repmgr.conf,設置node_id = 1、node_name = master、conninfo = 'host=master_ip dbname=postgres user=repmgr password=repmgr_pass'。
  • 從節點:編輯/etc/repmgr.conf,設置node_id = 2、node_name = standby、conninfo = 'host=standby_ip dbname=postgres user=repmgr password=repmgr_pass'、primary_conninfo = 'host=master_ip dbname=postgres user=replicator password=your_password'。

3. 初始化集群

  • 主節點repmgr -f /etc/repmgr.conf init(初始化主節點)。
  • 從節點repmgr -f /etc/repmgr.conf standby clone master_ip(克隆主節點數據)、repmgr -f /etc/repmgr.conf standby register(注冊備庫到集群)。

4. 故障轉移

若主節點故障,執行repmgr -f /etc/repmgr.conf failover,repmgr會自動提升備庫為新主庫,并更新集群狀態。

三、企業級方案:Patroni + etcd + Keepalived

Patroni是基于Raft算法的高可用管理工具,結合etcd(分布式鍵值存儲)實現集群狀態同步,Keepalived提供虛擬IP(VIP),確??蛻舳耸冀K訪問可用節點。

1. 環境準備

  • 至少3臺CentOS服務器(1主2從)。
  • 安裝etcd集群(用于Patroni狀態同步)。

2. 安裝Patroni

sudo yum install -y python3-pip && sudo pip3 install patroni

3. 配置Patroni

  • 主節點(/etc/patroni.yml):
    scope: postgres_cluster
    name: node1
    namespace: /db
    restapi:
      listen: 0.0.0.0:8008
      connect_address: 192.168.1.101
    etcd:
      host: 192.168.1.103:2379  # etcd服務器IP
    bootstrap:
      dcs:
        ttl: 30
        retry_timeout: 10
        postgresql:
          use_pg_rewind: true
          parameters:
            wal_level: replica
            hot_standby: on
            max_wal_senders: 4
      initdb:
        - encoding: UTF8
        - locale: en_US.UTF-8
      pg_hba:
        - host replication replicator 192.168.1.0/24 md5
        - host all all 192.168.1.0/24 md5
    postgresql:
      listen: 0.0.0.0:5432
      connect_address: 192.168.1.101
      data_dir: /var/lib/pgsql/data
      authentication:
        replication:
          username: replicator
          password: replicator_pass
        superuser:
          username: postgres
          password: postgres_pass
    
  • 從節點:修改name、connect_addressdata_dir,其他配置與主節點一致。

4. 安裝Keepalived(提供VIP)

  • 主節點(/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 1234
      }
      virtual_ipaddress {
        192.168.1.100  # 虛擬IP,客戶端通過此IP訪問PostgreSQL
      }
    }
    
  • 從節點:將state改為BACKUP,priority改為90(低于主節點)。

5. 啟動服務

  • 所有節點sudo systemctl start patroni && sudo systemctl enable patroni
  • 所有節點sudo systemctl start keepalived && sudo systemctl enable keepalived

6. 驗證高可用性

  • 訪問虛擬IP192.168.1.100,確認能連接到PostgreSQL。
  • 手動停止主節點的PostgreSQL服務,觀察Keepalived是否將VIP切換到備用節點,Patroni是否自動提升備庫為主庫。

四、注意事項

  • 監控與告警:使用Prometheus+Granafa監控集群狀態(如節點存活、復制延遲),設置郵件/短信告警。
  • 備份策略:定期使用pg_dumpbarman備份數據,測試恢復流程。
  • 安全性:配置防火墻(僅允許必要端口,如5432、2379、8008),禁用默認用戶(如postgres),啟用SSL加密連接。

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