【小(xiǎo)編推薦】無網不(bù)通(tōng),有(yǒu)"β'&網則順:OpenStack Neutron解析

2015-06-23  &↔↑nbsp;|   發布者:梁×φ♣¶國(guó)芳   |  §®β♠ 查看(kàn):3320次

IT新聞
 【編者按】Neutron是(shì)OpenStac環境的(  ₩de)核心組件(jiàn)之一(yī),了(le)解Neu <tron的(de)功能(néng)和(hé)部∏↑π署方式,是(shì)企業(yè)OpenStack系統的(de)規劃、✔‌部署和(hé)運維需要(yào)修煉的(deα↑)內(nèi)功。在本文(wén)中,Neutron&★÷ldquo;大(dà)師(shī)兄”龔永生(sh♣★§ēng)為(wèi)我們詳細介紹了(le∑"∑φ)Neutron的(de)技(jì)術(shù)原理(lǐ&ε)和(hé)發展方向,主要(yào)涉及使用(λ∞€ yòng)、部署和(hé)運維三個(gè)層面的(d₽"→e)內(nèi)容。

一(yī)、Neutron功能(néng)介← ♣‌紹

作(zuò)為(wèi)OpenStack網絡模塊,Neutron是(shì‍®<)分(fēn)布式的(de)OpenStack Iaas環境核'δ ÷心組件(jiàn)之一(yī)。Neutron,或者是®≈(shì)Neutron的(de)前身(shēn),是(sh∏β∑ ì)為(wèi)了(le)在分(fēn)布式環境∞φ下(xià)面給虛拟機(jī)提供網卡,這(zhè)是(sh←φ×ì)它的(de)最基本的(de)要(yào)求。此外 $®§(wài),Neutron還(hái)要(yào)虛拟化(huà)網絡功能(δ♣×¶néng)的(de)其它元件(jiàn),比如(rú)抽象交換♣↔機(jī),抽象負載均衡器(qì),抽象防火(huǒ)牆,抽象← λNAT。Neutron這(zhè)個(gè)團隊是(shì)先做(β↕zuò)API,做(zuò)模型,先把API畫(huà)下(xiàγ​≤)來(lái),達成比較一(yī)緻的(de ‌)時(shí)候才能(néng)往下(xià)實現(xiàn),實現(xi γ&àn)數(shù)據庫和(hé)相(xiàng)關a®σδgent等其他(tā)的(de)東(dōng↑★)西(xī)。Agent一(yī)般會(huì)是(shì)L♣<inux裡(lǐ)面的(de)相(xiàng)關技(jì)術(shù)來(lá↓↓↑i)完成。

有(yǒu)了(le)網絡元件(jiàn)的(de)虛拟化(hu∑•±à)之後Neutron還(hái)要(yào)完•☆‌ 成把這(zhè)些(xiē)虛拟網絡元件(jiàn)連σ±​起來(lái)。大(dà)家(jiā)分(fēn)散在這(zhèφ≠←←)兒(ér)能(néng)幹嘛,什(sh§©∞©én)麽東(dōng)西(xī)都(dōu)不(b↑ ♣ù)能(néng)幹。這(zhè)是(shì)Neutron要(yà∏εo)幹的(de)事(shì)情,而且這(zhè)個(gè∏★♠¶)在以後會(huì)大(dà)量的(de)占用(yò β§ng)Neutron社區(qū)人(rén)員(yuán)的(♦♦π§de)工(gōng)作(zuò)。

對(duì)Neutron來(lái)說✘>¥(shuō),圖1-1所示

圖1-1

我們先看(kàn)的(de)是(shì)虛拟化(huà)網絡組件(jiàn↓&),網絡端口,ACL,或者是(shì)交換機(jī),或αΩ≠ 者是(shì)路(lù)由器(qì)等等,再是(shì)它們之間(jiān)的∏↓(de)互聯形成的(de)虛拟網絡拓撲,這(zhè)是(&★₹₩shì)最終用(yòng)戶或者是(shì)我們在虛拟化(h↓↓±uà)看(kàn)到(dào)的(de)景象。在物(wù)理(lǐ)層看© ✘£(kàn)到(dào)外(wài)部網絡,物(wù)™>✔↕理(lǐ)機(jī),交換機(jī),路(lù)由器(qì),連♥×β 接各種網絡的(de)網線等。虛拟化(huà)網絡最終還(hái)是(s∞∞hì)要(yào)通(tōng)過物(wù)理(↕✔§lǐ)層面承載,所以我們部署的(de)時(shí)候必須要(yào)掌握物(w​¥ù)理(lǐ)之間(jiān)它們怎麽互聯,物(wù)理(lǐ)∏←網絡方面必須快(kuài)速,穩定。這(zhè)樣我們在Neutron構建↔←Ω虛拟化(huà)的(de)網絡拓撲的(de)時(shí)候才能(n×→∑éng)有(yǒu)一(yī)個(gè)'₩♣可(kě)靠的(de)承載手段。

總的(de)來(lái)說(shuō),Neutro↑✘ →n要(yào)做(zuò)的(de)事(shì)情包括:虛& £拟化(huà)網卡,虛拟化(huà)各種網絡部件(jiàn),在↕ ↕"虛拟化(huà)元件(jiàn)之間(jiān)φ"互聯,把虛拟化(huà)和(hé)物(wù)理(lǐ)網絡上(s¥•®→hàng)打通(tōng),這(zhè)≤"∑€樣虛拟化(huà)的(de)東(dōng)西(xī)才能(ε£néng)走。

二、Neutron體(tǐ)系結構

Neutron主要(yào)是(shì)用(yòn•←g)來(lái)做(zuò)模型的(de),如(rú)圖1-2所δ∏示

圖1-2

Neutron這(zhè)個(gè)TEAM的(deΩ€)首要(yào)工(gōng)作(zuò)是↔♣‌α(shì)定義API,API的(de)核心是÷π(shì)它的(de)數(shù)據模型。端口在數(shùπ‍)據模型中占有(yǒu)重要(yào)位置。端口首要(÷€¥yào)是(shì)作(zuò)為(wèi)虛拟機(jī)的(de)網卡,β✔>‍然後是(shì)路(lù)由器(qì)端口≥α↕,端口上(shàng)面還(hái)綁安全組,形成規則  來(lái)提供端口的(de)訪問(wèn)控制£π'&(zhì)。端口是(shì)綁在每個(gè)網絡↑£上(shàng)面的(de),網絡能(nén≠≠ g)給端口跟别的(de)網絡上(shàng)的(d♦♣♥≤e)端口提供隔離(lí)。端口的(de)IP地(dì)址↑↕ ‍從(cóng)子(zǐ)網來(lái)獲取。浮動IP是(shì)λ±在公網上(shàng)可(kě)以訪問(wèn)的∑'←‌(de)一(yī)個(gè)IP,在綁定到(dào)某個(gè)端¥↔口之後,這(zhè)個(gè)端口就(jiù)可(kě)以從≤♠(cóng)外(wài)界訪問(wèn)了(le)。除了(le)上(s♠€±hàng)圖顯示的(de)一(yī)些(xiē)模型外(wài),防火(  βhuǒ)牆、負載均衡器(qì)等都(dōu)是(shì)Neutron模γ®φβ型的(de)一(yī)部分(fēn)。

Neutron的(de)功能(néng)組件(jiàn)裡(lǐ)頭,Neut♠σ≥★ron Server用(yòng)來(lái)綁定所有(♥ γyǒu)的(de)模型。它通(tōng)過消息隊列和(hé)所有♥$(yǒu)的(de)agent進行(xíng)通(t✘↑¥‌ōng)信,後者真正地(dì)把網絡模型物(wù)理(lǐ)落地(dì)。">γφNeutron Server保存的(de)是(sh∞∞₽ì)虛拟網絡TOP的(de)模型,今後的(de)版本要(yào)∑ 把Neutron Server劈開(kāi),一(yī)半來(‍↕lái)實現(xiàn)API,另一(yī)半和(hé)ag÷→↓↑ents進行(xíng)交互。

網絡,端口,子(zǐ)網模型由核心API實現(xiàn),另外(wà→> i)一(yī)些(xiē)API通(tōng)過‌®✘擴展實現(xiàn)。如(rú)圖1-3所示

圖1-3

整個(gè)OpenStack是(shì)插件(jiàn)式,Neut§♠ron Server也(yě)是(shì)如(rú)此。€& Neutron中有(yǒu)核心插件(jiàn)和(héδ∏)服務插件(jiàn)的(de)區(qū)分(fēn),這(zhπ∏₩¥è)有(yǒu)社區(qū)的(de)實現(xiàn),σ®ε也(yě)有(yǒu)各個(gè)廠(c$  hǎng)商的(de)實現(xiàn)。

部署OpenStack先要(yào)定義這(zhè)些(x↕€iē)網絡:管理(lǐ)網絡,數(shù)據網絡,存儲網絡₩ε>,公有(yǒu)網絡,甚至內(nèi)部網絡。不(bù)管是(shì)Nov→↕a API,還(hái)是(shì)Neutron Ω×→Server,都(dōu)在控制(zhì)節點上βα∞(shàng)部署。如(rú)圖1-4,圖1-5和(hé)♥♣£圖1-6所示。提供三層網絡服務的(de)我們稱之為(wèi)網絡節點,防火(¥™ε₽huǒ)牆,路(lù)由器(qì)和(hé)DHCP agent等等都(dōu'​§¥)在網絡節點上(shàng)。你(nǐ)要(yào)訪問£₩©λ(wèn)虛拟機(jī),你(nǐ)要(yà₹ "αo)是(shì)公有(yǒu)網。我們看(kàn)部署方案二,它把計(jì)算'ελ(suàn)和(hé)存儲合二為(wèi)一(y≈↓<✔ī)。因為(wèi)計(jì)算(suàn) Ω‍節點服務器(qì)可(kě)能(néng)有(yǒu)λ ≠很(hěn)多(duō)槽,這(zhè)些(xiē)槽不(bù)要(yào)★€浪費(fèi)了(le),做(zuò)一(y←Ω•ī)個(gè)分(fēn)布式存儲,這(zhè)樣把存儲節點合并起來(lái)φ↓•®,但(dàn)是(shì)網絡節點還(hái)在這(♦✔zhè)兒(ér)。為(wèi)什(shén)麽把網↕₹♠絡節點分(fēn)開(kāi)?網絡節點還(há✘☆Ω₩i)是(shì)有(yǒu)它的(de)好(hǎo)處,網絡安全等等是✔ >(shì)有(yǒu)特殊性要(yào)求,在這(zhè)±↑上(shàng)面單獨部署還(hái)是(shì)挺好(hǎo)。方案三↓÷"中進一(yī)步把網絡節點上(shàng)的(♣<de)功能(néng)也(yě)并入到(dào)計(jì)算(suà•↑☆✔n)節點上(shàng),這(zhè)種部署方案可(kě)以簡化(huàλ♥)雲計(jì)算(suàn)方案中的(de)≈↔♦硬件(jiàn)規範,但(dàn)是(shì)需要(yào)做(zuò$♥)好(hǎo)隔離(lí),這(zhè)樣網絡、存儲和(→¶hé)計(jì)算(suàn)不(bù)會(huì)互相(xiàng)"♥♥競争CPU,內(nèi)存和(hé)IO資源。

圖1-4 

圖1-5 

圖1-6

三、Neutron的(de)管理(lǐ)員(yuán)特權

在Neutron中有(yǒu)兩種角色,一(yī)個(gè)角色是(shì☆ )管理(lǐ)員(yuán),另一(yī)個&₹φ(gè)角色是(shì)普通(tōng)用(yòng)戶。

由圖1-3 Neutron的(de)層次圖來($$lái)看(kàn),上(shàng)面是(shì)API,有(y↕φΩǒu)核心API和(hé)擴展API。命令neutr★™εon ext-list可(kě)以看(kàn)到(dàoΩ✘)這(zhè)個(gè)系統有(yǒu)哪些(xiē)擴展,每個(gè)擴×  ≠展大(dà)概是(shì)什(shén)麽意思。因為(wèi)有'∑©(yǒu)了(le)擴展才會(huì)有(yǒu)相(xiàng)應的(>‍★♥de)功能(néng)。還(hái)有(yǒu)超級管理(δ‌lǐ)員(yuán)比較常見(jiàn)的(de)就≠☆∏(jiù)是(shì)neutron agent l"§λσist,這(zhè)個(gè)命令很(hěn)關鍵。還(hái)≤Ω有(yǒu)網絡綁定,也(yě)隻有(yǒu)管理®σ(lǐ)員(yuán)才能(néng)看(kàn)見(jiàn),∏®如(rú)圖1-7所示

圖1-7

圖1-7上(shàng)标注部分(fēn)隻能(nén↑ πg)管理(lǐ)員(yuán)看(kàn)到(dào),用(yòng)戶看(k®←àn)不(bù)到(dào)。網絡綁定是(shì)指虛拟網絡在♥​←物(wù)理(lǐ)網絡上(shàng)面是(±☆ε‍shì)什(shén)麽類型。一(yī)般的(≥₽↔♥de)支持五種網絡類型,Gre,vxlan,vlan©®,flat,local。Physical_network對(duì)γ★ 于vlan,flat類型,指定橋接的(de)bridge。創建一(yī)Ω¥個(gè)虛拟網絡,這(zhè)些(xiē)字段系統會(huì)給普通(≤≤♣tōng)住戶填寫,但(dàn)是(shì)如(rú)果γ≤想創建成某個(gè)類型,創建到(dào)某個(gè)物(wù)理δ↓€÷(lǐ)網絡上(shàng)面去(qù),管理(lǐ)員(yuán)是(♣ ∞shì)有(yǒu)特權的(de)。用(yòng)這(zhè)個(gè)><≠特權我們看(kàn)看(kàn)創建外(wài)部網絡和(hé)子(zǐ £₹€)網。如(rú)圖1-8所示

圖1-8

我們在部署完一(yī)個(gè)雲之後,管理(lǐ)員(yuáβ↔¥∏n)上(shàng)去(qù)的(de)第一(yī)個(gè)任務就(jiù) φ≥是(shì)創建它的(de)外(wài)部網'©‍絡,網絡類型是(shì)local。管理(✔®$≤lǐ)員(yuán)還(hái)要(yào)從(≈<™cóng)網絡部門(mén)拿(ná)到(dào)一(y£™ī)部分(fēn)的(de)IP地(dì)址段和(h '₩é)網關,再來(lái)創建外(wài)部網絡子(zǐ)網。

四、Neutron的(de)普通(tōng)用₹ (yòng)戶工(gōng)作(zuò)流程

普通(tōng)用(yòng)戶的(de)工(gōng)作(z≈✘™γuò)流程大(dà)概有(yǒu)7步。如(rú)圖1-9,圖1-10和($↔×​hé)圖1-11所示

圖1-9

圖1-10

  

圖1-11

我們腦(nǎo)袋裡(lǐ)面有(yǒu)這(zhè∑€✔)個(gè)圖,對(duì)運維來(lái)說(shuō)很(hěn≥¶)關鍵。我們就(jiù)知(zhī)道(dào)大(dà)概在物(wù)理(l≤★∞≠ǐ)世界會(huì)産生(shēng)什(shén)麽問(wèn)題,會(h☆±uì)起到(dào)什(shén)麽效果★₹≥。第一(yī)步是(shì)創建虛拟網絡,×✘Neutron會(huì)把它綁定到(dào)某個(<↔∑♥gè)隧道(dào),第二步是(shì)創造子(zǐ)網,指定IP地(d↑φβ'ì)址段、網關,這(zhè)時(shí)在物(wù)♣δ 理(lǐ)上(shàng)就(jiù)會(huì)有(y™♥¥ǒu)DHCP服務器(qì)起來(lái)。$•第三個(gè)創建路(lù)由器(qì),系統就(jiù)會('< huì)把它綁定到(dào)某個(gè)節點。第四步就(jiù)是(sh‌ ì)把這(zhè)個(gè)路(lù)由器(qì>♣♠α)和(hé)子(zǐ)網連起來(lái),這(zhè)個(gè$ )虛拟路(lù)由器(qì)就(jiù)有(yǒu) ♠↑¥一(yī)個(gè)端口會(huì)連到(dào)虛拟網絡,第五步€☆♦是(shì)設置路(lù)由器(qì)的(de)外(wài)部網關,這(£₩₩±zhè)時(shí)網絡節點上(shàng)就(jiù)有(yǒu)一(y←✘σī)個(gè)虛拟設備把虛拟路(lù)由βε器(qì)和(hé)外(wài)部網絡連接起來÷±₽(lái)。第六步就(jiù)是(shì)♠♣÷€做(zuò)安全規則,第七步就(jiù)是(shì)利用(↕∑¶yòng)安全組和(hé)子(zǐ)網創建虛拟機(jī)。整個(gè)鏈條如 ₩©(rú)果很(hěn)熟悉,排除故障就(jiù)很(hěn)簡單。≥‍↕

五、Neutron運維

運維人(rén)員(yuán)很(hěn)多(duō)時(shí)候≤↕是(shì)必須要(yào)有(yǒu)管理✔ (lǐ)權限,管理(lǐ)人(rén)員(yu★≤án)就(jiù)是(shì)運維。如(rú)果我們定義清楚,也(yě)可(♣₩kě)以定義出自(zì)己的(de)角色來(lái),把Neutron的(d♠±e)角色分(fēn)工(gōng)細分(fēn)一(yī)下(xià)。下(γ★xià)面我們介紹幾個(gè)在運維中常出現(xiàn)的(de€↕÷★)問(wèn)題和(hé)排錯(cuò)手段。

1.  節點down了(l₽"↑±e),如(rú)圖1-12所示

  

圖1-12

剛剛部署完了(le),一(yī)看(kàn)上(shàng)去£♥&(qù)全部是(shì)down掉了(le),down掉了(le)怎麽辦?¥§我要(yào)查整個(gè)部署。一(yī)查沒有÷€​(yǒu)部署這(zhè)個(gè)沒有(yǒu)部署那(nà)個(∑←>•gè),這(zhè)時(shí)日(rì)志(zhì)很(hěn)關鍵。所β‌以在部署的(de)時(shí)候要(yào)統一(λ≠♥$yī)日(rì)志(zhì)收集,你(nǐ)在上(shàng)面就(jiù)可φ↔(kě)以看(kàn)到(dào)各種日(rì)志(zhì)。看(kàn)↔δ✘Rabbitmq,文(wén)件(jiàn)句柄太少(shǎo)了(l♥∞•e),或者是(shì)硬盤太小(xiǎo)了(leσ÷↕),都(dōu)會(huì)影(yǐng)響到(dàoφγ)rabbitmq接受agent的(de)₹ε'連接。還(hái)有(yǒu)檢查Server,看(kàn)Neut"σron Server是(shì)不(bù)是(shì)€≠↑↔出問(wèn)題了(le)。最後就(jiù)是(shì&π)不(bù)要(yào)出現(xiàn)時(shí)間(jiān)不∑★(bù)同步的(de)問(wèn)題。

2.  floatingip不(bù)通π☆(tōng),如(rú)圖1-13所示

  圖1-13

先看(kàn)看(kàn)VM是(shì)否分(fēn)配到(™±dào)了(le)固定IP, 是(shì)否能(néng)通(tōng≠↓)到(dào)VM網絡的(de)網關。再查詢它的(de)安全組↑γ規則,看(kàn)看(kàn)是(shì)否阻止了(le)某種網絡流量βΩλ。再看(kàn)看(kàn)這(zhè)個(gè)IP所在的(de)RO"₹UTER是(shì)什(shén)麽,再看(kàn)看®≠(kàn)router所在的(de)網絡節點,進入這(zhγ "è)個(gè)路(lù)由器(qì)所在的(de)名字空(kōng)間(jβ<λiān),察看(kàn)floatingip是(shì)否存在"Ω。軟件(jiàn)方面有(yǒu)時(shí)候重啓也↓₽δ'(yě)是(shì)能(néng)解決問(wèn)題的(de$☆↕ )。

3.  L3節點錯(cuò)誤,如(rú)圖1-1± 4所示

 

 圖1-14

L3出錯(cuò)了(le)怎麽辦?這(zhè)時(γ±≥¶shí)可(kě)能(néng)需要(yào)遷移εσ。首先我們把這(zhè)個(gè)L3 agβ♣εent設為(wèi)down,down完之後♣≈>♥看(kàn)看(kàn)這(zhè)個(gè)節點上(shàng)σ∞所有(yǒu)的(de)router。 接著(zhe)把所有(yǒu)r∏÷∏∑outer的(de)管理(lǐ)狀态設為(wèi)down, ®∞然後又(yòu)設為(wèi)up, 這(zhè)時(shí) ✘系統就(jiù)會(huì)重新綁定router到(dào)其它≈&≈λ網絡節點。這(zhè)個(gè)過程很(<♦®hěn)複雜(zá),人(rén)工(gōng)去(qù)做(zuò≈♥)會(huì)影(yǐng)響比較長(cháng)的(de)時(shí)間(j↑★✘iān)。現(xiàn)在很(hěn)多(duō)友(yǒu)商用(β∞yòng)監控,如(rú)果L3 agent出∞÷錯(cuò), 啓動自(zì)動腳本進行(xíng)遷移。 在K ♣≈ilo版中, HA router也(yě) ÷↕↔是(shì)一(yī)個(gè)不(bù‌✘∏)錯(cuò)的(de)選擇。

4.  還(hái)有(yǒu)一(yī)個(gè)端' 口綁定失敗,如(rú)圖1-15所示

  圖1-15

這(zhè)是(shì)經常遇到(dào)的(de)一(yī)個(gè)問(¥ wèn)題。在我的(de)産品中,如(rú)果出現(x♣φiàn)綁定失敗,就(jiù)直接抛出錯(cuò∞★)誤,這(zhè)樣問(wèn)題就(jiù)會(huì)第一(¶  →yī)時(shí)間(jiān)暴露出來(lái)。如(rú)果不(☆♥✔bù)這(zhè)樣做(zuò),直接把“£™ binding_failure”寫在數(≠​÷÷shù)據庫裡(lǐ)面,虛拟機(jī)就(ji¶✔≤•ù)拿(ná)不(bù)到(dào)IP。怎麽解決呢(ne)₽π♥₩?在Neutron裡(lǐ)面隻要(yào)把這( ↔®÷zhè)個(gè)host_id先置一(yī)下(xià)<♥₩,再置回去(qù),這(zhè)時(shí)候能(néng)讓Neutron &♠δ≥agent重新綁定端口,設置正确的(de)TAG.

5.  要(yào)注意TAG 4095端口,如(±§rú)圖1-16所示

  圖1-16

我們确認port不(bù)在Neutron©∞ Server中,然後删除ovs  port。如(rú)果在Neut∞"ron Server中有(yǒu),就(jiù)要(y©€ào)重新改一(yī)下(xià),讓它σ<ε的(de)binding重新做(zuò)。

做(zuò)OpenStack運維,整個(gè)網絡流程‌•是(shì)必須掌握的(de)。我們看(k ε$àn)Neutron鏈路(lù)分(fēn)↕♣析,如(rú)圖1-17所示

  圖1-17

有(yǒu)觀點說(shuō),對(duì)虛拟機(jī)的(de)λ£♠啓動過程進行(xíng)詳細分(fēn)析後就(jiù)掌握一(y±€∏λī)半的(de)OpenStack,我認為(wèi),把上(shàng)圖分γ★≠(fēn)析透了(le)就(jiù)掌握一(yī)半以上(shàng→β‌)的(de)Neutron。

在運維方面,我一(yī)直在想能(néng)不(bù)能(néng)有(y∏$ǒu)像一(yī)個(gè)機(jī)器(qì)×&β>人(rén)一(yī)樣的(de)東(dōng)西(xī)。有(yǒu)個(g‍<è)知(zhī)識庫,發現(xiàn)問σ¶≠(wèn)題報(bào)告出來(lái),甚至能(néng)自(zì)動←‌←←修複,這(zhè)也(yě)是(shì)→€¶我經常做(zuò)夢想實現(xiàn)的(de)。其♣∑γ實網絡方面還(hái)有(yǒu)很(hěn)深的(de)水↑÷ ♦(shuǐ),這(zhè)裡(lǐ)隻是(shì)講γ♠≥×了(le)一(yī)部分(fēn)。