高可用集羣就是爲了保證某項服務能夠時時在線,我們可以通過幾個9來衡量一個高可用集羣提供服務的穩定性,例如5個9的高可用集羣必須保證服務一年在線的時間佔99.999%,也就是說一年的時間中僅允許服務電線不到6分鐘的時間,可見高可用集羣非同反響。
下面我就給大家講解一下高可用性集羣的工作機制,由於只是爲了講明原理,在此處我們就假設一個集羣中之後兩個節點(即兩臺提供服務的主機,假設提供的是web服務)。
最簡單的高可用集羣的工作機制爲,兩個節點都在線,但是隻有節點1提供web服務,在提供服務的同時,節點1還要在特定的時間段內不停的向外發送自己的心跳信息,以此來通告在同一個集羣中的節點2自己運行正常,當節點2連續2-3此在規定的時間段內沒有接受到幾點1的心跳信息,則就認爲節點1已經不能正常的提供web服務了,此時節點2就直接將節點1的資源(資源:就是爲提供一個服務所需要必須東西,如IP,數據等)搶奪過來,並立刻提供相同的服務,這樣就保證了服務的時時在線。
當然這是最簡單的靠可用集羣的工作機制,但是隻有理解了基本的原理,才能進行更高層次的探索,下面我們就基於這個最簡單、最基本的高可用集羣的原理來實現基於Heartbeat的高可用web服務集羣
實驗目的:通過Heartbeat來實現高可用web服務集羣模擬
實驗拓撲圖如下圖所示:
每個節點都有兩塊網卡分別爲eth0、eth1,前者和交換機或路由器相連來爲外界提供服務,後者直接連接爲彼此傳遞心跳信息,VIP爲在線提供服務的節點向外提供服務的IP地址,這是一個虛擬的IP地址,當提供服務的節點宕機之後,這個VIP就將被替代者所使用。
這裏我們要使用到heartbeat軟件,下面我們就對這款軟件的三個主要的配置問津進行一下介紹:
/etc/ha.d/ha.cf 定義心跳信息傳輸的端口以及整個集羣一共有多少個節點
/etc/ha.d/haresources 本地最簡單的基於純文本文件的CRM,用來定義集羣使用的VIP、廣播等基本資源
/etc/ha.d/authkeys(400) 對傳遞的心跳信息進行簽名,防止心跳信息被改動
下面 我們就開始進行相應的配置:
1、給noid1配置地址
ifconfig eth0 192.168.0.202/24
ifconfig eth1 1.1.1.1
給noid2配置地址
ifconfig eth0 192.168.0.204/24
ifconfig eth1 1.1.1.2
2、配置本地主機名稱解析
在node1上
vim /etc/hosts 添加如下內容
192.168.0.202 node1.a.org
192.168.0.204 node2.a.org
node1、node2的主機名進行相應的修改
在node1上
hostname node1.a.org
在node2上
hostname node2.a.org
3、只有我們要多次在連個節點間拷貝文件,爲了省去繁瑣的密碼輸入,我們在兩個節點上進行如下配置
在node1上
ssh-keygen -t rsa
ssh-copy-id -i .ssh/id_rsa.pub [email protected]
在node2上
ssh-keygen -t rsa
ssh-copy-id -i .ssh/id_rsa.pub [email protected]
從此我們在兩個節點上拷貝文件就不需要輸入密碼了
4、在兩個節點上分別安裝httpd
yum install httpd –y
任何集羣服務都需要使用集羣啓動,而非手動啓動,並保證開機不能自動啓動
chkconfig httpd off 防止開機自動啓動
給每個http寫一個網頁,內容分別爲自己的主機名,以便進行測試
在兩個節點上進行同樣的操作
5、開始安裝集羣服務
(1)、下載安裝包
創建一個目錄將所用的安裝包都放在這個目錄內
mkdir node
所用到的安裝包如下
(2)、安裝 這些軟件包,因爲他們之間有依賴關係,所以使用yum安裝
cd node
yum localinstall * --nogpgcheck –y
前兩步需要在兩個節點上都進行同樣的操作
(3)、將heartbeat的配置文件移動到/etc/下
cd /usr/share/doc/hearbeat-2.1.4
cp ha.cf harisources authkeys /etc/ha.d
(4)、編輯配置文件/etc/ha.d/ha.cf
vim /etc/ha.d/ha.cf 進行如下修改
打開日誌 logfile /var/log/ha-log
打開 udpport 694 兩節點用此端口發送心跳信息
添加 bcast eth1 發送心跳信息的網卡
添加定義節點 node node1.a.org
node node2.a.org
(5)、編輯配置文件/etc/ha.d/authkeys
vim /etc/ha.d/authkeys 添加如下內容
auth 2
2 sha1 kfhslkdhfsk(md5加密後的字符串,想要得到這個字符串運行如下命令,在將結果粘貼即可
dd if=/dev/urandom bs=512 count=1 | md5sum
將此文件的權限改爲400
chmod 400 authkeys
(6)、編輯配置文件/etc/ha.d/haresources
vim /etc/ha.d/haressources 添加如下內容
node1.a.org 192.168.0.85/24/eth0/192.168.0.255 httpd
上面的內容依次爲:主節點的主機名,提供服務的IP即VIP,設定VIP的端口,廣播地址,提供的服務
(7)、將我們配置的這三個文件拷貝到node2上
cd /etc/ha.d
scp ha.cf authkeys haresources node2.a.org:/etc/ha.d
(8)、啓動heartbeat
在哪個節點上啓動第一個該服務,以後所有的這個服務必須在這個節點上啓動
我們就在node1上啓動heartbeat服務
/etc/init.d/heartbeat start
在node1上啓動node2的heartbeat服務
ssh node2 --‘/etc/init.d/heartbeat start’
驗證:我們設定的node1爲主節點,所以服務應該由node1提供,即VIP在node1上,執行
ifconfig 進行查看,結果如下圖:
我們在node1上使用瀏覽器輸入192.168.0.85這個VIP來對我們的web服務進行測試:
表示此時提供web服務的節點爲node1
當node1宕機之後,服務將有node2進行提供,所以VIP將在node2上,爲達到node1宕機的目的,我們將node1的heartbeat服務關閉,讓其不能發送心跳信息(注意:不能在本機上停止服務,需要在另個節點上執行)在node2上執行如下命令:
ssh node1.a.org --‘/etc/init.d/heartbeat stop’
對node2執行ifconfig 命令,將得到如下結果:
我們在node1上使用瀏覽器輸入192.168.0.85這個VIP來對我們的web服務進行測試:
本實驗只是簡單的模擬了基於heartbeat實現高可用的web集羣,其更深層次的內容還需大家繼續學習