檢查與修復(fù)CentOS 7實(shí)例和Windows實(shí)例IP地址缺失問題
問題描述
在連續(xù)使用ECS實(shí)例超過一段時(shí)間,且期間未重啟過ECS實(shí)例,突然發(fā)生實(shí)例斷網(wǎng)、網(wǎng)絡(luò)癱瘓、無法Ping通公網(wǎng)IP和私網(wǎng)IP的情況。
問題原因
初次啟動(dòng)ECS實(shí)例時(shí),系統(tǒng)使用DHCP(動(dòng)態(tài)主機(jī)設(shè)置協(xié)議,Dynamic Host Configuration Protocol)方式為彈性網(wǎng)卡自動(dòng)分配IP地址,并獲得IP地址租約到期時(shí)間。正常情況下,Linux系統(tǒng)的dhclient進(jìn)程和Windows系統(tǒng)的DHCP Client服務(wù)會(huì)定期向DHCP服務(wù)器更新租約到期時(shí)間,以確保實(shí)例IP地址的可用性。
由于部分CentOS 7鏡像,創(chuàng)建的實(shí)例會(huì)小概率清理dhclient進(jìn)程,以及Windows Server操作系統(tǒng)的DHCP Client服務(wù)存在已知問題,導(dǎo)致您的實(shí)例無法自動(dòng)更新IP地址的續(xù)租到期時(shí)間。當(dāng)首次獲得續(xù)租時(shí)間的IP地址到期后,實(shí)例的私網(wǎng)IP地址會(huì)被釋放,導(dǎo)致實(shí)例網(wǎng)絡(luò)不通。
適用范圍
符合以下條件的ECS實(shí)例,并且ECS實(shí)例通過DHCP方式為彈性網(wǎng)卡自動(dòng)分配IP地址,需要根據(jù)本文描述修復(fù)問題。靜態(tài)配置的IP地址無需繼續(xù)閱讀文檔。
-
基于以下CentOS 7公共鏡像創(chuàng)建的任何類型實(shí)例(在2018年5月31日之前創(chuàng)建,并在2018年11月15號(hào)之后沒有重啟的ECS實(shí)例)。
- centos_7_04_64_20G_alibase_20180419.vhd
- centos_7_04_64_20G_alibase_20180326.vhd
- centos_7_04_64_20G_alibase_201701015.vhd
- centos_7_03_64_20G_alibase_20170818.vhd
- centos_7_02_64_20G_alibase_20170818.vhd
- centos_7_03_64_40G_alibase_20170710.vhd
- centos_7_03_64_40G_alibase_20170625.vhd
- centos_7_03_64_40G_alibase_20170523.vhd
- centos_7_03_64_40G_alibase_20170503.vhd
-
運(yùn)行以下Windows Server操作系統(tǒng)的實(shí)例(在2018年11月15日之前創(chuàng)建,并在這之后沒有重啟過的ECS實(shí)例)。
- Windows Server 2008 R2
- Windows Server 2012 R2
- Windows Server 2016
- Windows Server Version 1709
解決方案
- 如果您對(duì)實(shí)例或數(shù)據(jù)有修改、變更等風(fēng)險(xiǎn)操作,務(wù)必注意實(shí)例的容災(zāi)、容錯(cuò)能力,確保數(shù)據(jù)安全。
- 如果您對(duì)實(shí)例(包括但不限于ECS、RDS)等進(jìn)行配置與數(shù)據(jù)修改,建議提前創(chuàng)建快照或開啟RDS日志備份等功能。
- 如果您在阿里云平臺(tái)授權(quán)或者提交過登錄賬號(hào)、密碼等安全信息,建議您及時(shí)修改。
您可以根據(jù)實(shí)際情況,從本文提供的四種解決方法中選擇其中一種。
- 方法1:云助手批量修復(fù)。適用于多臺(tái)實(shí)例的場(chǎng)景,可以在ECS控制臺(tái)上完成,操作方式更簡(jiǎn)便。
- 方法2:基于云助手API編寫的Python SDK腳本。以地域?yàn)樾迯?fù)單位,批量檢測(cè)您的實(shí)例狀態(tài)并完成自動(dòng)修復(fù)。適用于熟悉腳本化運(yùn)維的用戶。
- 方法3:提供了Shell和PowerShell腳本,需要您登錄到ECS實(shí)例中手動(dòng)修復(fù),適用于在少量實(shí)例中輪詢或測(cè)試的場(chǎng)景。其中,腳本內(nèi)容和解決方法1一致。
- 方法4:逐一排查網(wǎng)卡,適用于少量實(shí)例的場(chǎng)景。
方法1:云助手批量修復(fù)
本示例采用云助手為ECS實(shí)例執(zhí)行檢查并自動(dòng)修復(fù)的工作,請(qǐng)確保您的實(shí)例已經(jīng)安裝了云助手客戶端。2017年12月01日之后創(chuàng)建的ECS實(shí)例,默認(rèn)預(yù)裝云助手客戶端。
- 前往ECS管理控制臺(tái)云助手頁面。
- 選擇地域。
- 單擊新建命令。
-
下載以下Shell或PowerShell腳本,并粘貼到云助手命令內(nèi)容中。
- CentOS實(shí)例:linux_fix_dhclient.sh
- Windows實(shí)例:win_fix_dhclient.ps1
-
找到您已創(chuàng)建的命令,在操作欄中,單擊執(zhí)行,選中受影響的實(shí)例批量運(yùn)行已創(chuàng)建的云助手命令。
-
命令運(yùn)行顯示執(zhí)行完成后,在操作欄中,單擊查看結(jié)果。下圖為CentOS實(shí)例和Windows實(shí)例的返回結(jié)果區(qū)分。
方法2:Python SDK腳本批量修復(fù)
本示例基于云助手API編寫Python腳本,能檢查并自動(dòng)修復(fù)一個(gè)阿里云地域下所有受影響的實(shí)例。
準(zhǔn)備工作
參考如下命令,下載相關(guān)的Python SDK依賴到本地計(jì)算機(jī)或者ECS實(shí)例中。
pip install aliyun-python-sdk-core pip install aliyun-python-sdk-ecs
操作步驟
- 下載autofix_dhclient.py到已做好準(zhǔn)備工作的本地計(jì)算機(jī)或者ECS實(shí)例中。
-
運(yùn)行如下命令,查看腳本的使用說明。
注:此為可選步驟。
系統(tǒng)返回類似如下。python autofix_dhclient.py
Usage: autofix_dhclient.py <AccessKeyID> <AccessKeySecret> <region-id>
-
按使用說明填寫AccessKeyID,AccessKeySecret和region-id等參數(shù),以root或者管理員身份運(yùn)行腳本,例如。
python autofix_dhclient.py LTAIn*******Py6J kXXIOEoPXXvsYRUd**********TRyU cn-hangzhou
執(zhí)行結(jié)果
以下為腳本運(yùn)行結(jié)果示意圖。
實(shí)例狀態(tài)檢查的詳細(xì)說明如下。
-
Cloud Assistant:該檢查項(xiàng)查看您的實(shí)例是否安裝了云助手客戶端。
- Installed:表示實(shí)例已安裝了云助手客戶端。
- Not Installed:表示云助手客戶端缺失,您可以安裝云助手客戶端后繼續(xù)修復(fù)工作。
-
NeedFix:該檢查項(xiàng)查看實(shí)例是否需要修復(fù)dhclient進(jìn)程或DHCP Client服務(wù)。
- Yes:表示需要繼續(xù)修復(fù),腳本會(huì)自動(dòng)完成后續(xù)工作。
- No:表示無需修復(fù)。
- Unknown:表示腳本無法判斷,需要您手動(dòng)執(zhí)行。
-
FixResult:該檢查項(xiàng)匯報(bào)腳本修復(fù)結(jié)果。
- Success:表示成功修復(fù)dhclient進(jìn)程或DHCP Client服務(wù)。
- Failed:表示修復(fù)失敗。
- NoChange:表示無需修復(fù)。
- Unknown:表示腳本無法判斷,需要您手動(dòng)執(zhí)行。
方法3:Shell/PowerShell腳本修復(fù)
該方法需要您登錄到受影響的實(shí)例中,逐一排查問題,因此適用于少量實(shí)例的場(chǎng)景。
CentOS實(shí)例操作步驟
- 遠(yuǎn)程登錄ECS實(shí)例。
- 獲取腳本linux_fix_dhclient.sh到任意目錄。
-
切換到腳本所在的工作目錄,以root身份運(yùn)行腳本。
sudo bash linux_fix_dhclient.sh
注:
- 返回結(jié)果為“0”時(shí),腳本已完成檢查和修復(fù)工作。
- 返回其他狀態(tài)表明修復(fù)失敗。
Windows實(shí)例操作步驟
- 遠(yuǎn)程登錄ECS實(shí)例。
- 獲取修復(fù)win_fix_dhclient.ps1腳本到任意目錄。
-
以管理員權(quán)限打開PowerShell,執(zhí)行如下命令。
powershell -executionpolicy bypass -file C:\win_fix_dhclient.ps1
注:
- 您需要將C:\win_fix_dhclient.ps1替換成實(shí)際的文件路徑。
- 當(dāng)返回“No ip will expire in recent 500 days. Then no need fix.”時(shí),表示實(shí)例的DHCP Client服務(wù)無異常情況,無需修復(fù)。
- 當(dāng)返回“Found one ip will expire in 500 days. We need fixing it!!! Fix it now... Fix success.”時(shí),表示實(shí)例的DHCP Client服務(wù)異常,腳本已完成修復(fù)工作。
- 返回其他狀態(tài)表明修復(fù)失敗。
方法4:逐一排查網(wǎng)卡
該方法需要您自行檢查和修復(fù)檢查每張網(wǎng)卡對(duì)應(yīng)的dhclient進(jìn)程(CentOS實(shí)例)或IP地址租約到期時(shí)間(Windows實(shí)例)。
CentOS實(shí)例操作步驟
- 遠(yuǎn)程登錄實(shí)例。
- 運(yùn)行l(wèi)s -al /sys/class/net/命令檢查實(shí)例的所有網(wǎng)卡。
- 運(yùn)行cat /etc/sysconfig/network-scripts/ifcfg-eth0命令,檢查eth0網(wǎng)卡是否使用DHCP分配IP地址。
-
運(yùn)行ps aux | grep dhclient | grep eth0命令檢查eth0網(wǎng)卡對(duì)應(yīng)的dhclient進(jìn)程運(yùn)行情況。
- 返回空結(jié)果表示dhclient進(jìn)程異常。
-
返回如下結(jié)果表示dhclient進(jìn)程正常運(yùn)行,可以忽略本文剩余描述前往步驟7。
root 15340 0.0 0.3 113372 12788 ? Ss 14:16 0:00 /sbin/dhclient -1 -q -lf /var/lib/dhclient/dhclient--eth0.lease -pf /var/run/dhclient-eth0.pid -H izuf695ygwh32u2i******z eth0
-
運(yùn)行ifup eth0命令重新啟動(dòng)dhclient。
注:您需要將命令中的eth0替換成網(wǎng)卡實(shí)際的標(biāo)識(shí)符。
- 再次檢查網(wǎng)卡對(duì)應(yīng)的dhclient進(jìn)程運(yùn)行情況。
- 重復(fù)步驟3-步驟6,檢查并修復(fù)剩余所有網(wǎng)卡的dhclient進(jìn)程運(yùn)行情況。
Windows實(shí)例操作步驟
- 遠(yuǎn)程登錄實(shí)例。
- 以管理員身份打開命令提示符CMD。
-
運(yùn)行以下命令查看描述為 Red Hat VirtIO Ethernet Adaptor 的網(wǎng)卡的 DHCP 已啟用 項(xiàng)是否為 是,及其 租約過期的時(shí)間。
系統(tǒng)顯示類似如下。
ipconfig /all
注:Red Hat VirtIO Ethernet Adaptor為ECS實(shí)例的主網(wǎng)卡和輔助彈性網(wǎng)卡,您自定義配置的VPN或者LoopBack網(wǎng)卡等不在受影響范圍內(nèi)。此外,未啟用DHCP服務(wù)的網(wǎng)卡不在受影響范圍內(nèi)。
-
如果租約過期的時(shí)間顯示在一年之內(nèi),繼續(xù)運(yùn)行以下命令更新租約過期的時(shí)間。
ipconfig /renew
- 運(yùn)行ipconfig /all命令返回的租約過期的時(shí)間更新為十年之內(nèi)說明已經(jīng)完成修復(fù)。
如果您有其他問題,可以聯(lián)系北京優(yōu)勝智連阿里云代理商,為您提供一對(duì)一專業(yè)全面的技術(shù)服務(wù),同時(shí)新/老阿里云會(huì)員,均可享受我公司代理商價(jià)格,歡迎咨詢!



