HA(High Availability)高可用,有如下三種工作模式。
(1)主從方式 (非對稱方式)
工作原理:主機工作,備機處於監控準備狀況;當主機宕機時,備機接管主機的一切工作,待主機恢複正常後,按使用者的設定以自動或手動方式將服務切換到主機上運行,資料的一致性通過共用儲存系統解決。
(2)雙機雙工方式(互備互援)
工作原理:兩台主機同時運行各自的服務工作且相互監測情況,當任一台主機宕機時,另一台主機立即接管它的一切工作,保證工作即時,應用服務系統的關鍵資料存放在共用儲存系統中。
(3)叢集工作方式(多伺服器互備方式)
工作原理:多台主機一起工作,各自運行一個或幾個服務,各為服務定義一個或多個備用主機,當某個主機故障時,運行在其上的服務就可以被其它主機接管。
Linux下有不少工具可以提供高可用的功能,如vrrp,heartbeat。
vrrp主機會定期廣播自己依然活著“我是master,我還活著,平安無事”,而當備機接受不到“平安無事”的時候,會接管主機的ip地址,也就接管了主機提供的服務,然後開始喊“我成主機了,我活著,平安無事”
heartbeat不使用廣播而使用心跳,也就是在高可用伺服器之間建立監控關係,避免了廣播對網路的負擔,功能也上更為強大,在接管ip的同時,還可以執行指令碼。
vrrp使用雙機雙工方式,但有些應用情境中並不適用,如mysql的高可用就不能使用vrrp。HA的三種模式中都有“共用儲存“目的是解決資料一致性的問題,mysql的資料檔案即data目錄如果建立在nfs服務上,啟動慢不說,備機即便能起來也是不能使用的,一段時間以後備機上的mysql服務會自動結束。由於伺服器不是那麼容易死掉的(在測試的時候為了簡單,一般是讓機器死掉),更多的時候是應用死掉。所以才有heartbeat+DRBD+MYSQL的組合,利用的就是heartbeat的指令碼執行功能(檢測、資源回收)。
我們在這裡用shell指令碼實現vrrp的主從方式 (非對稱方式)功能。環境如下:
web(主) 192.168.1.1 http服務
web(備) 192.168.1.2 http服務
實現思路:首先是狀態監控,既然是http服務,我們就監控httpd的狀態,使用curl -w %{http_code}獲得。 備機上運行指令碼,當curl獲得的狀態代碼不為200時,即主機已經死掉,我們就讓備機接管主機ip。並使用arping命令更新區域網路對主機ip的mac記錄。
# /bin/bash
while true do
code=`curl -o /dev/null -w %{http_code} http://192.168.1.1/ 2>/dev/null`
if ! [ $code -eq 200 ];then
ifconfig eth0 192.168.1.1
arping -A -c 1 -I eth0 192.168.1.1
kill -9 $$ #IP已經切換,指令碼已經沒有繼續啟動並執行必要,把自己殺掉。
fi
sleep 5
done