個人博客:點擊這里進入
一.故障現象
RHEL7.6系統,使用nmcli綁定雙網卡后,再使用以下命令重啟network服務后主機網絡異常,導致無法通過ssh遠程登錄系統。
# systemctl restart network
二.理論知識
Network service的制御網絡接口配置信息改動后,網絡服務必須從新啟動,來激活網絡新配置的使得配置生效,這部分操作和從新啟動系統時時一樣的作用。制御(控制)是/etc/init.d/network這個文件,可以用這個文件后面加上下面的參數來操作網絡服務。例如:
# /etc/init.d/network restart
同樣也可以用service這個命令來操作網絡服務例如:
# service network restart
# systemctl restart network
(NetworManager)是檢測網絡、自動連接網絡的程序。無論是無線還是有線連接,它都可以令您輕松管理。對於無線網絡,網絡管理器可以自動切換到最可靠的無線網絡。利用網絡管理器的程序可以自由切換在線和離線模式。網絡管理器可以優先選擇有線網絡,支持 VPN。網絡管理器最初由 Redhat 公司開發,現在由 GNOME 管理
三.環境分析
系統版本:Red Hat Enterprise Linux Server release 7.6
內核版本:3.10.0-957.el7.x86_64
硬件類型:Huawei 2288H V5
首先檢查系統網絡配置,該系統配置兩塊bonding設備,分別是:
bond0:業務網絡
bond1: Oracle RAC心跳網絡
分析系統日志,當重啟network服務時(systemctl restart network),系統messages日志中無明顯異常,測試發現,當停止NetworkManager服務后,問題現象消失,即執行如下操作:
# systemctl stop NetworkManager
此時再次重啟network服務:
# systemctl restart network
可以很快ping通bond0的業務地址10.116.6.194。
進一步分析發現,如果不停止NetworkManager服務,而是修改網卡配置文件,在bonding網卡和組成bonding的slave網卡的配置文件中增加一行配置,也可以解決該問題。
NM_CONTROLLED=no
參考紅帽RHEL7配置網卡bonding的官方文檔: https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/networking_guide/sec-network_bonding_using_the_command_line_interface
可以看到,官方文檔的配置示例中設置了NM_CONTROLLED=”no”:
四.原廠問題建議
該問題是由於NetworkManager服務引起,可以通過如下兩種方法解決:
- 在網卡配置文件中增加參數NM_CONTROLLED=no(“no”的引號可以不寫),設置后重啟network服務生效。設置NM_CONTROLLED=no的目的是將網絡設備脫離NetworkManager服務的管理,設置后該網絡設備僅由network服務管理,不受NetworkManager服務控制,因而nmcli命令對該網絡設備不再生效;
- 停止並禁用NetworkManager服務,停用后所有網絡設備由network服務管理,不能通過nmcli命令來管理網絡設備:
# systemctl stop NetworkManager
# systemctl disable NetworkManager
五.解決方案
據上所述,可關閉NetworkManager服務或在BOND配置文件中添加參數,但因環境需要,需使用nmcli命令,故無法關閉NetworkManager,在多輪測試中進行思考,既然NetManager與network服務沖突,但nmcli命令屬於NetworkManager,systemctl一般用來管理network,考慮兩者管理命令可能也存在沖突后進行了一波測試,使用NetworkManager的nmcli進行網卡的重啟操作,使用以下命令后,網絡可以即刻ping通並通過SSH連接
# nmcli connection down 網口名稱
# nmcli connection up 網口名稱
六.結論
因NetworkManager與network服務存在沖突,且雙網卡綁定時所使用的的nmcli進行綁定,nmcli歸屬於NetworkManager,故重啟網卡時應用nmcli命令up/down,不應使用systemctl進行網卡重啟