天天看點

【OpenStack】Quantum(Grizzly)中的agentQuantum(Grizzly)中的agentextension agent服務 總結

Quantum(Grizzly)中的agent

本部落格歡迎轉發,但請保留原作者資訊

新浪微網誌:@孔令賢HW;

QQ:363210168

部落格位址:http://blog.csdn.net/lynn_kong

内容系本人學習、研究和總結,如有雷同,實屬榮幸!

更新記錄:

2013.5.2  建立network時的流程圖與代碼有些不太一緻,澄清之

OpenStack的G版中agent機制的變化還是比較大的,昨天看到mirantis發表了一篇Blog簡單分析了G版和F版中quantum agent。連結:Anew agent management approach for Quantum in OpenStack Grizzly。同時,國内的沙克大師也将其轉載并談了自己的簡單分析,連結:陳沙克日志。這裡,我從代碼層面詳細的介紹一下G版中的agent以及自己的一點了解,歡迎拍磚!

extension

G版中增加了兩個關于agent的extension,alias分别是agent和agent_scheduler,相應的,增加了幾個新的資源(resource),每一個資源的屬性和操作用下圖一目了然:

【OpenStack】Quantum(Grizzly)中的agentQuantum(Grizzly)中的agentextension agent服務 總結

如上圖,以前quantum中的quantum agent, dhcp agent, l3 agent現在都是Agent對象(注意Agent對象目前不能調用API建立),在節點上部署之後,通過消息隊列将自己的資訊通知plugin,plugin将agent資訊管理起來,為後續的排程使用。

以dhcp agent為例(l3 agent同理):

在Folsom版本,一個環境中隻有一個dhcp agent,該負責整個環境中虛拟機的IP位址配置設定。在Grizzly版,可以部署多個dhcp agent,每一個agent負責為指定的network内的虛拟機配置設定IP位址,有兩種方法綁定agent和network:

1. 手動模式:調用上圖中的agent/{agent_id}/dhcp-network中的create方法,手動将某個network與agent綁定

2. 自動模式:建立network時,quantum會根據排程算法選擇一個agent,将其與network綁定

目前Grizzly版本中,排程算法僅僅是一個随機選取,後續會做成與Nova,Cinder一樣,會有提供很多排程算法供選擇。

一旦agent與network綁定,後續該network上面的subnet,port操作,都隻會通知該agent

引用mirantis Blog中的一張create_network流程圖:

【OpenStack】Quantum(Grizzly)中的agentQuantum(Grizzly)中的agentextension agent服務 總結

(2013.5.2号新增)在G版的代碼中,建立network的流程與上圖有些不一緻的地方。建立網絡時不會立即選擇一個dhcp agent關聯,管理者可以在network建立成功後調用接口關聯agent(手動模式)。而在建立port時,會判斷port所屬的network是否關聯有dhcp agent,如果沒有,則此時會根據算法選擇一個agent進行關聯,同時向該agent發送建立network的通知,然後再發送建立port的通知。

agent服務

在Folsom版本中,agent僅僅是一個python程序,使用一個腳本管理,自生自滅。在Grizzly中,将agent作為服務啟動,需要定時上報自身狀态和一些資訊,供plugin管理和排程。還是以dhcp agent為例,用圖的方式講解agent的啟動步驟。

【OpenStack】Quantum(Grizzly)中的agentQuantum(Grizzly)中的agentextension agent服務 總結

總結

Essex版本的multihost模式,是在每個計算節點都部署nova-network,Folsom版本也可以使用nova-network代替不太成熟的Quantum。但OpenStack的發展方向是Quantum,後續很多advanceservice都是基于Quantum,且已經停止了對nova-network的開發維護,是以G版以後主流的部署方式還是Quantum。

當使用nova-network時,碰到的一個典型問題就是單點故障(SPoF),因為一套環境中隻有一個nova-network,負責配置設定IP和NAT,大規模部署情況下,該節點負載會很高,是整個網絡的性能瓶頸。于是,主流的解決辦法是采用multihost模式,即在每個計算節點都部署nova-network,隻負責該節點上虛拟機的IP配置設定和NAT,這樣把整個網絡的流量平均分到了每個計算節點上,而且互相之間沒有依賴關系,大大提高了可用性、可靠性。

最初的Quantum,是不支援multihost部署的,但有了agentschedule,可以以類似multihost的方式部署agent,但其實跟multihost還是有差別的。

首先,multihost模式中的nova-network是與計算節點綁定的,而agent不與計算節點綁定,隻與network或router綁定。一個agent可以綁定多個network或router。

其次,multihost中一個nova-network挂了,隻影響其所在計算節點的虛拟機網絡;而某一個agent挂了,會影響它所綁定的network或router上的所有虛拟機

最後,multihost模式沒有關于網絡的排程;而agent是可以排程的,雖然現在隻是簡單的随機選取,但隻要plugin有足夠的資訊(比如目前已經有:一個dhcpagent上有多少network,多少subnet,多少port這樣的資訊),可以完全支援很多負載的排程方式。

最後,再次提醒:

本部落格歡迎轉發,但請保留原作者資訊

新浪微網誌:@孔令賢HW;

QQ:363210168

部落格位址:http://blog.csdn.net/lynn_kong

内容系本人學習、研究和總結,如有雷同,實屬榮幸!

繼續閱讀