VRRP 多節點工作原理
基本概念
- VRRP 的設計初衷是給一組節點提供一個 虛擬路由器,對外只表現出一個 VIP。
- 協議規定:同一個 VRRP 實例 下始終只有 一個 Master 持有 VIP,其它全部是 Backup。
- Master → 持有 VIP,負責轉發流量到Master或Backup;
- Backup → 不持有 VIP,只監聽 Master 狀態。
優先級機制
節點A (Priority: 100) --> Master
節點B (Priority: 90) --> Backup
節點C (Priority: 80) --> Backup
節點D (Priority: 70) --> Backup
當 Master 故障時,優先級最高的 Backup 會接管成為新的 Master。
多節點配置示例
節點1配置(優先級最高)
# /etc/keepalived/keepalived.conf
vrrp_instance VI_1 {state MASTERinterface eth0virtual_router_id 51priority 100 # 最高優先級advert_int 1authentication {auth_type PASSauth_pass 1234}virtual_ipaddress {192.168.1.100}
}
節點2配置(第二優先級)
vrrp_instance VI_1 {state BACKUPinterface eth0virtual_router_id 51priority 90 # 第二優先級advert_int 1authentication {auth_type PASSauth_pass 1234}virtual_ipaddress {192.168.1.100}
}
節點3配置(第三優先級)
vrrp_instance VI_1 {state BACKUPinterface eth0virtual_router_id 51priority 80 # 第三優先級advert_int 1authentication {auth_type PASSauth_pass 1234}virtual_ipaddress {192.168.1.100}
}
故障切換流程
正常狀態
Master (Priority: 100) -- 持有 VIP|+-- 發送 VRRP 廣播|
Backup1 (Priority: 90) -- 監聽 VRRP 廣播|
Backup2 (Priority: 80) -- 監聽 VRRP 廣播|
Backup3 (Priority: 70) -- 監聽 VRRP 廣播
Master 故障時
1. Master 停止發送 VRRP 廣播
2. 所有 Backup 節點檢測到超時
3. Backup 節點開始選舉:- Backup1 (90) vs Backup2 (80) vs Backup3 (70)- Backup1 勝出,成為新 Master
4. 新 Master 接管 VIP
高級特性
1. 搶占模式(Preempt)
vrrp_instance VI_1 {state BACKUPnopreempt # 非搶占模式priority 100# ... 其他配置
}
- 搶占模式(默認):高優先級節點恢復后會搶回 Master 角色
- 非搶占模式:即使高優先級節點恢復,當前 Master 也不會讓出
2. 優先級動態調整
vrrp_script chk_nginx {script "/etc/keepalived/check_nginx.sh"interval 2weight -20 # 檢查失敗時優先級減20
}vrrp_instance VI_1 {state BACKUPpriority 100track_script {chk_nginx}
}
3. 多組 VRRP 實例
可以配置多個 VRRP 實例實現負載分擔:
# 節點1:VI_1 的 Master,VI_2 的 Backup
vrrp_instance VI_1 {state MASTERpriority 100virtual_ipaddress {192.168.1.100}
}vrrp_instance VI_2 {state BACKUPpriority 90virtual_ipaddress {192.168.1.101}
}# 節點2:VI_1 的 Backup,VI_2 的 Master
vrrp_instance VI_1 {state BACKUPpriority 90virtual_ipaddress {192.168.1.100}
}vrrp_instance VI_2 {state MASTERpriority 100virtual_ipaddress {192.168.1.101}
}
實際應用場景
1. 數據庫集群(3節點)
主數據庫 (Priority: 100)
從數據庫1 (Priority: 90) -- 同步延遲較小
從數據庫2 (Priority: 80) -- 同步延遲較大
2. Web服務集群(4節點)
Web1 (Priority: 100) -- 配置最高
Web2 (Priority: 95) -- 配置次高
Web3 (Priority: 90) -- 配置中等
Web4 (Priority: 85) -- 配置較低
3. 混合優先級策略
# 基于服務器性能和網絡位置設置優先級
vrrp_instance VI_1 {state BACKUPpriority 100 # 基礎優先級track_script {chk_cpu_load # CPU 負載高時 -30chk_mem_usage # 內存不足時 -20chk_service # 服務異常時 -50}
}
注意事項
- 優先級范圍:1-254(0和255保留)
- 相同優先級:如果多個節點優先級相同,IP 地址較大的節點優先
- 網絡分區:需要考慮腦裂問題,可能需要額外的仲裁機制
- 廣播風暴:節點過多時要注意 VRRP 廣播對網絡的影響
- 典型模式: 1 主 + N 備,通過優先級和搶占來實現層級式 Failover。
VRRP 的多節點支持使得它非常適合構建高可用集群,不僅限于簡單的主備模式,可以根據實際需求靈活配置。