Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學

Linux 高可用架構實戰:Keepalived + VRRP 實現 Web 服務雙機熱備

編輯:Linux 系統常見問題解答

Keepalived 基於 VRRP(Virtual Router Redundancy Protocol)協議,提供輕量級的高可用方案:多台節點共享一個虛擬 IP(VIP),主節點故障時備節點自動漂移 VIP 接管流量,實現秒級故障切換。本文記錄四節點雙主雙備實戰部署全過程。

架構原理

  • 客戶端 只訪問 VIP,無感知後端實體 IP 變化。
  • Master(主控制節點) 持有 VIP,發送 VRRP 廣播宣告優先級。
  • Backup(備控制節點) 接收廣播,優先級低時保持備用;Master 心跳丟失超時後,Backup 搶佔 VIP。
  • Real Server(真實業務服務器) 運行實際 Web 服務(Nginx/Apache/Tomcat),通過 VIP 對外暴露。

Keepalived VRRP 架構圖 操作控制台節點佈局

前置條件(四節點均需滿足)

  1. 主機名解析:/etc/hosts 配置所有節點 hostname ↔ IP,或 DNS 解析。
  2. 時間同步:ntpdate 或 chrony 同步 NTP,避免日志時間混亂、VRRP 廣播間隔異常。
  3. Yum 源就緒:配置 base、epel、ha 源,確保 keepalived、ipvsadm、kernel-headers 可安裝。
  4. 關閉 SELinux / 設置防火牆:允許 VRRP 組播(224.0.0.18)與單播健康檢查端口通過。

Keepalived 源碼編譯安裝(兩控制節點)

1. 安裝構建依賴

yum install -y gcc openssl-devel libnl3-devel ipset-devel iptables-devel \
kernel-headers make automake autoconf libtool

安裝編譯依賴包 安裝內核頭文件 安裝 ipset iptables 開發包

2. 下載、解壓、編譯、安裝

wget https://www.keepalived.org/software/keepalived-2.2.8.tar.gz  # 示例版本
tar xf keepalived-2.2.8.tar.gz
cd keepalived-2.2.8
./configure --prefix=/usr/local/keepalived
make
make install

編譯過程 編譯結果 安裝完成

3. 生成配置文件目錄與啟動腳本

mkdir -p /etc/keepalived
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/

核心配置文件 /etc/keepalived/keepalived.conf 詳解

Master 節點配置

! Configuration File for keepalived

global_defs {
    notification_email {
        admin@example.com
    }
    notification_email_from keepalived@master
    smtp_server 127.0.0.1
    smtp_connect_timeout 30
    router_id LVS_MASTER_01  # 全局唯一標識
}

vrrp_instance VI_1 {
    state MASTER                    # 狀態:MASTER
    interface eth0                  # 綁定網卡(發送 VRRP 報文)
    virtual_router_id 51            # VRRP 組 ID(0-255,主備一致)
    priority 100                    # 優先級(主 > 備)
    advert_int 1                    # 心跳間隔(秒)
    authentication {
        auth_type PASS
        auth_pass 123456            # 簡單密碼認證(建議用 AH/IPsec)
    }
    virtual_ipaddress {
        192.168.1.100/24 dev eth0   # VIP/掩碼/設備
    }
    # 可選:健康檢查腳本,檢測 Nginx 進程/端口
    # track_script {
    #     chk_nginx
    # }
}

# 可選:定義健康檢查腳本
# vrrp_script chk_nginx {
#     script "/etc/keepalived/check_nginx.sh"
#     interval 2
#     weight -20
#     fall 3
#     rise 2
# }

Backup 節點配置(關鍵差異)

vrrp_instance VI_1 {
    state BACKUP                    # 狀態:BACKUP
    interface eth0
    virtual_router_id 51            # 必須一致
    priority 90                     # 低於 Master
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 123456
    }
    virtual_ipaddress {
        192.168.1.100/24 dev eth0
    }
}

啟動與驗證

# 兩節點均執行
systemctl start keepalived
systemctl enable keepalived

# 驗證 VIP 掛載在 Master 上
ip addr show eth0 | grep 192.168.1.100

# 模擬 Master 故障
systemctl stop keepalived  # Master 上執行
# 觀察 Backup 日志:VRRP_Instance VI_1 Transition to MASTER STATE
# 驗證 VIP 已漂移到 Backup
ip addr show eth0 | grep 192.168.1.100

進階:健康檢查腳本 /etc/keepalived/check_nginx.sh

#!/bin/bash
# 檢測 Nginx 進程存活,死則權重 -20 觸發 VIP 漂移
if ! pgrep -x nginx >/dev/null; then
    exit 1
fi
# 可選:檢測 80 端口響應
# curl -s -o /dev/null -w "%{http_code}" https://127.0.0.1 | grep -q 200 || exit 1
exit 0

配置 chmod +x,在 vrrp_instance 中引用 track_script { chk_nginx }。

常見坑點與調試

  • VRRP 組播被防火牆攔截:firewall-cmd --add-protocol=vrrp --permanent 或允許 224.0.0.18 組播。單播模式需指定 unicast_peer。
  • router_id 衝突:同網段多套 Keepalived 必須 virtual_router_id 不重複,router_id 全局唯一。
  • 網卡多 IP 導致 VIP 掛載異常:virtual_ipaddress 顯式指定 dev eth0。
  • 優先級抖動:健康檢查腳本 weight 設置不當導致主備頻繁切換,建議 fall 3 rise 2 增加穩定性。
  • 調試命令:keepalived -d -D -S 1 前台調試模式輸出詳細日志到 syslog。

延伸: Keepalived 常與 LVS(IPVS)結合實現四層負載均衡 + 高可用;七層場景常搭配 Nginx/HAProxy 做反向代理,Keepalived 僅負責 VIP 漂移。生產環境建議引入 notify_master/notify_backup/notify_fault 腳本對接監控告警(Zabbix/Prometheus/钉钉/企微)。

Copyright © Windows教程網 All Rights Reserved