如果你以前曾在云平臺上工作過,你一定熟悉這些系統(tǒng)的分布式和解耦性質(zhì)。解耦的分布式系統(tǒng)依賴于微服務(wù)來執(zhí)行特定的任務(wù),每個微服務(wù)都會暴露自己的REST(表示狀態(tài)轉(zhuǎn)移)API。這些微服務(wù)通常以諸如RabbitMQ或QPID等消息中間件的形式通過輕量級消息層相互通信。
這正是OpenStack的工作原理。每個主要的OpenStack組件(Keystone、Glance、Cinder、Neutron、Nova等)公開REST端點,組件和子組件通過消息中間件(如RabbitMQ)進行通信。這種方法的優(yōu)點首先是允許將故障分配給特定組件,其次是云基礎(chǔ)設(shè)施運營商可以以水平方式擴展所有服務(wù),并智能分配負載。
然而,這種分布式解耦系統(tǒng)雖然非常有利,但也帶來了固有的挑戰(zhàn)——如何正確監(jiān)控OpenStack服務(wù),更具體地說,如何識別可能的單點故障。
下面的內(nèi)容針對OpenStack服務(wù)監(jiān)控的具體情況所面臨的真實挑戰(zhàn),以及每個難題可能的解決方案。
挑戰(zhàn)一:系統(tǒng)不是一個整體
OpenStack的非整體性和解耦性通常被強調(diào)為其主要優(yōu)點。這當(dāng)然是一個重要的優(yōu)勢。然而,這顯然會使任何監(jiān)控整體服務(wù)狀態(tài)的嘗試變得復(fù)雜。在每個組件執(zhí)行一個特定任務(wù)的分布式系統(tǒng)中,每個組件進一步分布到多個子組件中,因此,不難理解當(dāng)特定一部分軟件發(fā)生故障時,確定對服務(wù)的影響是多么困難。
克服這個困難的第一步是了解云。你需要確定所有主要組件之間的關(guān)系,然后確定每個獨立的特定服務(wù)之間的關(guān)系,它們的故障可能影響整體服務(wù)。簡單地說,你需要知道云中所有組件之間的關(guān)系。
考慮到這一點,你不僅需要監(jiān)視每個單獨組件的狀態(tài)(正在運行或故障停止),還要確定其他服務(wù)如何受到故障的影響。
例如,如果Keystone死機,沒有人能夠獲取服務(wù)目錄或登錄任何服務(wù),但這通常不會影響虛擬機或其他已建立的云服務(wù)(對象存儲、塊存儲、負載均衡器等),除非重新啟動服務(wù)且Keystone仍然宕機。然而,如果Apache失效,通過Apache工作的Keystone和其他類似的API服務(wù)可能會受到影響。
因此,監(jiān)控平臺或解決方案不僅必須能夠評估各個服務(wù)的狀態(tài),而且還要能夠在服務(wù)故障之間進行關(guān)聯(lián),以便檢查對整個系統(tǒng)的真正影響,并相應(yīng)地發(fā)送警報或通知。
挑戰(zhàn)二:OpenStack不僅僅是OpenStack
基于OpenStack的云不僅是分布式和解耦式系統(tǒng),也是一種可在操作系統(tǒng)和其他在云基礎(chǔ)設(shè)施中或與之相關(guān)的設(shè)備中創(chuàng)建資源的編排解決方案。這些資源包括虛擬機(Xen、KVM或其他管理程序軟件組件)、持久卷(NFS存儲服務(wù)器、Ceph群集、基于SAN的LVM卷或其他存儲后端)、網(wǎng)絡(luò)實體(端口,網(wǎng)橋,網(wǎng)絡(luò),路由器,負載平衡器,防火墻,VPN等)和臨時磁盤(駐留在操作系統(tǒng)目錄中的Qcow2文件)以及許多其他小型系統(tǒng)。
因此,監(jiān)測解決方案必須考慮到這些基礎(chǔ)組件。雖然這些資源可能不太復(fù)雜,并且不太容易出現(xiàn)故障,但是當(dāng)它們停止運行時,主要OpenStack服務(wù)中的日志可能會掩蓋真實的原因。它們僅在受到影響的OpenStack服務(wù)中顯示結(jié)果,而不顯示設(shè)備或失效的操作系統(tǒng)軟件的實際根本原因。
例如,如果libvirt失效,組件Nova將無法部署虛擬實例。 Nova-compute作為服務(wù)將被啟動并運行,但在部署階段實例將失敗(實例狀態(tài):錯誤)。為了檢測這一點,你需要在nova-compute日志之外還監(jiān)控libvirt(服務(wù)狀態(tài)、指標(biāo)及日志)。
因此,有必要檢查底層軟件和主要組件之間的關(guān)系,以及監(jiān)控最終的鏈接,并考慮所有最終服務(wù)的一致性測試。你需要監(jiān)控所有內(nèi)容:存儲、網(wǎng)絡(luò)、hypervision層、每個單獨的組件以及之間的關(guān)系。
挑戰(zhàn)三:跳出固有思維模式
Cacti、Nagios和Zabbix是OpenSource監(jiān)控解決方案的好例子。這些解決方案定義了一組非常具體的度量標(biāo)準(zhǔn),用于識別操作系統(tǒng)上的可能問題,但是它們不提供確定更復(fù)雜的故障情況或甚至服務(wù)狀態(tài)所需的專門的指標(biāo)。
這是你需要有創(chuàng)造性的地方。你可以實施專門的指標(biāo)和測試,以定義服務(wù)是否正常、降級或完全失敗。
像OpenStack這樣的分布式系統(tǒng),其中每個核心服務(wù)都暴露了一個REST API,并且連接到基于TCP的消息服務(wù),容易受到網(wǎng)絡(luò)瓶頸、連接池耗盡和其他相關(guān)問題的影響。許多相關(guān)服務(wù)連接到基于SQL的數(shù)據(jù)庫,這可能會耗盡其最大連接池,意味著需要在監(jiān)控解決方案中實施正確的連接狀態(tài)監(jiān)控指標(biāo)(建立、散布等待、關(guān)閉等),以檢測可能的、影響API的連接相關(guān)問題。此外,可以構(gòu)建cli測試來檢查端點狀態(tài)并測量其響應(yīng)時間,這可以被轉(zhuǎn)換成實際顯示服務(wù)真實狀態(tài)的指標(biāo)。