生產環境多套 LVS 負載均衡節點,配置相同的 chkconfig --level 2345 ipvsadm on,唯獨一台重啟後 ipvs 模塊未加載、服務掛起。日志報 IPVS: Can't initialize ipvs: Protocol not available,手動 ipvsadm -Ln 卻能恢復。本文記錄排查全過程,直指核心原因:缺失 /etc/sysconfig/ipvsadm 配置文件。
service ipvsadm save 並 chkconfig ipvsadm on。lsmod | grep ip_vs 為空,模塊未加載。/var/log/messages 狂刷 Keepalived_healthcheckers: IPVS: Can't initialize ipvs: Protocol not available。ipvsadm -Ln 或 /etc/init.d/ipvsadm start 後恢復正常。Protocol not available → 內核 ip_vs 模塊未加載。lsmod | grep ip_vs 確認無模塊。ipvsadm 到 1.25、調整安裝順序、調整啟動順序,問題依舊 → 非版本/順序問題。/etc/init.d/ipvsadm start 後再重啟,**竟然自啟動成功了** → 啟動腳本執行過程中產生了關鍵文件/狀態。/etc/init.d/ipvsadm 啟動腳本,發現其依賴配置文件 /etc/sysconfig/ipvsadm。ls /etc/sysconfig/ipvsadm → 文件不存在!touch /etc/sysconfig/ipvsadm 創建空文件 → 重啟 OS → ipvsadm 服務正常自啟動,lsmod 顯示模塊已加載。ipvsadm 服務腳本啟動邏輯大致為:
/etc/sysconfig/ipvsadm 獲取保存的規則/參數。ipvsadm --restore 或直接 modprobe ip_vs 加載模塊並應用規則。而 service ipvsadm save 正是將當前規則寫入該配置文件的命令。**部署人員漏執行此步驟**,導致文件缺失,重啟時服務靜默失敗。
# 1. 安裝軟件
yum install ipvsadm keepalived -y
# 2. 配置 LVS 規則 (ipvsadm -A -t ...)
# 3. **關鍵步驟:保存規則到配置文件**
service ipvsadm save
# 產出 /etc/sysconfig/ipvsadm
# 4. 設置開機自啟
chkconfig ipvsadm on
chkconfig keepalived on
# 5. 驗證
reboot
lsmod | grep ip_vs # 必須有輸出
ipvsadm -Ln # 規則正常
iptables:需 service iptables save 生成 /etc/sysconfig/iptables,否則重啟規則丟失。docker:若不配置 --restart=always 或 systemd unit,容器不會自啟動。/etc/init.d/ 腳本依賴 /etc/sysconfig/ 下同名配置文件的服務,均需執行 save 步驟。「配置了自啟動卻不自啟」,90% 是**啟動腳本前置條件未滿足**(配置文件缺失、目錄權限錯、依賴服務未起)。養成 service xxx save 肌肉記憶,部署文檔落紙為證,才能杜絕此類低級故障。