本發(fā)明實施例涉及信息技術(shù)領(lǐng)域,并且更具體地,涉及一種處理虛擬機(jī)集群的方法和計算機(jī)系統(tǒng)。
背景技術(shù):
集群(Cluster)通常是由一些互相連接在一起的節(jié)點(例如,計算機(jī)或虛擬機(jī))構(gòu)成的一個并行或分布式系統(tǒng)。這些節(jié)點一起工作并運行一系列共同的應(yīng)用程序,同時,為用戶和應(yīng)用程序提供單一的系統(tǒng)映射。例如,對于計算機(jī)集群而言,從外部來看,計算機(jī)集群是一個系統(tǒng),對外提供統(tǒng)一的服務(wù),對內(nèi)部來說,集群內(nèi)的計算機(jī)在物理上通過電纜連接,在邏輯上則通過集群軟件連接。服務(wù)器集群是把多臺服務(wù)器通過通信鏈路連接,從外部看來,這些服務(wù)器就像一臺服務(wù)器在工作,而對內(nèi)部來說,外來的負(fù)載通過一定的機(jī)制動態(tài)地分配到服務(wù)器中去,從而達(dá)到超級服務(wù)器才有的高性能、高可用。
虛擬機(jī)(英文:Virtual Machine,簡稱“VM”)是在主機(jī)(host)上運行的軟件,其可以在計算機(jī)平臺和終端用戶之間創(chuàng)造一種環(huán)境,而終端用戶則是基于這個軟件所創(chuàng)造的環(huán)境來操作。虛擬機(jī)集群是指多個虛擬機(jī)相互連接在一起構(gòu)成的并行或分布式系統(tǒng)。
虛擬機(jī)集群通常采用主/從(Master/Slave)架構(gòu)的方式。Master主機(jī)負(fù)責(zé)監(jiān)測所有的slave主機(jī),并在Slave主機(jī)宕機(jī)時對Slave主機(jī)上的虛擬機(jī)進(jìn)行重啟。從節(jié)點也會接收主節(jié)點發(fā)送的心跳消息,以便確認(rèn)主節(jié)點是否存活。如果主Master主機(jī)的主機(jī)宕機(jī)了,集群中的Slave主機(jī)會重新選擇一個Master主機(jī)。
Master主機(jī)作為集群的管理中心,負(fù)責(zé)集群中所有Slave主機(jī)的監(jiān)測和管理。當(dāng)集群中的Slave主機(jī)過多時,Master主機(jī)的性能會不足以支持維護(hù)大量的Slave主機(jī),使得Master成為整個集群的瓶頸,降低了虛擬機(jī)集群的整體性能。同時,當(dāng)Master主機(jī)的主機(jī)發(fā)生故障時,Slave主機(jī)將重新選出新的Master主機(jī)。這一過程需要耗費一定的時間,因此會拖延集群的故障恢 復(fù)時間,降低了虛擬機(jī)集群的容錯能力。此外,一些Slave主機(jī)可能失去與Master主機(jī)的聯(lián)系。這部分Slave主機(jī)會重新選舉Master主機(jī)。這就導(dǎo)致了一個集群中出現(xiàn)了兩個各自獨立的集群分區(qū)。由于一個集群中出現(xiàn)了兩個獨立的集群分區(qū),使得兩個分區(qū)的Master主機(jī)均誤以為對方出現(xiàn)了故障,從而爭搶資源,造成資源不足和數(shù)據(jù)破壞,降低了虛擬機(jī)集群的性能。因此,采用主節(jié)點為虛擬機(jī)集群的管理中心會影響虛擬機(jī)集群的容錯能力和性能。
技術(shù)實現(xiàn)要素:
本發(fā)明實施例提供的處理虛擬機(jī)集群的方法和計算機(jī)系統(tǒng),能夠提高虛擬機(jī)集群的容錯能力和性能。
第一方面,提供了一種處理虛擬機(jī)集群的方法,虛擬機(jī)集群包括N個虛擬機(jī),N個虛擬機(jī)中的每個虛擬機(jī)保存虛擬機(jī)列表,并以對等方式作為第一虛擬機(jī)進(jìn)行工作,虛擬機(jī)列表包括N個虛擬機(jī)的信息,第一方面的方法包括:第一虛擬機(jī)向N個虛擬機(jī)中的至少兩個鄰居虛擬機(jī)發(fā)送第一心跳消息,以便至少兩個鄰居虛擬機(jī)檢測第一心跳消息,其中第一心跳消息的檢測結(jié)果用于確定第一虛擬機(jī)的狀態(tài),第一虛擬機(jī)根據(jù)N個虛擬機(jī)的信息與至少兩個鄰居虛擬機(jī)建立了鄰居關(guān)系;第一虛擬機(jī)作為至少兩個虛擬機(jī)中的第二虛擬機(jī)的鄰居虛擬機(jī),檢測第二虛擬機(jī)發(fā)送的第二心跳消息,其中第二心跳消息的檢測結(jié)果和第二虛擬機(jī)的其它鄰居虛擬機(jī)檢測第二虛擬機(jī)發(fā)送的心跳消息得到的檢測結(jié)果用于確定第二虛擬機(jī)的狀態(tài)。
結(jié)合第一方面,在第一方面的第一種可能的實現(xiàn)方式中,該方法還包括:第一虛擬機(jī)向至少兩個鄰居虛擬機(jī)發(fā)送第一同步信息,第一同步信息用于指示第一虛擬機(jī)中保存的虛擬機(jī)列表的更新,以便至少兩個鄰居虛擬機(jī)更新各自保存的虛擬機(jī)列表;第一虛擬機(jī)接收第二虛擬機(jī)發(fā)送的第二同步信息,第二同步信息用于指示第二虛擬機(jī)中保存的虛擬機(jī)列表的更新,第一虛擬機(jī)根據(jù)第二同步信息更新第一虛擬機(jī)保存的虛擬機(jī)列表。
結(jié)合第一方面或第一種可能的實現(xiàn)方式,在第三種可能的實現(xiàn)方式中,所述至少兩個鄰居虛擬機(jī)包括所述N個虛擬機(jī)中具備與所述第一虛擬機(jī)直接交互信息的能力的二至六個虛擬機(jī)。
結(jié)合第二方面或第二方面的上述任一種可能的實現(xiàn)方式,在第三種可能的實現(xiàn)方式中,該方法還包括:第一虛擬機(jī)在確定第二虛擬機(jī)的狀態(tài)為故障 的情況下,第二虛擬機(jī)觸發(fā)第二虛擬機(jī)重啟或觸發(fā)第二虛擬機(jī)從第二虛擬機(jī)的源主機(jī)遷移至目標(biāo)主機(jī),其中所述源主機(jī)為故障主機(jī),所述目標(biāo)主機(jī)為正常主機(jī)。
結(jié)合第一方面或第一方面的上述任一種可能的實現(xiàn)方式,在第四種可能的實現(xiàn)方式中,該第一反饋信息還包括該第二虛擬機(jī)的配置信息;該方法還包括:第一虛擬機(jī)在確定第二虛擬機(jī)的狀態(tài)為故障且無法重啟的情況下,第一虛擬機(jī)觸發(fā)第二虛擬機(jī)從第二虛擬機(jī)所在的源主機(jī)遷移至目標(biāo)主機(jī),其中所述源主機(jī)為故障主機(jī),所述目標(biāo)主機(jī)為正常主機(jī)。
結(jié)合第一方面上述任一種可能的實現(xiàn)方式,在第五種可能的實現(xiàn)方式中,該方法還包括:第一虛擬機(jī)確定第二虛擬機(jī)的狀態(tài)為離開的情況下,第一虛擬機(jī)觸發(fā)第二虛擬機(jī)從第二虛報機(jī)所在的源主機(jī)上刪除。
結(jié)合第一方面或第一方面的上述任一種可能的實現(xiàn)方式,在第六種可能的實現(xiàn)方式中,第一方面的方法還包括:第一虛擬機(jī)向N個虛擬機(jī)的上層節(jié)點發(fā)送第二心跳消息的檢測結(jié)果,以便上層節(jié)點根據(jù)第二心跳消息的檢測結(jié)果和第二虛擬機(jī)發(fā)送給第二虛擬機(jī)的其它鄰居虛擬機(jī)的心跳消息的檢測結(jié)果確定第二虛擬機(jī)的狀態(tài);第一虛擬機(jī)接收上層節(jié)點發(fā)送的指示消息,指示消息用于指示第二虛擬機(jī)的狀態(tài)。
結(jié)合第一方面或第一方面的上述任一種可能的實現(xiàn)方式,在第七種可能的實現(xiàn)方式中,第一方面的方法還包括:第一虛擬機(jī)接收第二虛擬機(jī)的其它鄰居虛擬機(jī)檢測第二虛擬機(jī)發(fā)送的心跳消息得到的檢測結(jié)果;第一虛擬機(jī)根據(jù)第二心跳消息的檢測結(jié)果和第二虛擬機(jī)的其它鄰居虛擬機(jī)檢測第二虛擬機(jī)發(fā)送的心跳消息得到的檢測結(jié)果確定第二虛擬機(jī)的狀態(tài)。
結(jié)合第一方面或第一方面的上述任一種可能的實現(xiàn)方式,在第八種可能的實現(xiàn)方式中,在第一虛擬機(jī)加入虛擬機(jī)集群時,第一方面的方法還包括:第一虛擬機(jī)向N個虛擬機(jī)中的其它虛擬機(jī)發(fā)送第一虛擬機(jī)的信息;第一虛擬機(jī)接收N虛擬機(jī)中其它虛擬機(jī)發(fā)送的各自的信息,以生成虛擬機(jī)列表。
結(jié)合第一方面或第一方面的上述任一種可能的實現(xiàn)方式,在第九種可能的實現(xiàn)方式中,在第一虛擬機(jī)加入虛擬機(jī)集群時,第一虛擬機(jī)向索引服務(wù)器發(fā)送注冊信息,注冊信息包括第一虛擬機(jī)的信息,其中索引服務(wù)器為虛擬機(jī)集群的注冊中心,用于為虛擬機(jī)集群中的虛擬機(jī)提供注冊服務(wù);第一虛擬機(jī)接收索引服務(wù)器發(fā)送的N個虛擬機(jī)中的其它虛擬機(jī)的信息,以生成虛擬機(jī)列 表。
結(jié)合第一方面或第一方面的上述任一種可能的實現(xiàn)方式,在第十種可能的實現(xiàn)方式中,還包括:第一虛擬機(jī)采用鄰居關(guān)系算法,根據(jù)虛擬機(jī)列表中保存的N個虛擬機(jī)的信息,從N個虛擬機(jī)中選擇至少兩個作為鄰居虛擬機(jī)。
結(jié)合第一方面或第一方面的上述任一種可能的實現(xiàn)方式,在第十一種可能的實現(xiàn)方式中,N個虛擬機(jī)的信息包括:N個虛擬機(jī)中的每個虛擬機(jī)的狀態(tài)信息、N個虛擬機(jī)中的每個虛擬機(jī)的鄰居關(guān)系信息、N個虛擬機(jī)中的每個虛擬機(jī)的啟動次數(shù)、N個虛擬機(jī)中的每個虛擬機(jī)的心跳值、N個虛擬機(jī)中的每個虛擬機(jī)的配置信息以及虛擬機(jī)集群的配置信息中的任意一個或多個的組合。
第二方面,提供了一種計算機(jī)系統(tǒng),其特征在于,計算機(jī)系統(tǒng)包括至少一個計算機(jī)節(jié)點的物理硬件層,在至少一個計算機(jī)節(jié)點的物理硬件層之上運行虛擬機(jī)集群,虛擬機(jī)集群包括N個虛擬機(jī),N個虛擬機(jī)中的每個虛擬機(jī)保存虛擬機(jī)列表,并以對等方式作為第一虛擬機(jī)進(jìn)行工作,虛擬機(jī)列表包括N個虛擬機(jī)的信息,第一虛擬機(jī)包括:發(fā)送模塊,用于向N個虛擬機(jī)中的至少兩個鄰居虛擬機(jī)發(fā)送第一心跳消息,以便至少兩個鄰居虛擬機(jī)檢測第一心跳消息,其中第一心跳消息的檢測結(jié)果用于確定第一虛擬機(jī)的狀態(tài),第一虛擬機(jī)根據(jù)N個虛擬機(jī)的信息與至少兩個鄰居虛擬機(jī)建立了鄰居關(guān)系;接收模塊,用于檢測至少兩個虛擬機(jī)中的第二虛擬機(jī)發(fā)送的第二心跳消息,其中第一虛擬機(jī)為第二虛擬機(jī)的鄰居虛擬機(jī),第二心跳消息的檢測結(jié)果和第二虛擬機(jī)的其它鄰居虛擬機(jī)檢測第二虛擬機(jī)發(fā)送的心跳消息得到的檢測結(jié)果用于確定第二虛擬機(jī)的狀態(tài)。
結(jié)合第二方面,在第一種可能的實現(xiàn)方式中,發(fā)送模塊還向至少兩個鄰居虛擬機(jī)發(fā)送第一同步信息,第一同步信息用于指示第一虛擬機(jī)中保存的虛擬機(jī)列表的更新,以便至少兩個鄰居虛擬機(jī)更新各自保存的虛擬機(jī)列表,接收模塊還接收第二虛擬機(jī)發(fā)送的第二同步信息,第二同步信息用于指示第二虛擬機(jī)中保存的虛擬機(jī)列表的更新,第一虛擬機(jī)還包括更新模塊,用于根據(jù)第二同步信息更新第一虛擬機(jī)保存的虛擬機(jī)列表。
結(jié)合第二方面或第二方面的第一種可能的實現(xiàn)方式,在第二種可能的實現(xiàn)方式中,所述至少兩個鄰居虛擬機(jī)包括所述N個虛擬機(jī)中具備與所述第一虛擬機(jī)直接交互信息的能力的二至六個虛擬機(jī)。
結(jié)合第二方面或第二方面的上述任一種可能的實現(xiàn)方式,在第三種可能的實現(xiàn)方式中,第二方面的計算機(jī)系統(tǒng)還包括:觸發(fā)模塊,用于在確定第二虛擬機(jī)的狀態(tài)為故障的情況下,觸發(fā)第二虛擬機(jī)重啟或觸發(fā)第二虛擬機(jī)從第二虛擬機(jī)的源主機(jī)遷移至目標(biāo)主機(jī),其中所述源主機(jī)為故障主機(jī),所述目標(biāo)主機(jī)為正常主機(jī)。
結(jié)合第二方面或第二方面的上述任一種可能的實現(xiàn)方式,在第四種可能的實現(xiàn)方式中,第二方面的計算機(jī)系統(tǒng)還包括:觸發(fā)模塊,用于在確定所述第二虛擬機(jī)的狀態(tài)為故障且無法重啟的情況下,觸發(fā)所述第二虛擬機(jī)從所述第二虛擬機(jī)所在的源主機(jī)遷移至目標(biāo)主機(jī),其中所述源主機(jī)為故障主機(jī),所述目標(biāo)主機(jī)為正常主機(jī)。
結(jié)合第二方面或第二方面的上述任一種可能的實現(xiàn)方式,在第五種可能的實現(xiàn)方式中,第二方面的計算機(jī)系統(tǒng)還包括:觸發(fā)模塊,用于在確定所述第二虛擬機(jī)的狀態(tài)為離開的情況下,觸發(fā)所述第二虛擬機(jī)從所述第二虛報機(jī)所在的源主機(jī)上刪除。
結(jié)合第二方面或第二方面的上述任一種可能的實現(xiàn)方式,在第六種可能的實現(xiàn)方式中,發(fā)送模塊還向N個虛擬機(jī)的上層節(jié)點發(fā)送第二心跳消息的檢測結(jié)果,以便上層節(jié)點根據(jù)第二心跳消息的檢測結(jié)果和第二虛擬機(jī)發(fā)送給第二虛擬機(jī)的其它鄰居虛擬機(jī)的心跳消息的檢測結(jié)果確定第二虛擬機(jī)的狀態(tài),接收模塊還接收上層節(jié)點發(fā)送的指示消息,指示消息用于指示第二虛擬機(jī)的狀態(tài)。
結(jié)合第二方面或第二方面的上述任一種可能的實現(xiàn)方式中,在第七種可能的實現(xiàn)方式中,接收模塊還接收第二虛擬機(jī)的其它鄰居虛擬機(jī)檢測第二虛擬機(jī)發(fā)送的心跳消息得到的檢測結(jié)果,接收模塊還根據(jù)第二心跳消息的檢測結(jié)果和第二虛擬機(jī)的其它鄰居虛擬機(jī)檢測第二虛擬機(jī)發(fā)送的心跳消息得到的檢測結(jié)果確定第二虛擬機(jī)的狀態(tài)。
結(jié)合第二方面或第二方面的上述任一種可能的實現(xiàn)方式,在第八種可能的實現(xiàn)方式中,發(fā)送模塊還在第一虛擬機(jī)加入虛擬機(jī)集群時,向N個虛擬機(jī)中的其它虛擬機(jī)發(fā)送第一虛擬機(jī)的信息,其中索引服務(wù)器為虛擬機(jī)集群的注冊中心,用于為虛擬機(jī)集群中的虛擬機(jī)提供注冊服務(wù),接收模塊還接收N虛擬機(jī)中其它虛擬機(jī)發(fā)送的各自的信息,以生成虛擬機(jī)列表。
結(jié)合第二方面或第二方面的上述任一種可能的實現(xiàn)方式中,在第九種可 能的實現(xiàn)方式中,發(fā)送模塊還在第一虛擬機(jī)加入虛擬機(jī)集群時,向索引服務(wù)器發(fā)送注冊信息,注冊信息包括第一虛擬機(jī)的信息,接收模塊還接收索引服務(wù)器發(fā)送的N個虛擬機(jī)中的其它虛擬機(jī)的信息,以生成虛擬機(jī)列表。
結(jié)合第二方面或第二方面的上述任一種可能的實現(xiàn)方式中,在第十種可能的實現(xiàn)方式中,第二方面的計算機(jī)系統(tǒng)還包括:選擇模塊,用于采用鄰居關(guān)系算法,根據(jù)虛擬機(jī)列表中保存的N個虛擬機(jī)的信息,從N個虛擬機(jī)中選擇至少兩個作為鄰居虛擬機(jī)。
結(jié)合第二方面或第二方面的上述任一種可能的實現(xiàn)方式中,在第十一種可能的實現(xiàn)方式中,N個虛擬機(jī)的信息包括:N個虛擬機(jī)中的每個虛擬機(jī)的狀態(tài)信息、N個虛擬機(jī)中的每個虛擬機(jī)的鄰居關(guān)系信息、N個虛擬機(jī)中的每個虛擬機(jī)的啟動次數(shù)、N個虛擬機(jī)中的每個虛擬機(jī)的心跳值、N個虛擬機(jī)中的每個虛擬機(jī)的配置信息以及虛擬機(jī)集群的配置信息中的任意一個或多個的組合。
上述技術(shù)方案中,根據(jù)本發(fā)明的實施例,虛擬機(jī)集群中的每個虛擬機(jī)可以根據(jù)其保存虛擬機(jī)列表確定至少兩個鄰居虛擬機(jī),虛擬機(jī)集群中的每個虛擬機(jī)可以向其至少兩個鄰居虛擬機(jī)發(fā)送心跳消息以便根據(jù)至少兩個鄰居虛擬機(jī)的檢測結(jié)果確定該虛擬機(jī)的狀態(tài)。由于每個虛擬機(jī)的狀態(tài)均可以由其鄰居虛擬機(jī)檢測該虛擬機(jī)發(fā)送的心跳信息的結(jié)果來確定,因此避免了主/從結(jié)構(gòu)存在的Master成為整個集群的瓶頸問題,同時由于不會出現(xiàn)重新選舉Master主機(jī)的情況,因此,使得采用這種方案進(jìn)行狀態(tài)確定的虛擬機(jī)集群不會造成故障恢復(fù)時間的延遲和爭搶資源的情況,因此,提高了虛擬機(jī)集群的容錯能力和性能。
附圖說明
為了更清楚地說明本發(fā)明實施例的技術(shù)方案,下面將對本發(fā)明實施例中所需要使用的附圖作簡單地介紹,顯而易見地,下面所描述的附圖僅僅是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1是根據(jù)本發(fā)明實施例提供的虛擬機(jī)集群的架構(gòu)的示意圖。
圖2是根據(jù)本發(fā)明實施例的一種處理虛擬機(jī)集群的方法的示意性流程圖。
圖3是本發(fā)明的實施例的虛擬機(jī)集群的鄰居關(guān)系的示意圖。
圖4是根據(jù)本發(fā)明的實施例的建立虛擬機(jī)集群的過程的示意性流程圖。
圖5是根據(jù)本發(fā)明的實施例的心跳檢測機(jī)制的示意圖。
圖6是根據(jù)本發(fā)明的實施例的虛擬機(jī)間同步的示意性流程圖。
圖7是根據(jù)本發(fā)明的實施例的一種計算機(jī)系統(tǒng)的結(jié)構(gòu)示意圖。
圖8是根據(jù)本發(fā)明的實施例的一種計算機(jī)系統(tǒng)800的結(jié)構(gòu)示意圖。
具體實施方式
下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,的實施例是本發(fā)明的一部分實施例,而不是全部實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動的前提下所獲得的所有其他實施例,都應(yīng)屬于本發(fā)明保護(hù)的范圍。
圖1是根據(jù)本發(fā)明實施例提供的虛擬機(jī)集群100的架構(gòu)的示意圖。
如圖1所示,虛擬機(jī)集群100為分布式架構(gòu),虛擬機(jī)集群中的多個虛擬機(jī)從用戶端來看整體上作為單一虛擬機(jī)為用戶設(shè)備提供業(yè)務(wù)。與常規(guī)技術(shù)中Master/Slave虛擬機(jī)集群架構(gòu)相比,虛擬機(jī)集群100中的虛擬機(jī)之間的關(guān)系是對等的。虛擬機(jī)集群100所在的計算機(jī)系統(tǒng)例如可以包括物理主機(jī)ESXi-1、ESXi-2和ESXi-3。例如,在主機(jī)ESXi-1上運行虛擬機(jī)VM101和VM102,在主機(jī)ESXi-2上運行虛擬機(jī)VM103和VM104,在主機(jī)ESXi-3上運行虛擬機(jī)VM105和VM106。虛擬機(jī)集群100中的每個虛擬機(jī)可以維護(hù)一個虛擬機(jī)列表,用于保存虛擬機(jī)集群100中的虛擬機(jī)的信息,包括狀態(tài)信息、配置信息和/或管理信息。虛擬機(jī)之間的信息同步可以采用對等(Peer to Peer,P2P)協(xié)議來實現(xiàn)。其中狀態(tài)信息用于指示虛擬機(jī)的工作狀態(tài),例如,CPU的使用量或內(nèi)存的使用量等信息。配置信息用于指示配置虛擬機(jī)的相關(guān)信息,例如,分配給虛擬機(jī)的IP地址等信息。管理信息用于指示管理虛擬機(jī)的信息,例如,虛擬機(jī)的心跳值、虛擬機(jī)的啟動次數(shù)、虛擬機(jī)的故障、重啟或遷移等信息。
虛擬機(jī)VM101與虛擬機(jī)VM102、VM103、VM105和VM106建立了鄰居關(guān)系;虛擬機(jī)102與虛擬機(jī)VM101、VM104和VM105建立了鄰居關(guān)系;虛擬機(jī)103與虛擬機(jī)VM101、VM106和VM104建立了鄰居關(guān)系;虛擬機(jī)104與虛擬機(jī)VM101、VM102和VM106建立了鄰居關(guān)系;虛擬機(jī)105與虛 擬機(jī)VM101、VM102和VM103建立了鄰居關(guān)系;虛擬機(jī)106與虛擬機(jī)VM101、VM104和VM105建立了鄰居關(guān)系。虛擬機(jī)的鄰居關(guān)系也可以記錄在虛擬機(jī)列表中。例如,虛擬機(jī)列中還可以列出了每個虛擬機(jī)的鄰居虛擬機(jī)。每個虛擬機(jī)可以采用特定的鄰居關(guān)系算法確定各自的鄰居虛擬機(jī)。
應(yīng)理解,上述虛擬機(jī)集群可以位于一個物理主機(jī)上,也可以位于多個物理主機(jī)上。虛擬機(jī)之間的鄰居關(guān)系與其所處的物理主機(jī)無關(guān),即從分布式集群的角度,只考慮虛擬機(jī),而不考慮其實際位于哪一臺物理主機(jī)。虛擬機(jī)可以將位于同一物理主機(jī)上的虛擬機(jī)作為鄰居,也可以將位于其它物理主機(jī)上的虛擬機(jī)作為鄰居。
還應(yīng)理解,上述鄰居關(guān)系可以是指物理上的鄰居關(guān)系,也可以是指邏輯上的鄰居關(guān)系。
還應(yīng)理解,上述物理主機(jī)和每個物理主機(jī)上虛擬機(jī)的數(shù)目僅僅是舉例說明。本發(fā)明的實施例對每個物理主機(jī)上的虛擬機(jī)的數(shù)目和虛擬機(jī)集群所在的物理主機(jī)的數(shù)目不作限定。
圖2是根據(jù)本發(fā)明實施例的一種處理虛擬機(jī)集群的方法的示意性流程圖。圖2所示的方法由圖1的虛擬機(jī)集群100中的每個虛擬機(jī)執(zhí)行,虛擬機(jī)集群包括N個虛擬機(jī),N個虛擬機(jī)中的每個虛擬機(jī)保存虛擬機(jī)列表,并以對等方式作為第一虛擬機(jī)進(jìn)行工作,虛擬機(jī)列表包括N個虛擬機(jī)的信息。圖2的方法包括如下內(nèi)容。
210,第一虛擬機(jī)向N個虛擬機(jī)中的至少兩個鄰居虛擬機(jī)發(fā)送第一心跳消息,以便至少兩個鄰居虛擬機(jī)檢測第一心跳消息,其中第一心跳消息的檢測結(jié)果用于確定第一虛擬機(jī)的狀態(tài),所述第一虛擬機(jī)根據(jù)所述N個虛擬機(jī)的信息與所述至少兩個鄰居虛擬機(jī)建立了鄰居關(guān)系。
220,第一虛擬機(jī)作為上述至少兩個虛擬機(jī)中的第二虛擬機(jī)的鄰居虛擬機(jī),檢測第二虛擬機(jī)發(fā)送的第二心跳消息,其中第二心跳消息的檢測結(jié)果和第二虛擬機(jī)的其它鄰居虛擬機(jī)檢測第二虛擬機(jī)發(fā)送的心跳消息得到的檢測結(jié)果用于確定第二虛擬機(jī)的狀態(tài)。
根據(jù)本發(fā)明的實施例,第一虛擬機(jī)作為虛擬機(jī)集群中的任一個虛擬機(jī)可以通過向它的鄰居虛擬機(jī)發(fā)送心跳消息,以便第一虛擬機(jī)的鄰居虛擬機(jī)監(jiān)測第一虛擬機(jī)是否存活。同時,該第一虛擬機(jī)作為其它虛擬機(jī)的鄰居虛擬機(jī)也可以接收其它虛擬機(jī)發(fā)送心跳消息,以便監(jiān)測其它虛擬機(jī)是否存活。具體而 言,虛擬機(jī)集群中的每個虛擬機(jī)都可以以對等方式執(zhí)行上述210和220,即每個虛擬機(jī)均可以向其鄰居虛擬機(jī)發(fā)送心跳消息,以便其鄰居虛擬機(jī)監(jiān)測該虛擬機(jī)的狀態(tài),例如,是否存活。同時,該虛擬機(jī)作為其它虛擬機(jī)的鄰居虛擬機(jī)也可以接收其它虛擬機(jī)發(fā)送心跳消息,以便監(jiān)測其它虛擬機(jī)的狀態(tài),這樣,每個虛擬機(jī)的狀態(tài)可以根據(jù)該虛擬機(jī)的多個鄰居虛擬機(jī)的一次心跳檢測結(jié)果來綜合確定。換句話說,該虛擬機(jī)集群中的每個虛擬機(jī)都可以對其鄰居虛擬機(jī)進(jìn)行監(jiān)測,同時也被其鄰居虛擬機(jī)監(jiān)測。因此,該虛擬機(jī)集群無需一個用于監(jiān)測所有虛擬機(jī)的心跳消息的主節(jié)點。
根據(jù)本發(fā)明的實施例,虛擬機(jī)集群中的每個虛擬機(jī)可以根據(jù)其保存虛擬機(jī)列表確定至少兩個鄰居虛擬機(jī),虛擬機(jī)集群中的每個虛擬機(jī)可以向其至少兩個鄰居虛擬機(jī)發(fā)送心跳消息以便根據(jù)至少兩個鄰居虛擬機(jī)的檢測結(jié)果確定該虛擬機(jī)的狀態(tài)。由于每個虛擬機(jī)的狀態(tài)均可以由其鄰居虛擬機(jī)檢測該虛擬機(jī)發(fā)送的心跳信息的結(jié)果來確定,因此避免了主/從結(jié)構(gòu)存在的Master成為整個集群的瓶頸問題,同時由于不會出現(xiàn)重新選舉Master主機(jī)的情況,因此,使得采用這種方案進(jìn)行狀態(tài)確定的虛擬機(jī)集群不會造成故障恢復(fù)時間的延遲和爭搶資源的情況,因此,提高了虛擬機(jī)集群的容錯能力和性能。
具體地,由于該虛擬機(jī)集群中的每個虛擬機(jī)與其他虛擬機(jī)的地位都是相同的或者對等的,因此該虛擬機(jī)集群不會出現(xiàn)主/從架構(gòu)的虛擬機(jī)集群存在的問題。由于本發(fā)明的實施例的虛擬機(jī)集群中不需要主節(jié)點,因此也就不會出現(xiàn)由于主節(jié)點性能不足以支持維護(hù)大量從節(jié)點導(dǎo)致的問題,也不會出現(xiàn)由于主節(jié)點發(fā)生故障導(dǎo)致的重新選取主節(jié)點帶來的問題(例如,恢復(fù)時間較長、出現(xiàn)集群腦裂等)。
在220中,圖1的方法還包括:第一虛擬機(jī)可以采用鄰居關(guān)系算法,根據(jù)虛擬機(jī)列表中保存的N個虛擬機(jī)的信息,從N個虛擬機(jī)中選擇至少兩個作為鄰居虛擬機(jī)。上述至少兩個鄰居虛擬機(jī)可以包括N個虛擬機(jī)中具備與第一虛擬機(jī)直接進(jìn)行信息交互的能力的二至六個虛擬機(jī)。
例如,上述鄰居關(guān)系算法可以包含用于確定虛擬機(jī)的鄰居關(guān)系的準(zhǔn)則或策略。根據(jù)本發(fā)明的實施例可以采用P2P技術(shù)中的鄰居發(fā)現(xiàn)算法來確定鄰居關(guān)系,例如,每個虛擬機(jī)可以選擇距離該虛擬機(jī)的物理位置最近且不屬于同一主機(jī)的2至6個虛擬機(jī)作為該虛擬機(jī)的鄰居虛擬機(jī)。本發(fā)明的實施例對鄰居關(guān)系算法不作限定,例如,每個虛擬機(jī)還可以從虛擬機(jī)列表中隨機(jī)選擇多 個虛擬機(jī)作為其鄰居虛擬機(jī)。
根據(jù)本發(fā)明的實施例,N個虛擬機(jī)的信息包括:N個虛擬機(jī)中的每個虛擬機(jī)的狀態(tài)信息、N個虛擬機(jī)中的每個虛擬機(jī)的鄰居關(guān)系信息、N個虛擬機(jī)中的每個虛擬機(jī)的啟動次數(shù)、N個虛擬機(jī)中的每個虛擬機(jī)的心跳值。配置信息包括:N個虛擬機(jī)中的每個虛擬機(jī)的配置信息以及虛擬機(jī)集群的配置信息。虛擬機(jī)列表可以包括上述管理信息和配置信息中的任意一個或多個的組合。
例如,某個虛擬機(jī)的啟動次數(shù)可以指該虛擬機(jī)加入虛擬機(jī)集群以來啟動的次數(shù),用于確定該虛擬機(jī)故障之后是否重啟,例如當(dāng)啟動次數(shù)超過預(yù)設(shè)的閾值之后不再重啟該虛擬機(jī),并加入新的虛擬機(jī)以保證整個系統(tǒng)的穩(wěn)定性。某個虛擬機(jī)的心跳值指該虛擬機(jī)上一次啟動以來發(fā)送心跳消息的總數(shù),用于確定該虛擬機(jī)上次啟動以來正常時間。虛擬機(jī)的配置信息可以包括該虛擬機(jī)所屬的虛擬機(jī)集群的配置信息(英文:Cluster Configuration,簡稱:ClusterConf)和虛擬機(jī)的節(jié)點信息(英文:Node Information,簡稱:NodeInf)。其中ClusterConf的取值越大,表示ClusterConf的值越新,NodeInf的取值越大,表示NodeInf的值越新。該虛擬機(jī)可以將虛擬機(jī)列表中保存的信息發(fā)送給其它虛擬機(jī)。其它虛擬機(jī)在接收到該信息后,根據(jù)該信息,對該虛擬機(jī)保存的虛擬機(jī)的信息進(jìn)行維護(hù)或更新。
應(yīng)理解,上述信息也可以采用其它形式進(jìn)行保存,例如,上述信息可以采用數(shù)組的形式來保存。還應(yīng)理解,上述信息還可以包含其它可以用于確定鄰居關(guān)系的信息,例如其它虛擬機(jī)的鄰居關(guān)系信息。
可選地,作為另一實施例,圖2的方法還包括:第一虛擬機(jī)向至少兩個鄰居虛擬機(jī)發(fā)送第一同步信息,第一同步信息用于指示第一虛擬機(jī)中保存的虛擬機(jī)列表的更新,以便至少兩個鄰居虛擬機(jī)更新各自保存的虛擬機(jī)列表;第一虛擬機(jī)接收第二虛擬機(jī)發(fā)送的第二同步信息,第二同步信息用于指示第二虛擬機(jī)中保存的虛擬機(jī)列表的更新;第一虛擬機(jī)根據(jù)第二同步信息更新第一虛擬機(jī)保存的虛擬機(jī)列表。
例如,當(dāng)虛擬機(jī)集群中的每個虛擬機(jī)中保存的狀態(tài)被更新時,該虛擬機(jī)可以通過同步信息將該虛擬機(jī)中保存的N個虛擬機(jī)的信息發(fā)給其鄰居虛擬機(jī),或者,該虛擬機(jī)可以通過同步信息僅將更新的虛擬機(jī)的信息發(fā)送給鄰居虛擬機(jī),或者該虛擬機(jī)可以通過同步信息僅將更新的虛擬機(jī)的信息的指示或 索引發(fā)送給鄰居虛擬機(jī),以便其鄰居虛擬機(jī)根據(jù)上述同步信息更新虛擬機(jī)的信息。
通過同步信息的交互,每個虛擬機(jī)都可以獲取該虛擬機(jī)的每個鄰居虛擬機(jī)保存的虛擬機(jī)的管理信息和配置信息,并且這些管理信息和配置信息都是最新的??梢岳斫獾氖?,如果該虛擬機(jī)集群中的每個虛擬機(jī)都能獲取鄰居虛擬機(jī)的所保存的虛擬機(jī)的管理信息和配置信息,并且能夠?qū)⒆约罕4娴奶摂M機(jī)的管理信息和配置信息發(fā)送給自己的鄰居虛擬機(jī),那么每個虛擬機(jī)都能夠保存有整個虛擬機(jī)集群中的所有虛擬機(jī)的管理信息和配置信息。這樣,當(dāng)該虛擬機(jī)集群中的任一個虛擬機(jī)發(fā)生故障時,保存有發(fā)生故障的虛擬機(jī)的管理信息的虛擬機(jī)可以利用保存的管理信息進(jìn)行對該發(fā)生故障的虛擬機(jī)進(jìn)行恢復(fù)。例如,可以在其他物理主機(jī)上重建該發(fā)生故障的虛擬機(jī)??梢岳斫獾氖?,在虛擬機(jī)發(fā)生故障時,首先可以對發(fā)生故障的虛擬機(jī)進(jìn)行重啟,如果重啟不成功,則可以在其他物理主機(jī)上重建該虛擬機(jī)。
可選地,作為另一實施例,圖2的方法還包括:第一虛擬機(jī)在確定第二虛擬機(jī)的狀態(tài)為故障的情況下,第二虛擬機(jī)觸發(fā)第二虛擬機(jī)重啟或觸發(fā)所述第二虛擬機(jī)從第二虛擬機(jī)的源主機(jī)遷移至目標(biāo)主機(jī),其中所述源主機(jī)為故障主機(jī),所述目標(biāo)主機(jī)為正常主機(jī)。
例如,虛擬機(jī)集群中的每個虛擬機(jī)在確定另一虛擬機(jī)的狀態(tài)為故障的情況下,可以指示故障虛擬機(jī)所在的物理主機(jī)重新啟動或遷移該虛擬機(jī)。例如,虛擬機(jī)可以通過報警方式指示人工完成虛擬機(jī)的重啟或遷移,或者運行專用的遷移軟件來執(zhí)行重啟或遷移。通過重啟,有可能能夠使故障虛擬機(jī)重新正常工作。通過遷移,可以將故障虛擬機(jī)的配置文件和磁盤文件從源主機(jī)拷貝至目標(biāo)主機(jī),從而使得故障虛擬機(jī)能夠在目標(biāo)主機(jī)上重新工作。
可選地,作為另一實施例,圖2的方法還包括:第一虛擬機(jī)在確定第二虛擬機(jī)的狀態(tài)為故障且無法重啟的情況下,所述第一虛擬機(jī)在確定所述第二虛擬機(jī)的狀態(tài)為故障且無法重啟的情況下,所述第一虛擬機(jī)觸發(fā)所述第二虛擬機(jī)從所述第二虛擬機(jī)所在的源主機(jī)遷移至目標(biāo)主機(jī),其中所述源主機(jī)為故障主機(jī),所述目標(biāo)主機(jī)為正常主機(jī)。
可選地,第一虛擬機(jī)接收遷移后的第二虛擬機(jī)發(fā)送的信息,以更新遷移后的第二虛擬機(jī)的信息,其中,第一虛擬機(jī)向至少兩個鄰居虛擬機(jī)發(fā)送第一同步信息,包括:第一虛擬機(jī)向至少兩個鄰居虛擬機(jī)發(fā)送第一同步信息,第 一同步信息包括遷移后的第二虛擬機(jī)的信息,以便第一虛擬機(jī)的至少兩個鄰居虛擬機(jī)更新遷移后的第二虛擬機(jī)的信息。
例如,如果虛擬機(jī)集群中的每個虛擬機(jī)在確定另一虛擬機(jī)的狀態(tài)為故障的情況下,可以指示故障虛擬機(jī)所在的物理主機(jī)重新啟動該虛擬機(jī)。如果該虛擬機(jī)確定故障虛擬機(jī)無法重啟,例如,在發(fā)出重啟命令預(yù)設(shè)時間(例如,該預(yù)設(shè)時間可以大于虛擬機(jī)的重啟時間)后仍未收到故障虛擬機(jī)發(fā)送的心跳消息,則認(rèn)為該故障虛擬機(jī)無法重啟,在這種情況下,該虛擬機(jī)發(fā)出遷移指示,例如,可以將故障虛擬機(jī)遷移至另一物理主機(jī),即在另一物理主機(jī)上重啟該故障虛擬機(jī)。上述預(yù)設(shè)時間的設(shè)置使得故障虛擬機(jī)在能夠重啟成功的情況下保持虛擬機(jī)集群的鄰居關(guān)系不變,從而無需再重新確定鄰居關(guān)系。
應(yīng)理解,故障虛擬機(jī)在重啟后可以仍然保留原來的鄰居關(guān)系,或者重新確定鄰居關(guān)系。在重新確定鄰居關(guān)系的情況下,可以通過同步信息進(jìn)行信息的同步。
可選地,作為另一實施例,圖2的方法還包括:第一虛擬機(jī)確定第二虛擬機(jī)的狀態(tài)為離開的情況下,所述第一虛擬機(jī)確定所述第二虛擬機(jī)的狀態(tài)為離開的情況下,所述第一虛擬機(jī)觸發(fā)所述第二虛擬機(jī)從所述第二虛報機(jī)所在的源主機(jī)上刪除。
例如,虛擬機(jī)集群中的每個虛擬機(jī)在確定另一虛擬機(jī)的狀態(tài)為離開的情況下,可以指示刪除該虛擬機(jī)。例如,虛擬機(jī)可以通過報警方式指示人工完成虛擬機(jī)的刪除,或者運行專用的遷移軟件來執(zhí)行刪除。例如,通過刪除,可以將故障虛擬機(jī)的配置文件和磁盤文件從源主機(jī)上刪除。
可選地,第一虛擬機(jī)可以刪除虛擬機(jī)列表中保存的第二虛擬機(jī)的信息,其中,第一虛擬機(jī)向至少兩個鄰居虛擬機(jī)發(fā)送第一同步信息,包括:第一虛擬機(jī)向第一虛擬機(jī)的至少兩個鄰居虛擬機(jī)發(fā)送第一同步信息,第一同步信息包括用于指示刪除第二虛擬機(jī)的指示信息,以便第一虛擬機(jī)的至少兩個鄰居虛擬機(jī)刪除第二虛擬機(jī)的信息。
例如,如果某個虛擬機(jī)被主動停止運行,則說明該虛擬機(jī)不再使用,可以從虛擬機(jī)集群中刪除,在這種情況下,該離開虛擬機(jī)的鄰居虛擬機(jī)在獲知該虛擬機(jī)離開之后,可以從保存虛擬機(jī)列表中刪除該離開虛擬機(jī)的信息,從而觸發(fā)其它虛擬機(jī)從保存的虛擬機(jī)列表中刪除該離開虛擬機(jī)的信息。
可選地,作為另一實施例,圖2的方法還包括:第一虛擬機(jī)向N個虛擬 機(jī)的上層節(jié)點發(fā)送第二心跳消息的檢測結(jié)果,以便上層節(jié)點根據(jù)第二心跳消息的檢測結(jié)果和第二虛擬機(jī)發(fā)送給第二虛擬機(jī)的其它鄰居虛擬機(jī)的心跳消息的檢測結(jié)果確定第二虛擬機(jī)的狀態(tài);第一虛擬機(jī)接收上層節(jié)點發(fā)送的指示消息,指示消息用于指示第二虛擬機(jī)的狀態(tài)。
根據(jù)本發(fā)明的實施例,可以通過每個虛擬機(jī)的多個鄰居虛擬機(jī)向上層節(jié)點(例如,管理節(jié)點)上報心跳消息的檢測結(jié)果,并綜合多個鄰居虛擬機(jī)的檢測結(jié)果來確定該虛擬機(jī)的狀態(tài),以便更準(zhǔn)確地確定該虛擬機(jī)的狀態(tài)。例如,每個虛擬機(jī)的鄰居虛擬機(jī)均檢測該虛擬機(jī)發(fā)送的一次心跳消息,并且均將檢測結(jié)果上報給上層節(jié)點。上層節(jié)點在確定該虛擬機(jī)的每個鄰居虛擬機(jī)在預(yù)設(shè)時間內(nèi)均未檢測到心跳消息時,可以確定該虛擬機(jī)故障或離開,并將該虛擬機(jī)故障或離開的信息通知給該虛擬機(jī)的各個鄰居虛擬機(jī)。這樣做的好處于在于可以通過檢測虛擬機(jī)發(fā)送的一次心跳消息確定該虛擬機(jī)是否故障或離開,從而準(zhǔn)確及時發(fā)現(xiàn)故障或離開的虛擬機(jī)。而在采用Master/Slave結(jié)構(gòu)的常規(guī)技術(shù)中,Master節(jié)點需要根據(jù)Slave節(jié)點發(fā)送的多次心跳消息來準(zhǔn)確發(fā)現(xiàn)故障或離開的節(jié)點,從而無法及時發(fā)現(xiàn)故障或離開的節(jié)點。
可選地,作為另一實施例,圖2的方法還包括:第一虛擬機(jī)接收第二虛擬機(jī)的其它鄰居虛擬機(jī)檢測第二虛擬機(jī)發(fā)送的心跳消息得到的檢測結(jié)果;第一虛擬機(jī)根據(jù)第二心跳消息的檢測結(jié)果和第二虛擬機(jī)的其它鄰居虛擬機(jī)檢測第二虛擬機(jī)發(fā)送的心跳消息得到的檢測結(jié)果確定第二虛擬機(jī)的狀態(tài)。
例如,每個虛擬機(jī)的鄰居虛擬機(jī)均可以根據(jù)該虛擬機(jī)發(fā)送的心跳消息確定該虛擬機(jī)的狀態(tài)(例如,故障或離開),而且該虛擬機(jī)的每個鄰居虛擬機(jī)可以從該虛擬機(jī)的其它鄰居虛擬機(jī)接收其它鄰居虛擬機(jī)檢測的該虛擬機(jī)的狀態(tài),并根據(jù)這些檢測來確定該虛擬機(jī)的狀態(tài)。例如,如果該虛擬機(jī)的每個鄰居虛擬機(jī)檢測到該虛擬機(jī)故障,同時接收到其它鄰居虛擬機(jī)發(fā)送的檢測到該虛擬機(jī)故障的消息,則可以判斷該虛擬機(jī)故障。虛擬機(jī)的每個鄰居虛擬機(jī)可以在預(yù)定時間內(nèi)沒有檢測到心跳消息時向其它鄰居虛擬機(jī)主動發(fā)送檢測結(jié)果,或者周期性地向其它鄰居虛擬機(jī)發(fā)送檢測結(jié)果,本發(fā)明的實施例對此不作限定,例如,也可以是在預(yù)設(shè)定時間內(nèi)沒有檢測到心跳消息時向其它鄰居虛擬機(jī)主動請求發(fā)送檢測結(jié)果。
在根據(jù)本發(fā)明的實施例的虛擬機(jī)集群的初始建立過程中,每個節(jié)點需要獲知虛擬機(jī)集群中有哪些虛擬機(jī),以及這些虛擬機(jī)的相關(guān)信息,然后在此基 礎(chǔ)上確定哪些虛擬機(jī)可以生成為自己的鄰居。
可選地,作為另一實施例,圖2的方法還包括:在第一虛擬機(jī)加入虛擬機(jī)集群時,第一虛擬機(jī)向N個虛擬機(jī)中的其它虛擬機(jī)發(fā)送第一虛擬機(jī)的信息;第一虛擬機(jī)接收N虛擬機(jī)中其它虛擬機(jī)發(fā)送的各自的信息。
具體而言,虛擬機(jī)之間可以采用P2P協(xié)議,例如,Gossip協(xié)議進(jìn)行通信。Gossip進(jìn)程是一個定時程序,本發(fā)明的實施例可以利用該進(jìn)程,每隔1s從本地維護(hù)的虛擬機(jī)列表中隨機(jī)選取一定數(shù)量(例如,3個)的其它虛擬機(jī)進(jìn)行通信,以交換各自的信息。這種方式的優(yōu)點是整個集群的構(gòu)建過程完全是自組織的,減少了配置的環(huán)節(jié)。
可選地,作為另一實施例,圖2的方法還包括:在第一虛擬機(jī)加入虛擬機(jī)集群時,第一虛擬機(jī)向索引服務(wù)器發(fā)送注冊信息,注冊信息包括第一虛擬機(jī)的信息,其中所述索引服務(wù)器為所述虛擬機(jī)集群的注冊中心,用于為所述虛擬機(jī)集群中的虛擬機(jī)提供注冊服務(wù);第一虛擬機(jī)接收索引服務(wù)器發(fā)送的N個虛擬機(jī)中的其它虛擬機(jī)的信息。
例如,虛擬機(jī)集群中所有虛擬機(jī)節(jié)點在啟動和初始加入集群時,都將自身信息注冊到該索引服務(wù)器中,再從該服務(wù)器獲取當(dāng)前集群的其他虛擬機(jī)的信息。應(yīng)理解,索引服務(wù)器可以是一個單獨的節(jié)點,也可以是集群中的一個虛擬機(jī),如第一臺加入集群的虛擬機(jī)。
應(yīng)理解,根據(jù)本發(fā)明的實施例也可以由管理員通過配置工具在每個虛擬機(jī)上配置所有虛擬機(jī)的信息,然后各虛擬機(jī)根據(jù)特定的鄰居關(guān)系算法計算自己的鄰居虛擬機(jī)并與之建立鄰接關(guān)系。這種方式的優(yōu)點是,可以快速獲知集群節(jié)點信息,避免了廣播hello報文所存在的諸多弊端。
為了幫助本領(lǐng)域技術(shù)人員更好地理解本發(fā)明,下面將結(jié)合具體實施例對本發(fā)明進(jìn)行進(jìn)一步描述??梢岳斫獾氖牵摼唧w實施例僅是為了幫助更好地理解本發(fā)明的技術(shù)方案,而并非對本發(fā)明的技術(shù)方案的限制。
圖3是本發(fā)明的實施例的虛擬機(jī)集群300的鄰居關(guān)系的示意圖。以圖3的虛擬機(jī)集群300為例,圖2的實施例中的第一虛擬機(jī)可以是集群300中的任一個虛擬機(jī)。
假設(shè)本具體實施例中的第一虛擬機(jī)為VM 301。可以看出,VM 301與VM 302和VM 304建立了鄰居關(guān)系。因此,VM 301的鄰居虛擬機(jī)為VM 302和VM 304。第二虛擬機(jī)可以是VM 302和VM 304中的任一個虛擬機(jī)。假 設(shè)本具體實施例中的第二虛擬機(jī)為VM 302。
假設(shè)第一虛擬機(jī)VM 301保存有VM 301的管理信息、VM 304的管理信息和VM 307的管理信息。該第一節(jié)點列表保存的VM 301的管理信息中VM 301的啟動次數(shù)為2,VM 301的心跳值為8;該第一節(jié)點列表保存的VM 204的管理信息中的VM 304的啟動次數(shù)為3,VM 304的心跳值為3;該第一節(jié)點列表保存的VM 307的管理信息中VM 307的啟動次數(shù)為1,VM 307的心跳值為9。
假設(shè)第二虛擬機(jī)VM 302保存有VM 302的管理信息,VM 301的管理信息和VM 303的管理信息。該第二節(jié)點列表保存的VM 301的管理信息中VM 301的啟動次數(shù)為2,VM 301的心跳值為2;該第二節(jié)點列表保存的VM 302的管理信息中VM 302的啟動次數(shù)為3,VM 302的心跳值為3;該第二節(jié)點列表中保存的VM 303的管理信息中的VM 303的啟動次數(shù)為1,VM 303的心跳值為5。
此外,第一虛擬機(jī)和第二虛擬機(jī)保存的虛擬機(jī)的管理信息中還包括虛擬機(jī)的標(biāo)識符。為方便描述,假設(shè)在本實施例中每個虛擬機(jī)的標(biāo)識符就是該虛擬機(jī)在集群300中對應(yīng)的編號,例如VM 301的標(biāo)識符就是“VM 301”。
進(jìn)一步,該第一虛擬機(jī)的配置信息可以包括該第一虛擬機(jī)所屬的簇的配置信息(ClusterConf)和該第一虛擬機(jī)所屬的節(jié)點信息(NodeInf)。同理,該第二虛擬機(jī)的配置信息包括該第二虛擬機(jī)所屬的簇的配置信息和該第二鄰居虛擬機(jī)所屬的節(jié)點信息。在本實施例中,該第一虛擬機(jī)的配置信息中的ClusterConf可以為0,NodeInf可以為1。該第二虛擬機(jī)的配置信息中的ClusterConf可以為1,NodeInf可以為0,其中ClusterConf的取值越大,表示ClusterConf的值越新,NodeInf的取值越大,表示NodeInf的值越新
該第一虛擬機(jī)可以將該第一節(jié)點列表中保存的3個虛擬機(jī)的管理信息以及該第一虛擬機(jī)的配置信息發(fā)送給該第二虛擬機(jī)。該第二虛擬機(jī)在接收到該信息后,根據(jù)3個虛擬機(jī)的管理信息,對該第二虛擬機(jī)保存的虛擬機(jī)的管理信息進(jìn)行維護(hù)。
具體地,該第二虛擬機(jī)可以比較3個虛擬機(jī)的管理信息和該第二虛擬機(jī)保存的3個虛擬機(jī)的管理信息,確定該第二虛擬機(jī)保存的虛擬機(jī)的管理信息中是否有需要更新的虛擬機(jī)。由于VM 301管理信息中的啟動次數(shù)為2,心跳值為8,而該第二虛擬機(jī)保存的VM 301的管理信息中的啟動次數(shù)為2, 心跳值為2。該第二虛擬機(jī)可以確定VM 301管理信息比在該第二虛擬機(jī)保存的管理信息更新。此外該第二虛擬機(jī)還可以確定出VM 304的管理信息和VM 307的管理信息,而該第二虛擬機(jī)保存的虛擬機(jī)的管理信息中沒有VM3204的管理信息和VM 307的管理信息。
該第二虛擬機(jī)在確定出VM 301管理信息比在該第二虛擬機(jī)保存的管理信息更新的情況下,將該保存的VM 301的管理信息更新為VM 301的管理信息。同時,該第二虛擬機(jī)可以保存VM 304和VM 307的管理信息。
進(jìn)一步,該第二虛擬機(jī)還可以確定出該第二虛擬機(jī)在接收到VM 302的管理信息和VM 303的管理信息且VM 302的管理信息和VM 303的管理信息。該第二鄰居虛擬機(jī)可以將VM 302的管理信息和VM 303的管理信息發(fā)送給該第一虛擬機(jī),以便于該第一虛擬機(jī)保存VM 302的管理信息和VM 303的管理信息。
該第二虛擬機(jī)可以根據(jù)第一虛擬機(jī)的配置信息對該第二虛擬機(jī)的配置信息進(jìn)行維護(hù)。在本具體實施例中,該第二虛擬機(jī)確定出該第一虛擬機(jī)的配置信息中的ClusterConf小于該第一虛擬機(jī)的配置信息中的ClusterConf,則該第二虛擬機(jī)可以確定該第二虛擬機(jī)的配置信息中的ClusterConf更新。該第二鄰居虛擬機(jī)確定該第一虛擬機(jī)的配置信息中的NodeInf大于該第二虛擬機(jī)的配置信息中的NodeInf,則該第二虛擬機(jī)可以確定該第一虛擬機(jī)的配置信息中的NodeInf更新。在此情況下,該第二虛擬機(jī)可以保持該第二虛擬機(jī)的配置信息中的ClusterConf不變,將該第二虛擬機(jī)的配置信息中的NodeInf更新為該第一虛擬機(jī)的配置信息中的NodeInf。
該第二虛擬機(jī)在確定該第二虛擬機(jī)的配置信息比該第一虛擬機(jī)的配置信息更新的情況下,可以將該第二虛擬機(jī)的配置信息發(fā)送給該第一虛擬機(jī)。該第一虛擬機(jī)在接收到該第二虛擬機(jī)的配置信息后,可以根據(jù)該第二虛擬機(jī)的配置信息對該第一虛擬機(jī)的配置信息進(jìn)行更新。該第一虛擬機(jī)更新配置信息的過程與該第二虛擬機(jī)更新配置信息的過程類似,在此就不必贅述。
在通過上述過程后,該第一虛擬機(jī)所維護(hù)的虛擬機(jī)的管理信息中的內(nèi)容與該第二虛擬機(jī)所維護(hù)的虛擬機(jī)的管理信息中的內(nèi)容完全相同,并且該第一虛擬機(jī)的配置信息也與該第二虛擬機(jī)完全相同。類似的,集群300中的每一個虛擬機(jī)都可以與相應(yīng)的虛擬機(jī)進(jìn)行上述過程。這樣,在不需要主節(jié)點的情況下,集群300中的每一個虛擬機(jī)都保存有其他虛擬機(jī)的管理信息,并且所 有虛擬機(jī)的配置信息也是相同的。因此,可以避免主節(jié)點主機(jī)發(fā)生宕機(jī)導(dǎo)致的恢復(fù)時間過長以及集群腦裂的問題。
上面詳細(xì)描述了根據(jù)本發(fā)明的實施例的處理虛擬機(jī)集群的方法。下面結(jié)合具體的例子分別描述根據(jù)本發(fā)明的實施例的虛擬機(jī)集群的初始建立、監(jiān)測和管理的過程。
在根據(jù)本發(fā)明的實施例的虛擬機(jī)集群的初始建立過程中,每個虛擬機(jī)需要獲知虛擬機(jī)集群中有哪些虛擬機(jī),以及這些虛擬機(jī)的相關(guān)信息,然后在此基礎(chǔ)上確定哪些虛擬機(jī)可以成為自己的鄰居。
在本實施例中,初始建立的虛擬機(jī)列表可以包括狀態(tài)信息(例如,中央處理器(Center Process Unit,CPU)的使用量和內(nèi)存的使用量等信息)、管理信息(心跳值和啟動次數(shù)等信息)和配置信息(例如,虛擬機(jī)的IP地址等信息)。例如,初始建立虛擬機(jī)集群后,虛擬機(jī)列表如表1所示。
表1
本發(fā)明的實施例可以通過廣播方式、人工配置方式以及索引服務(wù)器方式初始建立虛擬機(jī)集群。
在采用廣播方式建立虛擬機(jī)集群時,每個虛擬機(jī)可以廣播Hello消息,其它虛擬機(jī)接收到Hello消息后向該虛擬機(jī)返回Hello報文的確認(rèn)消息,以便在兩個虛擬機(jī)之間交互狀態(tài)信息、管理信息和/或配置信息。
圖4是根據(jù)本發(fā)明的實施例的建立虛擬機(jī)集群的過程的示意性流程圖。
參見圖4,采用廣播方式建立虛擬機(jī)集群的具體過程如下。
410,虛擬機(jī)1廣播HelloMessage(你好報文),該HelloMessage包含該虛擬機(jī)的的信息,例如,狀態(tài)信息、管理信息和/或配置信息。
420,虛擬機(jī)2接收到虛擬機(jī)1發(fā)送的HelloMessage,從該HelloMessage中讀取虛擬機(jī)1的信息,并將虛擬機(jī)1添加到本地虛擬機(jī)列表中,即在本地 虛擬機(jī)列表中記錄虛擬機(jī)1的ID和虛擬機(jī)1的狀態(tài)信息、管理信息和/或配置信息。
430,虛擬機(jī)2向虛擬機(jī)1返回確認(rèn)消息AckMessage(確認(rèn)報文),該AckMessage包含有虛擬機(jī)2保存的虛擬機(jī)的信息。
440,虛擬機(jī)1接收到來自虛擬機(jī)2的AckMessage,從該AckMessage中提取虛擬機(jī)2保存虛擬機(jī)的信息,并添加到本地保存的虛擬機(jī)列表。
450,虛擬機(jī)1向虛擬機(jī)2返回Ack2Message(確認(rèn)2報文),該Ack2Message包含本地添加的虛擬機(jī)的信息,以確認(rèn)與虛擬機(jī)2間的消息同步。
460,虛擬機(jī)1可以根據(jù)該虛擬機(jī)列表,采用特定的鄰居關(guān)系算法計算出自己的鄰居并與之建立鄰接關(guān)系。
各個虛擬機(jī)可以在建立虛擬機(jī)集群時在本地生成虛擬機(jī)列表。然后,各個虛擬機(jī)可以根據(jù)該虛擬機(jī)列表,采用特定的鄰居關(guān)系算法計算出自己的鄰居并與之建立鄰接關(guān)系。例如,各個虛擬機(jī)可以在初始建立的虛擬機(jī)列表中進(jìn)一步添加其鄰居虛擬機(jī)的信息。各個虛擬機(jī)可以根據(jù)表1的虛擬機(jī)列表,并采用特定的鄰居關(guān)系算法計算鄰居虛擬機(jī),可以是每個虛擬機(jī)將自己確定的鄰居虛擬機(jī)通知給其它虛擬機(jī),也可以是每個虛擬機(jī)采用相同的算法根據(jù)虛擬機(jī)列表直接計算出所有虛擬機(jī)的鄰居虛擬機(jī)。例如,確定鄰居關(guān)系之后,虛擬機(jī)列表如表2所示。
表2
通過以上的過程,虛擬機(jī)集群中每個虛擬機(jī)都可以獲知集群中其它虛擬機(jī)的存在,以及它們的狀態(tài)信息、管理信息和/或配置信息,從而在每個虛擬機(jī)本地形成一個虛擬機(jī)集群的全局信息列表。這種方式的優(yōu)點是整個集群的構(gòu)建過程完全是自組織的,減少了配置的環(huán)節(jié)。
應(yīng)理解,當(dāng)采用P2P協(xié)議構(gòu)建虛擬機(jī)集群時,可以采用P2P協(xié)議中的Gossip協(xié)議。通過Gossip協(xié)議進(jìn)行交互,每個P2P節(jié)點可以知道所有其他節(jié)點,也可能僅知道幾個鄰居節(jié)點,只要這些節(jié)點可以通過網(wǎng)絡(luò)連通,最終他們的狀態(tài)都是一致的。
可替代地,作為另一實施例,在采用人工配置方式建立虛擬機(jī)集群時,可以由管理員通過配置工具在每個虛擬機(jī)上配置所有虛擬機(jī)的狀態(tài)信息、管理信息和/或配置信息。這種方式的優(yōu)點是,虛擬機(jī)集群中的每個虛擬機(jī)可以快速獲知虛擬機(jī)集群的狀態(tài)信息、管理信息和/或配置信息。
可替代地,作為另一實施例,在采用索引服務(wù)器方式建立虛擬機(jī)集群時,索引服務(wù)器相當(dāng)于一個注冊中心,虛擬機(jī)集群中所有虛擬機(jī)在啟動和初始加入集群時,都將自身的狀態(tài)信息、管理信息和/或配置信息注冊到該索引服務(wù)器中,再從該索引服務(wù)器獲取虛擬機(jī)集群中的其他虛擬機(jī)的狀態(tài)信息、管理信息和/或配置信息。應(yīng)理解,索引服務(wù)器可以是一個單獨的物理節(jié)點或主機(jī),也可以是虛擬機(jī)集群中的一個虛擬機(jī),如第一臺加入集群的虛擬機(jī)。
應(yīng)理解,在建立虛擬機(jī)集群的過程中,在虛擬機(jī)集群中的每個虛擬機(jī)逐個加入虛擬機(jī)集群的情況下,每個虛擬機(jī)的鄰居關(guān)系可以是動態(tài)變化的,例如,第二個加入的虛擬機(jī)可以將第一個加入的虛擬機(jī)作為鄰居,而第三個加入虛擬機(jī)可以將第二個加入的虛擬機(jī)作為鄰居,而隨著加入虛擬機(jī)的增多,第三個加入的虛擬機(jī)可能選擇其它虛擬機(jī)作為鄰居。
圖5是根據(jù)本發(fā)明的實施例的心跳檢測機(jī)制的示意圖。
采用上述實施例的方法構(gòu)建虛擬機(jī)集群后,每個虛擬機(jī)也就確立了各自的鄰居關(guān)系,通常一個虛擬機(jī)會有2~6個鄰居虛擬機(jī),虛擬機(jī)之間會通過快速心跳機(jī)制相互進(jìn)行監(jiān)測。這樣,對于其中任一虛擬機(jī),都會有多個鄰居虛擬機(jī)對其同時進(jìn)行檢測,一旦該虛擬機(jī)發(fā)生故障,其多個鄰居虛擬機(jī)會同時檢測到,即所謂的多點檢測機(jī)制。多點檢測的好處在于可以通過空間換時間的理念,縮短故障檢測的時間。例如,參見圖5,VM305的鄰居虛擬機(jī)302、304、306、308均在預(yù)定的時間(例如,可以大于一個發(fā)送心跳消息的周期且小于兩次發(fā)送心跳消息的周期)之后未能檢測到VM305發(fā)送的心跳消息,則認(rèn)為虛擬機(jī)VM305故障或離開。
為了提高檢測的準(zhǔn)確性,避免誤報,傳統(tǒng)的心跳檢測機(jī)制,檢測節(jié)點需要多次確認(rèn)機(jī)制才能判定被檢測節(jié)點是否故障,例如,檢測節(jié)點連續(xù)丟失3 個心跳才認(rèn)為被檢測節(jié)點故障。而根據(jù)本發(fā)明的實施例的采用多點同時檢測和空間換時間的機(jī)制,則可以僅通過一次心跳的丟失即可判定故障。由于是多點同時檢測,所以可以有效避免誤報,縮短檢測時間的同時還可以確保高的準(zhǔn)確性。
圖6是根據(jù)本發(fā)明的實施例的虛擬機(jī)間同步的示意性流程圖。
在本發(fā)明實施例的虛擬機(jī)集群中,沒有中心節(jié)點的概念,虛擬機(jī)集群中的虛擬機(jī)列表及其它有關(guān)狀態(tài)信息、管理信息和/或配置信息需要虛擬機(jī)集群中的每臺虛擬機(jī)來維護(hù),并通過虛擬機(jī)相互間的同步來達(dá)到數(shù)據(jù)的一致性。而虛擬機(jī)間的狀態(tài)信息、管理信息和/或配置信息的同步可以有兩種方式。
1)周期性定時同步
虛擬機(jī)集群中的虛擬機(jī)按照規(guī)定的時間間隔或周期進(jìn)行狀態(tài)信息、管理信息和/或配置信息的同步。
2)事件觸發(fā)式同步
虛擬機(jī)集群中的虛擬機(jī)只有在虛擬機(jī)的狀態(tài)信息、管理信息和/或配置信息有變化時才觸發(fā)狀態(tài)信息、管理信息和/或配置信息的同步。
例如,虛擬機(jī)1發(fā)起的與虛擬機(jī)2的消息同步過程包括如下內(nèi)容。
610,虛擬機(jī)1向虛擬機(jī)2發(fā)送同步消息,
具體而言,該同步消息可以為SynMessage(同步報文)。SynMessage中可以包含虛擬機(jī)1中保存的虛擬機(jī)列表的更新內(nèi)容的信息,例如,可以將虛擬機(jī)列表中更新內(nèi)容通過SynMessage發(fā)送給虛擬機(jī)2,也可以將更新內(nèi)容對應(yīng)的索引通過SynMessage發(fā)送給虛擬機(jī)2。在本發(fā)明的實施例中,虛擬機(jī)2可以為虛擬機(jī)1的鄰居虛擬機(jī)。虛擬機(jī)1可以向其所有鄰居虛擬機(jī)發(fā)送SynMessage。
620,虛擬機(jī)2根據(jù)同步消息更新本地的虛擬機(jī)列表。
例如,如果同步消息中包含的是更新的狀態(tài)信息、管理信息和/或配置信息,則虛擬機(jī)2在接收到同步消息后,將同步消息中包含的更新的狀態(tài)信息、管理信息和/或配置信息與本地保存的狀態(tài)信息、管理信息和/或配置信息進(jìn)行比較,確定哪個虛擬機(jī)上保存的狀態(tài)信息、管理信息和/或配置信息更新,如果確定虛擬機(jī)1保存的狀態(tài)信息、管理信息和/或配置信息更新,則根據(jù)該更新的狀態(tài)信息、管理信息和/或配置信息更新本地保存的虛擬機(jī)列表。該同步消息可以為SynMessage。
630,虛擬機(jī)2向虛擬機(jī)1返回確定消息。
如果本地保存的狀態(tài)信息、管理信息和/或配置信息更新,則將本地保存的狀態(tài)信息、管理信息和/或配置信息再通過確認(rèn)消息反饋給虛擬機(jī)1。該確認(rèn)消息可以為AckMessage。
應(yīng)理解,也可以是兩個虛擬機(jī)的虛擬機(jī)列表中各有一部分虛擬機(jī)的狀態(tài)信息、管理信息和/或配置信息更新。
640,虛擬機(jī)1根據(jù)確定消息更新本地的虛擬機(jī)列表。
當(dāng)虛擬機(jī)1接收到該AckMessage后,以根據(jù)Ackmessage中包含的虛擬機(jī)2保存的狀態(tài)信息、管理信息和/或配置信息,更新本地的虛擬機(jī)列表。
650,虛擬機(jī)1向虛擬機(jī)2發(fā)送確定消息。
可替代地,如果同步消息中包含的是更新的狀態(tài)信息、管理信息和/或配置信息的指示信息(例如,更新的狀態(tài)信息、管理信息和/或配置信息的索引),則虛擬機(jī)2在接收到同步消息后,會將接收到的更新的狀態(tài)信息、管理信息和/或配置信息的指示信息與本地保存的狀態(tài)信息、管理信息和/或配置信息的指示信息進(jìn)行比較,確定哪個虛擬機(jī)上保存的狀態(tài)信息、管理信息和/或配置信息更新,如果確定虛擬機(jī)1保存的狀態(tài)信息、管理信息和/或配置信息更新,則向虛擬機(jī)1發(fā)送確認(rèn)消息,該確認(rèn)消息包含虛擬機(jī)2請求的虛擬機(jī)1上更新的狀態(tài)信息、管理信息和/或配置信息的指示信息,用于請求虛擬機(jī)1向虛擬機(jī)2發(fā)送更新的狀態(tài)信息、管理信息和/或配置信息。該確認(rèn)消息是Ack2Message,虛擬機(jī)2接收到Ack2Message后,可以將虛擬機(jī)1上保存的更新的狀態(tài)信息、管理信息和/或配置信息在本地更新。
應(yīng)理解,當(dāng)本發(fā)明的實施例采用P2P協(xié)議時,可以由一個Gossip進(jìn)程來實現(xiàn)消息同步功能。例如,兩個虛擬機(jī)可以通過GossipSynMessage、GossipAckMessage和GossipAck2Message交互狀態(tài)信息、管理信息和/或配置信息。
上面的例子詳細(xì)描述了根據(jù)本發(fā)明的實施例的虛擬機(jī)集群的初始建立和監(jiān)測的過程,下面詳細(xì)描述根據(jù)本發(fā)明的實施例的虛擬機(jī)集群的其它管理的過程。
虛擬機(jī)集群的管理包括虛擬機(jī)集群初始建、新虛擬機(jī)的加入,虛擬機(jī)的故障或重啟、虛擬機(jī)的遷移、虛擬機(jī)的離開等等。
新虛擬機(jī)的加入過程與虛擬機(jī)集群初始建立過程類似,新加入的虛擬機(jī) 也可以通過廣播、人工配置和索引服務(wù)器三種方式獲得虛擬機(jī)集群的全局信息,即全部虛擬機(jī)的狀態(tài)信息、管理信息和/或配置信息,然后通過新加入虛擬機(jī)內(nèi)部的鄰居關(guān)系算法找到自己的鄰居,并將自己加入到虛擬機(jī)集群中。
當(dāng)某個虛擬機(jī)故障時,可以首先重啟該虛擬機(jī),如果重啟不成功,則可以在其它物理主機(jī)上重建該虛擬機(jī),即遷移該虛擬機(jī)。
因此,在檢測到某個虛擬機(jī)故障時,為了防止該虛擬機(jī)重啟成功后再次加入虛擬機(jī)集群而造成的虛擬機(jī)集群結(jié)構(gòu)的震蕩問題,需要在檢測到該虛擬機(jī)故障時等待一段時間(例如,虛擬機(jī)重啟的時間),如果該故障虛擬機(jī)重啟成功,則仍然回到虛擬機(jī)集群中的原來位置,這個整個集群不需要重新配置或同步。即當(dāng)虛擬機(jī)故障或重啟時,不會將該虛擬機(jī)從虛擬機(jī)列表刪除。此時虛擬機(jī)集群中的虛擬機(jī)間的故障檢測機(jī)制(如心跳),仍然會對該虛擬機(jī)進(jìn)行持續(xù)的監(jiān)測,以便確定該虛擬機(jī)是否已恢復(fù)。只有當(dāng)該虛擬機(jī)重啟不成功時,才會觸發(fā)整個集群的重新配置或同步。
當(dāng)某個虛擬機(jī)離開虛擬機(jī)集群時,其它虛擬機(jī)通過同步過程可以獲知該虛擬機(jī)離開,從而更新各自的本地虛擬機(jī)列表。
進(jìn)一步,為了便于虛擬機(jī)管理和提高虛擬機(jī)的通訊效率,可以考慮將虛擬機(jī)集群中的虛擬機(jī)進(jìn)行分類,通??梢苑譃橄旅娴娜悾悍N子虛擬機(jī)、普通虛擬機(jī)和不可達(dá)虛擬機(jī)。
種子虛擬機(jī)的作用主要是為新加入虛擬機(jī)集群的虛擬機(jī)提供一個初始的虛擬機(jī)列表。不可達(dá)虛擬機(jī)是指通過虛擬機(jī)間的檢測機(jī)制發(fā)現(xiàn)臨時不可達(dá)的那些虛擬機(jī),包括虛擬機(jī)故障、重啟中等。普通虛擬機(jī)為虛擬機(jī)集群中除種子虛擬機(jī)和不可達(dá)虛擬機(jī)之外的虛擬機(jī)。
如果采用上述虛擬機(jī)分類方式,通訊方式也可以隨之改變,即由原來隨機(jī)選取虛擬機(jī)(默認(rèn)為3個),改為從上述三類虛擬機(jī)中各隨機(jī)選取一個。這樣做的好處是,可以確保種子虛擬機(jī)的存活性,以便于新加入集群的虛擬機(jī)獲得初始的虛擬機(jī)列表,同時又可以對那些由于各種原因而臨時不可達(dá)的虛擬機(jī)保持監(jiān)測,以便在它們恢復(fù)后能被其它虛擬機(jī)及時獲知。例如,當(dāng)某個虛擬機(jī)新加入集群,可以首先從種子虛擬機(jī)獲取一個虛擬機(jī)列表,此后該虛擬機(jī)可以根據(jù)該虛擬機(jī)列表與其它虛擬機(jī)同步狀態(tài)信息、管理信息和/或配置信息。
在不對虛擬機(jī)集群中的虛擬機(jī)進(jìn)行上述分類的情況下,新加入集群的虛 擬機(jī)可以通過發(fā)送一個廣播消息從其它虛擬機(jī)獲取節(jié)點信息,重新建立自己本地的節(jié)點列表。虛擬機(jī)集群中其它的虛擬機(jī)收到此廣播消息后,可以向新加入的虛擬機(jī)返回自己的狀態(tài)信息、管理信息和/或配置信息,同時更新本地的狀態(tài)信息、管理信息和/或配置信息。
圖7是根據(jù)本發(fā)明的實施例的一種計算機(jī)系統(tǒng)700的結(jié)構(gòu)示意圖。計算機(jī)系統(tǒng)包括至少一個計算機(jī)節(jié)點的物理硬件層,在至少一個計算機(jī)節(jié)點的物理硬件層之上運行虛擬機(jī)集群,虛擬機(jī)集群包括N個虛擬機(jī),所述N個虛擬機(jī)中的每個虛擬機(jī)保存虛擬機(jī)列表,并以對等方式作為第一虛擬機(jī)進(jìn)行工作,所述虛擬機(jī)列表包括所述N個虛擬機(jī)的信息,所述第一虛擬機(jī)包括:
發(fā)送模塊710,用于向所述N個虛擬機(jī)中的至少兩個鄰居虛擬機(jī)發(fā)送第一心跳消息,以便所述至少兩個鄰居虛擬機(jī)檢測所述第一心跳消息,其中所述第一心跳消息的檢測結(jié)果用于確定所述第一虛擬機(jī)的狀態(tài),所述第一虛擬機(jī)根據(jù)所述N個虛擬機(jī)的信息與所述至少兩個鄰居虛擬機(jī)建立了鄰居關(guān)系;
接收模塊720,用于檢測所述至少兩個虛擬機(jī)中的第二虛擬機(jī)發(fā)送的第二心跳消息,其中所述第一虛擬機(jī)為所述第二虛擬機(jī)的鄰居虛擬機(jī),所述第二心跳消息的檢測結(jié)果和所述第二虛擬機(jī)的其它鄰居虛擬機(jī)檢測所述第二虛擬機(jī)發(fā)送的心跳消息得到的檢測結(jié)果用于確定所述第二虛擬機(jī)的狀態(tài)。
根據(jù)本發(fā)明的實施例,虛擬機(jī)集群中的每個虛擬機(jī)可以根據(jù)其保存虛擬機(jī)列表確定至少兩個鄰居虛擬機(jī),虛擬機(jī)集群中的每個虛擬機(jī)可以向其至少兩個鄰居虛擬機(jī)發(fā)送心跳消息以便根據(jù)至少兩個鄰居虛擬機(jī)的檢測結(jié)果確定該虛擬機(jī)的狀態(tài)。由于每個虛擬機(jī)的狀態(tài)均可以由其鄰居虛擬機(jī)檢測該虛擬機(jī)發(fā)送的心跳信息的結(jié)果來確定,因此避免了主/從結(jié)構(gòu)存在的Master成為整個集群的瓶頸問題,同時由于不會出現(xiàn)重新選舉Master主機(jī)的情況,因此,使得采用這種方案進(jìn)行狀態(tài)確定的虛擬機(jī)集群不會造成故障恢復(fù)時間的延遲和爭搶資源的情況,因此,提高了虛擬機(jī)集群的容錯能力和性能。
可選地,作為另一實施例,發(fā)送模塊710還向至少兩個鄰居虛擬機(jī)發(fā)送第一同步信息,第一同步信息用于指示第一虛擬機(jī)中保存的虛擬機(jī)列表的更新,以便至少兩個鄰居虛擬機(jī)更新各自保存的虛擬機(jī)列表,接收模塊720還接收第二虛擬機(jī)發(fā)送的第二同步信息,第二同步信息用于指示第二虛擬機(jī)中保存的虛擬機(jī)列表的更新,第一虛擬機(jī)還包括更新模塊730,用于根據(jù)第二同步信息更新第一虛擬機(jī)保存的虛擬機(jī)列表。
可選地,作為另一實施例,至少兩個鄰居虛擬機(jī)包括N個虛擬機(jī)中具備與第一虛擬機(jī)直接交互信息的能力的二至六個虛擬機(jī)。
可選地,作為另一實施例,計算機(jī)系統(tǒng)700包括:觸發(fā)模塊740,用于在確定所述第二虛擬機(jī)的狀態(tài)為故障的情況下,觸發(fā)所述第二虛擬機(jī)重啟或觸發(fā)所述第二虛擬機(jī)從所述第二虛擬機(jī)的源主機(jī)遷移至目標(biāo)主機(jī),其中所述源主機(jī)為故障主機(jī),所述目標(biāo)主機(jī)為正常主機(jī)。
可選地,作為另一實施例,計算機(jī)系統(tǒng)700包括:觸發(fā)模塊740,用于在確定所述第二虛擬機(jī)的狀態(tài)為故障且無法重啟的情況下,所述第一虛擬機(jī)觸發(fā)所述第二虛擬機(jī)從所述第二虛擬機(jī)所在的源主機(jī)遷移至目標(biāo)主機(jī),其中所述源主機(jī)為故障主機(jī),所述目標(biāo)主機(jī)為正常主機(jī)。
可選地,作為另一實施例,計算機(jī)系統(tǒng)700包括:觸發(fā)模塊740,用于在確定所述第二虛擬機(jī)的狀態(tài)為離開的情況下,觸發(fā)所述第二虛擬機(jī)從所述第二虛報機(jī)所在的源主機(jī)上刪除。
可選地,作為另一實施例,發(fā)送模塊710還向N個虛擬機(jī)的上層節(jié)點發(fā)送第二心跳消息的檢測結(jié)果,以便上層節(jié)點根據(jù)第二心跳消息的檢測結(jié)果和第二虛擬機(jī)發(fā)送給第二虛擬機(jī)的其它鄰居虛擬機(jī)的心跳消息的檢測結(jié)果確定第二虛擬機(jī)的狀態(tài),接收模塊720還接收上層節(jié)點發(fā)送的指示消息,指示消息用于指示第二虛擬機(jī)的狀態(tài)。
可選地,作為另一實施例,接收模塊720還接收第二虛擬機(jī)的其它鄰居虛擬機(jī)檢測第二虛擬機(jī)發(fā)送的心跳消息得到的檢測結(jié)果,接收模塊720還根據(jù)第二心跳消息的檢測結(jié)果和第二虛擬機(jī)的其它鄰居虛擬機(jī)檢測第二虛擬機(jī)發(fā)送的心跳消息得到的檢測結(jié)果確定第二虛擬機(jī)的狀態(tài)。
可選地,作為另一實施例,發(fā)送模塊710還在第一虛擬機(jī)加入虛擬機(jī)集群時,向N個虛擬機(jī)中的其它虛擬機(jī)發(fā)送第一虛擬機(jī)的信息,接收模塊720還接收N虛擬機(jī)中其它虛擬機(jī)發(fā)送的各自的信息,以生成虛擬機(jī)列表。
可選地,作為另一實施例,發(fā)送模塊710還在第一虛擬機(jī)加入虛擬機(jī)集群時,向索引服務(wù)器發(fā)送注冊信息,注冊信息包括第一虛擬機(jī)的信息,其中所述索引服務(wù)器為所述虛擬機(jī)集群的注冊中心,用于為所述虛擬機(jī)集群中的虛擬機(jī)提供注冊服務(wù),接收模塊720還接收索引服務(wù)器發(fā)送的N個虛擬機(jī)中的其它虛擬機(jī)的信息,以生成虛擬機(jī)列表。
根據(jù)本發(fā)明的實施例,選擇模塊750采用鄰居關(guān)系算法,根據(jù)虛擬機(jī)列 表中保存的N個虛擬機(jī)的信息,從N個虛擬機(jī)中選擇至少兩個作為鄰居虛擬機(jī)。
根據(jù)本發(fā)明的實施例,N個虛擬機(jī)的信息包括:N個虛擬機(jī)中的每個虛擬機(jī)的狀態(tài)信息、N個虛擬機(jī)中的每個虛擬機(jī)的鄰居關(guān)系信息、N個虛擬機(jī)中的每個虛擬機(jī)的啟動次數(shù)、N個虛擬機(jī)中的每個虛擬機(jī)的心跳值、N個虛擬機(jī)中的每個虛擬機(jī)的配置信息以及虛擬機(jī)集群的配置信息中的任意一個或多個的組合。
計算機(jī)系統(tǒng)700的各個部分的操作和功能可以參考上述圖3的方法,為了避免重復(fù),在此不再贅述。
圖8是根據(jù)本發(fā)明的實施例的一種計算機(jī)系統(tǒng)800的結(jié)構(gòu)示意圖。計算機(jī)系統(tǒng)包括至少一個計算機(jī)節(jié)點的物理硬件層,在至少一個計算機(jī)節(jié)點的物理硬件層之上運行虛擬機(jī)集群,虛擬機(jī)集群包括N個虛擬機(jī),N個虛擬機(jī)中的每個虛擬機(jī)保存虛擬機(jī)列表,并以對等方式作為第一虛擬機(jī)進(jìn)行工作,虛擬機(jī)列表包括N個虛擬機(jī)的信息,第一虛擬機(jī)包括:處理器810,通過總線840調(diào)用和執(zhí)行存儲在存儲器850中的代碼;發(fā)送器820,用于向N個虛擬機(jī)中的至少兩個鄰居虛擬機(jī)發(fā)送第一心跳消息,以便至少兩個鄰居虛擬機(jī)檢測第一心跳消息,其中第一心跳消息的檢測結(jié)果用于確定第一虛擬機(jī)的狀態(tài),第一虛擬機(jī)根據(jù)N個虛擬機(jī)的信息與至少兩個鄰居虛擬機(jī)建立了鄰居關(guān)系;接收器830,用于檢測至少兩個虛擬機(jī)中的第二虛擬機(jī)發(fā)送的第二心跳消息,其中第一虛擬機(jī)為第二虛擬機(jī)的鄰居虛擬機(jī),第二心跳消息的檢測結(jié)果和第二虛擬機(jī)的其它鄰居虛擬機(jī)檢測第二虛擬機(jī)發(fā)送的心跳消息得到的檢測結(jié)果用于確定第二虛擬機(jī)的狀態(tài),第二虛擬機(jī)為N個虛擬機(jī)之一。
根據(jù)本發(fā)明的實施例,虛擬機(jī)集群中的每個虛擬機(jī)可以根據(jù)其保存虛擬機(jī)列表確定至少兩個鄰居虛擬機(jī),虛擬機(jī)集群中的每個虛擬機(jī)可以向其至少兩個鄰居虛擬機(jī)發(fā)送心跳消息以便根據(jù)至少兩個鄰居虛擬機(jī)的檢測結(jié)果確定該虛擬機(jī)的狀態(tài)。由于每個虛擬機(jī)的狀態(tài)均可以由其鄰居虛擬機(jī)檢測該虛擬機(jī)發(fā)送的心跳信息的結(jié)果來確定,因此避免了主/從結(jié)構(gòu)存在的Master成為整個集群的瓶頸問題,同時由于不會出現(xiàn)重新選舉Master主機(jī)的情況,因此,使得采用這種方案進(jìn)行狀態(tài)確定的虛擬機(jī)集群不會造成故障恢復(fù)時間的延遲和爭搶資源的情況,因此,提高了虛擬機(jī)集群的容錯能力和性能。
可選地,作為另一實施例,發(fā)送器820還向至少兩個鄰居虛擬機(jī)發(fā)送第 一同步信息,第一同步信息用于指示第一虛擬機(jī)中保存的虛擬機(jī)列表的更新,以便至少兩個鄰居虛擬機(jī)更新各自保存的虛擬機(jī)列表,接收器830還接收第二虛擬機(jī)發(fā)送的第二同步信息,第二同步信息用于指示第二虛擬機(jī)中保存的虛擬機(jī)列表的更新,處理器810還根據(jù)第二同步信息更新第一虛擬機(jī)保存的虛擬機(jī)列表。
可選地,作為另一實施例,至少兩個鄰居虛擬機(jī)包括N個虛擬機(jī)中具備與第一虛擬機(jī)直接交互信息的能力的二至六個虛擬機(jī)。
可選地,作為另一實施例,處理器810還用于在確定所述第二虛擬機(jī)的狀態(tài)為故障的情況下,所述第二虛擬機(jī)觸發(fā)所述第二虛擬機(jī)重啟或觸發(fā)所述第二虛擬機(jī)從所述第二虛擬機(jī)的源主機(jī)遷移至目標(biāo)主機(jī),其中所述源主機(jī)為故障主機(jī),所述目標(biāo)主機(jī)為正常主機(jī)。
可選地,作為另一實施例,處理器810還用于所述第一虛擬機(jī)在確定所述第二虛擬機(jī)的狀態(tài)為故障且無法重啟的情況下,所述第一虛擬機(jī)觸發(fā)所述第二虛擬機(jī)從所述第二虛擬機(jī)所在的源主機(jī)遷移至目標(biāo)主機(jī),其中所述源主機(jī)為故障主機(jī),所述目標(biāo)主機(jī)為正常主機(jī)。
可選地,作為另一實施例,處理器810還在確定所述第二虛擬機(jī)的狀態(tài)為離開的情況下,所述第一虛擬機(jī)觸發(fā)所述第二虛擬機(jī)從所述第二虛報機(jī)所在的源主機(jī)上刪除。
可選地,作為另一實施例,發(fā)送器820還向N個虛擬機(jī)的上層節(jié)點發(fā)送第二心跳消息的檢測結(jié)果,以便上層節(jié)點根據(jù)第二心跳消息的檢測結(jié)果和第二虛擬機(jī)發(fā)送給第二虛擬機(jī)的其它鄰居虛擬機(jī)的心跳消息的檢測結(jié)果確定第二虛擬機(jī)的狀態(tài),接收器830還接收上層節(jié)點發(fā)送的指示消息,指示消息用于指示第二虛擬機(jī)的狀態(tài)。
可選地,作為另一實施例,接收器830還接收第二虛擬機(jī)的其它鄰居虛擬機(jī)檢測第二虛擬機(jī)發(fā)送的心跳消息得到的檢測結(jié)果,接收模塊730還根據(jù)第二心跳消息的檢測結(jié)果和第二虛擬機(jī)的其它鄰居虛擬機(jī)檢測第二虛擬機(jī)發(fā)送的心跳消息得到的檢測結(jié)果確定第二虛擬機(jī)的狀態(tài)。
可選地,作為另一實施例,發(fā)送器820還在第一虛擬機(jī)加入虛擬機(jī)集群時,向N個虛擬機(jī)中的其它虛擬機(jī)發(fā)送第一虛擬機(jī)的信息,接收器830還接收N虛擬機(jī)中其它虛擬機(jī)發(fā)送的各自的信息,以生成虛擬機(jī)列表。
可選地,作為另一實施例,發(fā)送器820在第一虛擬機(jī)加入虛擬機(jī)集群時, 向索引服務(wù)器發(fā)送注冊信息,注冊信息包括第一虛擬機(jī)的信息,其中所述索引服務(wù)器為所述虛擬機(jī)集群的注冊中心,用于為所述虛擬機(jī)集群中的虛擬機(jī)提供注冊服務(wù),接收器830還接收索引服務(wù)器發(fā)送的N個虛擬機(jī)中的其它虛擬機(jī)的信息,以生成虛擬機(jī)列表。
根據(jù)本發(fā)明的實施例,處理器810采用鄰居關(guān)系算法,根據(jù)虛擬機(jī)列表中保存的N個虛擬機(jī)的信息,從N個虛擬機(jī)中選擇至少兩個作為鄰居虛擬機(jī)。
根據(jù)本發(fā)明的實施例,N個虛擬機(jī)的信息包括:N個虛擬機(jī)中的每個虛擬機(jī)的狀態(tài)信息、N個虛擬機(jī)中的每個虛擬機(jī)的鄰居關(guān)系信息、N個虛擬機(jī)中的每個虛擬機(jī)的啟動次數(shù)、N個虛擬機(jī)中的每個虛擬機(jī)的心跳值、N個虛擬機(jī)中的每個虛擬機(jī)的配置信息以及虛擬機(jī)集群的配置信息中的任意一個或多個的組合。
計算機(jī)系統(tǒng)800的各個部分的操作和功能可以參考上述圖3的方法,為了避免重復(fù),在此不再贅述。
本領(lǐng)域普通技術(shù)人員可以意識到,結(jié)合本文中所公開的實施例描述的各示例的單元及算法步驟,能夠以電子硬件、或者計算機(jī)軟件和電子硬件的結(jié)合來實現(xiàn)。這些功能究竟以硬件還是軟件方式來執(zhí)行,取決于技術(shù)方案的特定應(yīng)用和設(shè)計約束條件。專業(yè)技術(shù)人員可以對每個特定的應(yīng)用來使用不同方法來實現(xiàn)所描述的功能,但是這種實現(xiàn)不應(yīng)認(rèn)為超出本發(fā)明的范圍。
所屬領(lǐng)域的技術(shù)人員可以清楚地了解到,為描述的方便和簡潔,上述描述的系統(tǒng)、裝置和單元的具體工作過程,可以參考前述方法實施例中的對應(yīng)過程,在此不再贅述。
在本申請所提供的幾個實施例中,應(yīng)該理解到,所揭露的系統(tǒng)、裝置和方法,可以通過其它的方式實現(xiàn)。例如,以上所描述的裝置實施例僅僅是示意性的,例如,所述單元的劃分,僅僅為一種邏輯功能劃分,實際實現(xiàn)時可以有另外的劃分方式,例如多個單元或組件可以結(jié)合或者可以集成到另一個系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點,所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些接口,裝置或單元的間接耦合或通信連接,可以是電性,機(jī)械或其它的形式。
所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方, 或者也可以分布到多個網(wǎng)絡(luò)單元上??梢愿鶕?jù)實際的需要選擇其中的部分或者全部單元來實現(xiàn)本實施例方案的目的。
另外,在本發(fā)明各個實施例中的各功能單元可以集成在一個處理單元中,也可以是各個單元單獨物理存在,也可以兩個或兩個以上單元集成在一個單元中。
所述功能如果以軟件功能單元的形式實現(xiàn)并作為獨立的產(chǎn)品銷售或使用時,可以存儲在一個計算機(jī)可讀取存儲介質(zhì)中?;谶@樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻(xiàn)的部分或者該技術(shù)方案的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機(jī)軟件產(chǎn)品存儲在一個存儲介質(zhì)中,包括若干指令用以使得一臺計算機(jī)設(shè)備(可以是個人計算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)或處理器(processor)執(zhí)行本發(fā)明各個實施例所述方法的全部或部分步驟。而前述的存儲介質(zhì)包括:U盤、移動硬盤、只讀存儲器(ROM,Read-Only Memory)、隨機(jī)存取存儲器(RAM,Random Access Memory)、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)。
以上所述,僅為本發(fā)明的具體實施方式,但本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到的變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi),因此本發(fā)明的保護(hù)范圍應(yīng)以權(quán)利要求的保護(hù)范圍為準(zhǔn)。