前文講了OpenStack虛擬機(jī)高可用,使用最多的高可用監(jiān)控工具是Pacemaker和Corosync,但Pacemaker集群中允許的計(jì)算節(jié)點(diǎn)數(shù)目上限為16個,即使對于一般規(guī)模的OpenStack私有云集群環(huán)境,這一限制不現(xiàn)實(shí)的,因此Redhat提出解決節(jié)點(diǎn)受限問題的方法: Pacemaker_remote。
Pacemaker集群對計(jì)算節(jié)點(diǎn)的瓶頸是集群通信機(jī)制Corosync。在基本的Pacemaker高可用集群中,每個集群節(jié)點(diǎn)都運(yùn)行Corosync全集群棧(Full cluster stack)和Pacemaker全組件,這種方式雖然為集群帶來了靈活性,但集群節(jié)點(diǎn)可擴(kuò)展性限制在16個節(jié)點(diǎn)之內(nèi)。為了允許集群擴(kuò)展更多節(jié)點(diǎn),Pacemaker允許未運(yùn)行全集群棧的節(jié)點(diǎn)集成到集群中,并允許Pacemaker像管理正常節(jié)點(diǎn)一樣管理這些節(jié)點(diǎn)上的資源,這樣的節(jié)點(diǎn)通常稱為Remote節(jié)點(diǎn)或者部分Pacemaker節(jié)點(diǎn),因?yàn)樗鼈儾贿\(yùn)行Corosync進(jìn)程,而只運(yùn)行Pacemaker_remote進(jìn)程。
在有Pacemaker_remote進(jìn)程的Pacemaker集群中,節(jié)點(diǎn)劃分為三種類型:集群節(jié)點(diǎn),Remote節(jié)點(diǎn)和Guest節(jié)點(diǎn)。其中,集群節(jié)點(diǎn)是運(yùn)行全部Pacemaker組件和Corosync集群棧的節(jié)點(diǎn),集群節(jié)點(diǎn)可以運(yùn)行集群資源、運(yùn)行Pacemaker集群命令行工具(crm_mon、crm_resource等)、執(zhí)行Fencing操作、統(tǒng)計(jì)集群Quorum和作為集群DC(Designated Controller)節(jié)點(diǎn)。Remote節(jié)點(diǎn)是運(yùn)行Pacemaker_remote進(jìn)程的物理主機(jī)(Pacemaker_remote是在Pacemaker集群中部分管理節(jié)點(diǎn)上允許未運(yùn)行全棧集群軟件節(jié)點(diǎn)的服務(wù)進(jìn)程),運(yùn)行Pacemaker_remote進(jìn)程的節(jié)點(diǎn)可以運(yùn)行集群資源和大部分命令行工具,但是不具備全棧集群節(jié)點(diǎn)的其他功能:執(zhí)行Fencing操作、Quorum投票和DC功能等。Pacemaker_remote進(jìn)程是Pacemaker本地資源管理進(jìn)程(LRMD,Local Resource Management Daemon)的增強(qiáng)版本。運(yùn)行Pacemaker_remote的虛擬機(jī)稱為Guest節(jié)點(diǎn)。Pacemaker集群允許虛擬機(jī)節(jié)點(diǎn)存在,即虛擬機(jī)節(jié)點(diǎn)資源通過Pacemaker集群資源管理器進(jìn)行管理。Guest節(jié)點(diǎn)與Remote節(jié)點(diǎn)的主要區(qū)別在于Guest節(jié)點(diǎn)本身就是Pacemaker所管理的資源。對于OpenStack虛機(jī)高可用部署,主要用到的是集群節(jié)點(diǎn)和Remote節(jié)點(diǎn)。在OpenStack高可用環(huán)境中,Remote節(jié)點(diǎn)通常是計(jì)算節(jié)點(diǎn),而Pacemaker的策略引擎(Policy Engine,PE)能夠自動處理對Remote節(jié)點(diǎn)的Fencing操作,用戶所要確定的是Remote節(jié)點(diǎn)具有Fencing設(shè)備。
要使計(jì)算節(jié)點(diǎn)成為Remote節(jié)點(diǎn),只需在計(jì)算節(jié)點(diǎn)上安裝Pacemaker_remote軟件包并啟動Pacemaker_remote服務(wù),之后將其加入Pacemaker集群即可(基于修復(fù)的Bug考慮,如果使用Pacemaker_remote,建議安裝的Pacemaker為1.12或更高的版本)。
安裝完成之后,創(chuàng)建一個存放Pacemaker集群共享授權(quán)Key的本地目錄:
# mkdir -p --mode=0750 /etc/pacemaker
# chgrp haclient /etc/pacemaker
在Pacemaker集群中,所有節(jié)點(diǎn)(包括集群節(jié)點(diǎn)和Remote節(jié)點(diǎn))必須共享同一個授權(quán)Key。如果集群節(jié)點(diǎn)已經(jīng)存在授權(quán)Key,只需將其拷貝到Remote節(jié)點(diǎn),如果還沒有授權(quán)Key,則通過如下命令創(chuàng)建授權(quán)Key:# dd if=/dev/urandom of=/etc/pacemaker/authkey? bs=4096 count=1
在Remote節(jié)點(diǎn)上啟動Pacemaker_remote服務(wù)并設(shè)置其為開機(jī)自啟動:
# systemctl enable pacemaker_remote.service
# systemctl start pacemaker_remote.service
Pacemaker_remote啟動完成之后,驗(yàn)證是否可以遠(yuǎn)程連接到Remote節(jié)點(diǎn)的3121端口。通過SSH即可連接測試,如果執(zhí)行SSH連接在斷開前有如下輸出說明連接正常:
//假設(shè)Remote節(jié)點(diǎn)主機(jī)名為remote1
# ssh -p 3121 remote1
ssh_exchange_identification: read: Connection reset by peer
Remote節(jié)點(diǎn)配置啟動完成后,便可將其加入Pacemaker集群(假設(shè)Pacemaker集群已經(jīng)存在)。Remote節(jié)點(diǎn)加入Pacemaker集群的過程等同于創(chuàng)建遠(yuǎn)程連接資源(Remote Connection Resource)。定義遠(yuǎn)程連接資源的操作需要在Pacemaker集群節(jié)點(diǎn)上進(jìn)行(定義遠(yuǎn)程連接資源本質(zhì)上屬于Pacemaker的crmd組件),Pacemaker_remote安裝包并沒有提供ocf:pacemaker:remote資源代理,而是提供了一個可以使用哪些選項(xiàng)的元數(shù)據(jù)文件/usr/lib/ocf/resource.d/pacemaker/remote。在Pacemaker任一集群節(jié)點(diǎn)上執(zhí)行如下命令,便可分別將多個計(jì)算節(jié)點(diǎn)(Remote節(jié)點(diǎn))加入Pacemaker集群,在集群中看到集群節(jié)點(diǎn)和Remote節(jié)點(diǎn)命令: pcs status。
//以for循環(huán)形式將全部計(jì)算節(jié)點(diǎn)加入Pacemaker集群
? ? ? ? for node in $(echo $compute_node|cut -d " " -f -$nodes_num)
? ? ? ? do
? ? ? ? ? ? pcs resource create $node ocf:pacemaker:remote\
? ? ? ? ? ? reconnect_interval=60 op monitor interval=20
? ? ? ? done
一旦Remote節(jié)點(diǎn)加入Pacemaker集群,則Remote節(jié)點(diǎn)上的資源就可以像正常集群節(jié)點(diǎn)一樣被Pacemaker管理,包括Remote節(jié)點(diǎn)資源的創(chuàng)建、啟動和停止等。//創(chuàng)建資源并將neutron-openvswitch資源限制在計(jì)算節(jié)點(diǎn)上運(yùn)行以及在neutron-api后啟動的約束
# pcs resource create neutron-openvswitch-agent-compute? systemd:neutron-openvswitch-agent? ? ? ? ? ? --clone interleave=true --disabled? --force
# pcs constraint location neutron-openvswitch-agent-compute-clone rule? resource-discovery=exclusive? score=0 osprole eq compute
# pcs constraint order start neutron-server-api-clone then? neutron-openvswitch-agent-compute-clone require-all=false
通過Pacemaker和Pacemaker_remote,計(jì)算節(jié)點(diǎn)服務(wù)運(yùn)行狀況被Pacemaker監(jiān)控管理。為了實(shí)現(xiàn)對計(jì)算節(jié)點(diǎn)的遠(yuǎn)程Fencing和虛擬機(jī)的Evacuate功能,還需創(chuàng)建Fencing和Evacuate相關(guān)的資源。在Redhat的RDO方案中,F(xiàn)encing和Evacuate資源創(chuàng)建如下:
pcs resource create nova-evacuate? ocf:openstack:NovaEvacuate auth_url=http://$vip_keystone:35357 username=admin? password=admin tenant_name=admin
pcs stonith create fence-nova fence_compute? auth-url= http://$vip_keystone:35357? login=admin passwd=admin? tenant-name=admin? record-only=1? action=off? --force
為了正常使用ocf:openstack:NovaEvacuate和fence_compute資源代理,用戶需要安裝滿足如下條件的軟件包:
?fence-agents-4.0.11-13.e17_1.1或更高版本。
?resource-agents-3.9.5-40.e17_1.5.x86_64或更高版本。
?pacemaker-1.1.12-22.e17_1.4.x86_64或更高版本。
Pacemaker和Pacemaker_remote的引入,解決了一套o(hù)penstack中所能管理的計(jì)算節(jié)點(diǎn)個數(shù)的瓶頸,計(jì)算節(jié)點(diǎn)的增多,可以部署到虛擬機(jī)更多了,這個方案是openstack+Corosync計(jì)算節(jié)點(diǎn)高可用的增強(qiáng)版,也是虛機(jī)高可用的增強(qiáng)版。
筆記整理來自山金孝的《OpenStack高可用集群(上冊):原理與架構(gòu)》8.8.3章節(jié),如有侵權(quán)請通知刪除