1. 程式人生 > >OpenStack(ice house)雲主機獲取不到DHCP地址之故障分析定位與處理辦法

OpenStack(ice house)雲主機獲取不到DHCP地址之故障分析定位與處理辦法

公司生產機房最近淘汰下來一批裝置,不算太舊,普遍CPU兩顆兩核,少數四顆四核,但其中已經有若干臺主機安裝不了CentOS7的系統了。因為主機型號太舊,CentOS7已經不提供磁碟驅動的支援了。所以只好將就著裝成了CentOS6.7。為了更好得發揮餘熱,著手部署了一套OpenStack系統,版本只能選用Ice House,因為受制於OS的版本。

系統的架構基本上是:

一個控制節點

一個網路節點

四個計算節點

以上六個主機節點全部帶磁碟儲存,部署GlusterFS系統,與Cinder整合提供雲硬碟服務。

使用Neutron實現OpenStack網路服務時,發現雲主機無法獲取到DHCP地址。

問題分析:

1、DHCP Server是執行在網路節點上的,通過dnsmasq發放地址,因此雲主機必須與網路節點上的DHCP服務能夠通訊;

2、雲主機執行在計算節點上,使用GRE隨道通訊與網路節點進行互動,每新建一個雲主機就會有一個新的專用的通訊隧道的建立,在隧道兩側的網路介面名稱基本上都是命令為類似於br-tun的形式;

3、隧道介面br-tun在收發來自隧道的資料後,進行了格式轉換,轉發給了br-int網路介面,翻譯為雲主機和網路節點的IP網路能夠識別的格式;

4、使用tcpdump在網路節點和計算節點上,針對br-int介面進行抓包,應該能抓到雙方進行DHCP互動的資料包;

#tcpdump -i br-int

在網路節點和計算節點上使用上面的命令開始抓包。

使用瀏覽器登入dashboard管理平臺,進入測試使用的雲主機Cirros中,手工執行獲取dhcp地址的命令:

#sudo cirros-dhcpc up eth0
現象:

在計算節點上,立即就抓到了發出dhcp請求的廣播資料包,證明雲主機系統和計算節點網路正常。

而網路節點的br-int介面始終沒獲取到dhcp廣播包。於是直接對網路節點的隧道通訊網絡卡進行抓包:

#tcpdump -i eth1
雖然干擾資料有點多,但仍然很容易看到當雲主機發出dhcp請求時,幾乎同時,在網路節點的隧道通訊網絡卡eth1上收到了dhcp廣播資料包。

5、分析

dhcp請求已經進入了網路節點,但是沒能經由隧道介面轉給br-int內網介面,因此雲主機的dhcp請求得不到響應。

在確認了網路節點的隧道介面br-tun和內網介面br-int的埠對映無誤後,認為DHCP請求是卡在了網路節點的系統層面,即eth1可以拿到,br-tun和br-int不能拿到,除非是網路節點的iptables策略把資料包攔住了。

借用一張OpenStack官網的架構圖來說明一下系統與網路部署結構:

6、我們看一下網路節點此時的iptables規則如下

[[email protected] ~]# iptables --list
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
neutron-openvswi-INPUT  all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED 
ACCEPT     icmp --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:ssh 
REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited 

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
neutron-filter-top  all  --  anywhere             anywhere            
neutron-openvswi-FORWARD  all  --  anywhere             anywhere            
REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited 

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
neutron-filter-top  all  --  anywhere             anywhere            
neutron-openvswi-OUTPUT  all  --  anywhere             anywhere            

Chain neutron-filter-top (2 references)
target     prot opt source               destination         
neutron-openvswi-local  all  --  anywhere             anywhere            

Chain neutron-openvswi-FORWARD (1 references)
target     prot opt source               destination         

Chain neutron-openvswi-INPUT (1 references)
target     prot opt source               destination         

Chain neutron-openvswi-OUTPUT (1 references)
target     prot opt source               destination         

Chain neutron-openvswi-local (1 references)
target     prot opt source               destination         

Chain neutron-openvswi-sg-chain (0 references)
target     prot opt source               destination         

Chain neutron-openvswi-sg-fallback (0 references)
target     prot opt source               destination         
DROP       all  --  anywhere             anywhere

我們可以看到,資料包一進INPUT鏈,就全數轉給了neutron-openvswi-INPUT鏈一份。

而neutron-openvswi-INPUT鏈正是處理網路節點的OVS虛擬交換機資料通訊的入口策略。

我們繼續向下看neutron-openvswi-INPUT鏈有哪些規則。奇怪的是規則為空。按上下文的理解,這裡的規則為空,應該理解為全部ACCEPT。事實是這樣嗎?

為了驗證這一點,我們可以手工針對neutron-openvswi-INPUT鏈加一條明確的接收全部進來的資料包的規則:

iptables -A neutron-openvswi-INPUT -p all -j ACCEPT

再使用雲主機手工獲取一次DHCP地址,結果雲主機立即就拿到了地址。

再對網路節點的br-int介面抓包,重複雲主機獲取DHCP的操作,馬上就抓到了進入網路節點br-int子網的DHCP廣播包了。

7、結論與推測

網路節點的iptables規則,是由openvswitch服務動態維護的。上述新增的neutron-openvswi-INPUT鏈也正是啟動ovs服務後,動態生成的。根據連結串列處理邏輯,不需要顯示的設定這樣一條接受資料包的規則,也應該可以實現設計中的網路通訊能力。而事實卻不是這樣的。我沒有在更多的linux系統和版本上進行測試,至少在CentOS6.7上,必須手工增加一條連結串列規則才行。

重啟openvswitch服務後,手工加的這條規則會被清除掉。為了容易維護,可以先使用service iptables save把規則儲存至檔案中去。

在以後重啟openvswitch服務後,立即執行一次service iptables reload即可。

相關推薦

OpenStack(ice house)主機獲取DHCP地址故障分析定位處理辦法

公司生產機房最近淘汰下來一批裝置,不算太舊,普遍CPU兩顆兩核,少數四顆四核,但其中已經有若干臺主機安裝不了CentOS7的系統了。因為主機型號太舊,CentOS7已經不提供磁碟驅動的支援了。所以只好將就著裝成了CentOS6.7。為了更好得發揮餘熱,著手部署了一套Open

Linux主機獲取本機公網IP地址

forever linux ip地址 主機 因為公司的雲主機使用ifconfig和ip add命令都只能看到內網IP地址,而腳本裏面又需要獲取公網IP地址進行一些動作;# ip ad 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc

OpenStack neutron 環境主機使用keepalived vip + 給vip綁定浮動IP 步驟及註意事項

cut associate http 其它 配置 ups work all net 在openstack環境創建的多臺雲主機配置keepalived作主備,默認情況下無法生效,直接對雲主機一張網卡配置兩個IP進行測試也是同樣結果,因為: 可以看到,port所在的宿主機上i

Openstack創建主機的流程-小小白(linuxzkq)

雲計算 openstack 博主自從之前換了工作到現在,因為工作太忙的原因,已經好久沒有更新博客了,深表歉意,還望大家理解。。。。。。 今天正好有點時間,整理下Openstack創建雲主機的流程,大神勿噴。一、流程圖二、虛擬機創建流程如下 客戶(用戶)端通過命令行CLI或Dashboard Ho

小程式開發獲取到資料庫的記錄

問題描述 嘗試小程式使用雲資料庫獲取記錄,進行除錯的時候,控制檯結果一直返回這個,如圖: wx.cloud.init(); const db = wx.cloud.database() Page({ data: { }, //載入資料 onLo

如何使用SSH連線OpenStack上的主機

在上一篇部落格中我介紹瞭如何在OpenStack中建立一個Ubuntu的雲主機,並使用Console登陸,但是使用Console登陸會很不方便,所以我們經常使用SSH進行登陸。 想要進行SHH登陸,我們還需要一些準備工作。為了遠端登陸雲主機,我們首先要做的

小程序開發獲取到數據庫的記錄

spa .net ons 更新 一個 雲數據 技術分享 success ini 問題描述嘗試小程序使用雲數據庫獲取記錄,進行調試的時候,控制臺結果一直返回這個,如圖: wx.cloud.init(); const db = wx.cloud.database()

【nova】liberty版本openstack線上調整主機大小

有時虛擬機器建立後發現虛擬機器規格太小,滿足不了業務需求。於是需要線上拉伸虛擬機器的規格。 1、用admin使用者登入dashboard,建立滿足需求的虛擬機器規格 2、輸入適當的引數

百度主機使用WordPress建站ideashare.club過程總結那些坑

目錄 為什麼建站? 購買主機 配置主機 購買域名 ICP備案 解析域名 WordPress安裝 申請SSL證書 踩過的那些坑: 1,域名解析的設定 2,隱私保護開關操作失敗 3,開啟了SSL證書以及wordpress的HTTPS外掛,但是瀏覽器仍然報網

css中固定寬高div固定寬高div垂直居中的處理辦法

分配 css代碼 http min har 空間 -i dex round 固定高寬div垂直居中 如上圖,固定高寬的很簡單,寫法如下: 1 position: absolute; 2 left: 50%; 3 top: 50%; 4 width:200px;

sqlserver主機名變更後的錯誤處理辦法

sqlserver 伺服器更改主機名後,需要做一些操作,不然維護計劃 以及訂閱釋出都會有問題,具體步驟如下:可以參考 有時修改計算機名後,執行select @@servername仍返回原來的計算機名,表示"例項"並沒有隨著修改,這時需要手工執行: sp_dropserv

騰訊主機如何使用root賬號登錄,能使用root登錄怎麽辦

oot ubun 來源 fig str tar word sshd 現在 1、先用ubuntu賬號登錄,執行sudo passwd root 2、按要求輸入密碼,請牢記。 3、執行sudo vi /etc/ssh/sshd_config 4、找到PermitRootLogi

linux主機cpu一直很高降下來,系統日誌報nf_conntrack: table full, dropping packet.

bsp 由於 系統日誌 filter 啟用 conf 狀態 con session 在啟用了iptables web服務器上,流量高的時候經常會出現下面的錯誤: ip_conntrack: table full, dropping packet 這個問題的原因是由於web服

openstack iptables nat模塊引發主機訪問redis超時問題解決辦法

modprobe iptables nova-network 問題描述: 電商新申請的雲主機訪問同機房的redis ,出現小部分超時,時段時序,很是頭疼,經過排查,宿主機iptables 規則導致,卸載iptables 解決不了問題,需要徹底卸載iptalbes nat 模塊,搞定!操作方法

DHCP(動態主機獲取IP地址

動態主機獲取ip地址動態 IP地址下放過程:1、主機發送DHCP discover包發現DHCP服務器2、DHCP服務器發送DHCP offer包發送IP地址通過逆向ARP將IP地址解析成MAC地址,進行廣播,收到該MAC地址的回應證明IP地址已被占用,沒有收到證明該IP可以使用3、主機通過DHCP requ

Openstack路(六)創建主機實例

root created nat 加密 ica 加載 red pub acc 創建雲主機網絡 在控制節點上,加載admin憑證來獲取管理員能執行的命令訪問權限 [root@linux-node1 ~]# source admin-openrc 創建網絡 [root@

openstack遷移主機總匯其一(主機熱遷移)

openstack 雲主機熱遷移openstack遷移總匯目錄1 熱遷移之block-migration 1.1 查看物理主機CPU 1.2 修改hosts文件 1.3 開啟熱遷移 1.4 修改防火墻 1.5 virsh測試是否可以連通對端機器 1.5.

記一次 openstack 主機熱遷移失敗恢復過程

openstack 遷移失敗 背景:最近把openstack上的所有機器的磁盤逐一重新分區,之前是兩塊磁盤用RAID1,但是ceph已經配置了3份副本,這樣相當於存6份副本了,目前磁盤資源不太夠。機器用的是HP P440ar的陣列卡,支持建立不同模式的邏輯卷,所以把磁盤分區修改為RAID1系統盤+RA

電腦獲取到IP地址?可能是私接的DHCP在作怪

獲取IP地址DHCP服務用於給局域網的客戶機分配IP地址,從而實現統一的IP地址管理,可以有效簡化配置過程,並且防止IP沖突等異常。但是有時候我們也會發現電腦獲取不到IP的情況。這時候該怎麽診斷呢?分兩種情況:所有的電腦都獲取不到IP,基本可以判斷是DHCP服務出了問題,一般需要檢查和重啟DHCP。只有個別電

openstack主機硬盤復制查詢

ack 客戶 compute size openstack tar 查詢 per cin 假定客戶在自己的電腦上創建文件後 #宿主機查看客戶使用的是哪個磁盤 [root@compute1 ~]# lvs LV