HA 四個層次:
1.message layer / infrastructure
心跳
2.ccm 控制臺
3.resources allocated 資源分配
4.resources agent 資源代理
第一層 message layer 主要可以由heartbest keepalived corosync/openais 來實現(xiàn)
第三層: 由pacemaker crm 來提供資源分配
案例:
實現(xiàn)兩個節(jié)點的高可用性群集,用corosync/openais 來實現(xiàn)。
Node1 ip地址:192.168.1.15
Node2 ip地址:192.168.1.20
Vip :192.168.1.100
步驟:
1.在做該案例之前,首先確保自己的yum倉庫是否完整,由于在這個案例中牽扯到群集,所以要安裝cluster倉庫。
各項都要確保時鐘同步: hwclock -s
[root@node1 ~]# hwclock -s
2.無障礙密碼通訊方式:
[root@node1 ~]# ssh-keygen -t rsa
[root@node1 ~]# ssh-copy-id -i .ssh/id_rsa.pub root@node2 //將node1的鑰匙傳給node2
比如我們將node1中的/etc/hosts文件 拷貝到 node2中的/etc下:
[root@node1 ~]# scp /etc/hosts node2:/etc
查看node2中的hosts文件內(nèi)容:
[root@node2 ~]# vim /etc/hosts
這樣就實現(xiàn)了兩節(jié)點之間無障礙密碼傳送文件和執(zhí)行一些指令。
3.安裝corosync軟件包:
紅色的都是要安裝的。
[root@node1 ~]# yum localinstall *.rpm --nogpgcheck //將本地紅色軟件包全部安裝
4.首先來設(shè)置node1這個節(jié)點:
安裝完成后切換到corosync目錄下
[root@node1 ~]# cd /etc/corosync/ 會看到corosync的樣本文件
[root@node1 corosync]# cp corosync.conf.example corosync.conf //將樣本文件變成正式配置文件
[root@node1 corosync]# vim corosync.conf //編譯該文件
需要額外補充一點東西,在下面空白行加入以下內(nèi)容:
[root@node1 corosync]# mkdir /var/log/cluster //創(chuàng)建該目錄
在另外的一個節(jié)點上,也就是node2上創(chuàng)建日志目錄
[root@node1 corosync]# ssh node2 'mkdir /var/log/cluster'
為了便其他主機加入該集群,需要認證,生成一個authkey
[root@node1 corosync]# corosync-keygen
將上圖中的文件連同權(quán)限一起遠程拷貝到node2中:
[root@node1 corosync]# scp -p authkey corosync.conf node2:/etc/corosync/
[root@node1 corosync]# service corosync start //在node1上啟動corosync服務(wù)
[root@node1 corosync]# ssh node2 '/etc/init.d/corosync start'
Starting Corosync Cluster Engine (corosync): [ OK ] //在node1上啟動node2的該服務(wù)
下面來驗證corosync引擎是否正常啟動了:
[root@node1 corosync]# grep -i -e "corosync cluster engine" -e "configuration file" /var/log/messages
查看初始化成員節(jié)點通知是否發(fā)出:
[root@node1 corosync]# grep -i totem /var/log/messages
檢查過程中是否有錯誤產(chǎn)生:
[root@node1 corosync]# grep -i error: /var/log/messages |grep -v unpack_resources
(為了檢查stonith的錯誤,因為我們在這里沒有安裝stonith,所以得將stonith去掉,不去掉的話會報錯)
檢查pacemaker時候已經(jīng)啟動了:
[root@node1 corosync]# grep -i pcmk_startup /var/log/messages
在節(jié)點2上同樣做以上相同的驗證.
5.在node1節(jié)點上查看集群的成員狀態(tài):
[root@node1 corosync]# crm status
下面來提供高可用服務(wù):
在corosync中,定義服務(wù)可以用兩種接口
(1)圖形接口 (使用hb——gui)
(2)crm (pacemaker 提供,是一個shell)
查看配置信息:
如何驗證該文件的語法錯誤:
[root@node1 corosync]# crm_verify -L
上述出錯時由于stonith,因為我們沒有stonith,在高可用的環(huán)境里面,會禁止使用任何支援,所以我們得禁用掉stonith。
[root@node1 corosync]# crm //進入crm界面
crm(live)# configure //進入配置模式
crm(live)configure# property stonith-enabled=false //禁用stonith
crm(live)configure# commit //提交上述修改內(nèi)容
6.下面來定義資源:
集群的資源類型有4種
primitive 本地主資源 (只能運行在一個節(jié)點上)
group 把多個資源軌道一個組里面,便于管理
clone 需要在多個節(jié)點上同時啟用的 (如ocfs2 ,stonith ,沒有主次之分)
master 有主次之分,如drbd
我們來提供三種資源: ip地址 httpd服務(wù) 共享存儲
[root@node1 corosync]# crm
crm(live)# configure
crm(live)configure# ra
crm(live)configure ra# classes
heartbeat
lsb
ocf / heartbeat pacemaker
Stonith 1//查看資源代理
crm(live)configure ra# list heartbeat //列出heartbeat這個資源代理所管轄的資源
配置ip地址資源:
crm(live)configure# primitive webip ocf:heartbeat:IPaddr params ip=192.168.1.100
在這里看看你兩個節(jié)點的虛擬機上是否安裝httpd,沒安裝的話分別安裝。
下面分別在每個節(jié)點上設(shè)置一個簡單的web網(wǎng)頁:
[root@node1 corosync]# echo "hello" >/var/www/html/index.html
[root@node2 corosync]# echo "hahaaha" >/var/www/html/index.html
接下來定義web服務(wù)資源:
crm(live)configure# primitive webserver lsb:httpd
查看狀態(tài):
大家仔細看上圖,就會發(fā)現(xiàn)存在一個問題:就是ip地址資源在node1上啟動,但是web服務(wù)卻是在node2上啟動的,這樣一來兩個資源分別在兩個節(jié)點上,這樣顯然是不行的。出現(xiàn)這樣的原因就是在高可用群集中資源比較多,這樣是為了將資源平衡到每一個節(jié)點上。
看下圖來證實這樣的問題:
為了解決這樣的問題,就用到了我們上面所說的群集資源類型中g(shù)roup的概念:
定義組:
crm(live)configure# group web webip webserver
再次查看群集狀態(tài):
此時我們就可以來訪問192.168.1.100來查看結(jié)果:
能夠成功訪問。
如果此時我們把node1節(jié)點停掉,那么各種資源應(yīng)該流轉(zhuǎn)到node2上。注意我們在停掉node1節(jié)點時,停用corosync服務(wù),不要停用httpd服務(wù)。
[root@node1 corosync]# service corosync stop
Signaling Corosync Cluster Engine (corosync) to terminate: [ OK ]
Waiting for corosync services to unload:......... [ OK ]
[root@node1 corosync]# crm status
Connection to cluster failed: connection failed
然后我們在節(jié)點node2上查看信息狀態(tài):
可以看到node1已經(jīng)offline,但是node2仍然沒有運行,原因是沒有票數(shù)了(without quorum)
所以我們關(guān)閉quorum:
關(guān)閉 quorum
可選的參數(shù)有如下:ignore (忽略)
freeze (凍結(jié),表示已經(jīng)啟用的資源繼續(xù)實用,沒有啟用的資源不能
啟用))
stop(默認)
suicide (所有的資源殺掉)
那我們將節(jié)點node1的corosync服務(wù)啟動起來, 改變quorum。
[root@node1 corosync]# crm
crm(live)# configure
crm(live)configure# property no-quorum-policy=ignore
接下來我們停用node1的corosync,查看node2的狀態(tài):
[root@node1 corosync]# service corosync stop
可見資源已經(jīng)流轉(zhuǎn)到node2節(jié)點上,現(xiàn)在登錄http://192.168.1.100上查看網(wǎng)頁狀態(tài):
變成了node2節(jié)點上web頁面的內(nèi)容。
如果此時將node1節(jié)點上的corosync服務(wù)開啟,此時資源不會自動流轉(zhuǎn)到node1上,還是在node2上。
聯(lián)系客服