基於heartbeat v1+ldirectord實現LVS集羣高可用

前言

高可用集羣,High Availability Cluster,簡稱HA Cluster,是指以減少服務中斷時間爲目的的服務器集羣技術。通過上文可以看出,LVS集羣本身並不能實現高可用,比如Director Server不能檢測Real Server的健康度,一旦其中一臺或全部Real Server宕機,Director Server還會繼續轉發請求,導致站點無法訪問,同樣,如果Director Server宕機站點就更不可能正常運轉了。本文將講解如何基於heartbeat v1實現LVS集羣高可用。

Heartbeat 

簡介

Heartbeat是Linux-HA工程的一個組件,自1999年開始到現在,發佈了衆多版本,是目前開源Linux-HA項目最成功的一個例子,在行業內得到了廣泛的應用。

工作原理

Heartbeat最核心的包括兩個部分,心跳監測部分和資源接管部分,心跳監測可以通過網絡鏈路和串口進行,而且支持冗餘鏈路,它們之間相互發送報文來告訴對方自己當前的狀態,如果在指定的時間內未收到對方發送的報文,那麼就認爲對方失效,這時需啓動資源接管模塊來接管運行在對方主機上的資源或者服務。

基於Heartbeat v1實現LVS集羣高可用

實驗拓撲

wKiom1VyqnjS6dzwAAEYGQbo0KA719.jpg

實驗環境

node1:node1.scholar.com 172.16.10.123 CentOS6.6

node2:node2.scholar.com 172.16.10.124 CentOS6.6

Real Server1:192.168.1.10(VIP)172.16.10.125(RIP) CentOS6.6

Real Server2:192.168.1.10(VIP)172.16.10.126(RIP) CentOS6.6

注意事項

配置高可用集羣的前提:(以兩節點的heartbeat爲例)

①時間必須保持同步

使用ntp服務器

②節點必須名稱互相通信

解析節點名稱

/etc/host

集羣中使用的主機名爲`uname -n`表示的主機名

③ping node

僅偶數節點才需要

④ssh密鑰認證進行通信

配置過程

時間同步

請確保兩個節點時間同步,這裏不再詳細講述

解析名配置

[root@node1 ~]# vim /etc/hosts

172.16.10.123   node1.scholar.com node1
172.16.10.124   node2.scholar.com node2

[root@node1 ~]# vim /etc/sysconfig/network
HOSTNAME=node1.scholar.com

[root@node1 ~]# uname -n
node1.scholar.com

#兩個節點都需如上操作

ssh密鑰配置

[root@node1 ~]# ssh-keygen -t rsa -P ''
[root@node1 ~]# ssh-copy-id -i .ssh/id_rsa.pub root@node2
[root@node2 ~]# ssh-keygen -t rsa -P ''
[root@node2 ~]# ssh-copy-id -i .ssh/id_rsa.pub root@node1
[root@node1 ~]# date; ssh node2 'date'  #測試
Sun Jun  7 17:46:03 CST 2015
Sun Jun  7 17:46:03 CST 2015

安裝所需軟件包

#解決依賴關係
[root@node1 ~]# yum install perl-TimeDate net-snmp-libs libnet PyXML -y #需epel源支持
[root@node1 ~]# cd heartbeat2
[root@node1 heartbeat2]# ls
heartbeat-2.1.4-12.el6.x86_64.rpm             heartbeat-pils-2.1.4-12.el6.x86_64.rpm
heartbeat-gui-2.1.4-12.el6.x86_64.rpm         heartbeat-stonith-2.1.4-12.el6.x86_64.rpm
heartbeat-ldirectord-2.1.4-12.el6.x86_64.rpm
[root@node1 heartbeat2]# rpm -ivh heartbeat-2.1.4-12.el6.x86_64.rpm heartbeat-pils-2.1.4-12.el6.x86_64.rpm heartbeat-stonith-2.1.4-12.el6.x86_64.rpm
[root@node1 heartbeat2]# yum install heartbeat-ldirectord-2.1.4-12.el6.x86_64.rpm -y

#兩個節點都執行以上操作

配置heartbeat

準備配置文件

wKiom1V0FqTgle5QAAGXlsgYRJc353.jpg

配置算法密鑰

[root@node1 ~]# openssl rand -hex 8
4d8fd6cb49d2047b
[root@node1 ~]# vim /etc/ha.d/authkeys

auth 2
2 sha1 4d8fd6cb49d2047b

配置主配置文件

[root@node1 ~]# grep -v "#" /etc/ha.d/ha.cf |grep -v "^$"
logfile	/var/log/ha-log  #日誌存放位置
keepalive 2              #指定心跳使用間隔時間
deadtime 30              #指定備用節點接管主節點服務資源超時時間
warntime 10              #指定心跳延遲的時間
initdead 120             #解決網絡啓動延時
udpport	694              #設置廣播通信端口
mcast eth0 225.0.25.1 694 1 0 #定義廣播地址
auto_failback on              #定義當主節點恢復後,是否將服務自動切回
node	node1.scholar.com     #主節點
node	node2.scholar.com     #備用節點
ping 172.16.0.1               #仲裁設備

配置資源管理器

[root@node1 ~]# vim /etc/ha.d/haresources 

node1.scholar.com 192.168.1.10/32/eth0/192.168.1.10 ldirectord::/etc/ha.d/ldirectord.cf

將配置文件傳給備用節點

wKioL1V0Lq3xOD_fAACQCT4yHWQ820.jpg

配置ldirectord

準備配置文件並配置

[root@node1 ~]# cp /usr/share/doc/heartbeat-ldirectord-2.1.4/ldirectord.cf /etc/ha.d/
[root@node1 ~]# grep -v ^#  /etc/ha.d/ldirectord.cf

checktimeout=3        #探測超時時間
checkinterval=1       #探測間隔時間
autoreload=yes        #修改配置文件,無需重啓服務即可重載
quiescent=yes         #real server 宕機後從lvs列表中刪除,恢復後自動添加進列表

virtual=192.168.1.10:80     #VIP
	real=172.16.10.125:80 gate    #real server
	real=172.16.10.126:80 gate    #real server
 	fallback=127.0.0.1:80 gate    #如果RS節點都宕機,則啓用本地環回口地址
	service=http                  #基於http協議探測
	request=".health.html"        #探測文件
	receive="ok"                  #探測內容,判斷RS是否存活
	scheduler=rr                  #調度算法
	#persistent=600
	#netmask=255.255.255.255

將配置文件傳給備用節點,並禁止各節點ldirectord開啓自啓

wKiom1V0OBvBwNFXAACdfjGKbyY687.jpg

準備fallback文件

wKiom1V0OSOxpbinAAC5nE7BN0g870.jpg

RS設置

#兩個RS各進行如下配置

配置內核參數

wKiom1V0OxvDgkaeAAE6-04NgWc300.jpg

準備健康度探測文件和站點文件

wKioL1V0Q8jiBI9lAACQeXL5www296.jpg

測試頁面

wKioL1V0Q-bSXEvkAABeL0Q43g0048.jpg

啓動heartbeat

wKiom1V0RK2TGvYnAAC-_byU28U938.jpg

查看資源是否生效

wKioL1V0Rv2jERmvAAOLwCpdcbw390.jpg

高可用測試

wKioL1V0SIjASolSAACUB_JEui4425.jpg

刷新頁面

wKiom1V0RwTgnrwZAACegWfGg5I510.jpg

將RS2模擬宕機

#service httpd stop

wKiom1V0SBTD7swPAACVG94jDVk544.jpg

無論怎麼刷新都是RS1的頁面

接下來我們把RS1也停掉

wKiom1V0SL-BYAGaAACToxTPusY964.jpg

切回fallback頁面了

我們將node1停掉,看一下node2是否可以接管資源

[root@node1 ~]# service heartbeat stop


wKiom1V0TGDyPkBbAAOn1aOYEWU380.jpg

資源成功接管,以上訪問也不受任何影響,當然如果在次啓動node1資源會被再次搶過去,這裏就不再演示

基於heartbeat v1 實現LVS高可用至此完成

The end

好了,基於heartbeat v1 實現LVS高可用就說到這裏了,整個過程還是挺好玩的,配置過程中遇到問題可留言,下篇將會講解基於heartbeat v2的高可用集羣,有興趣可以繼續關注呦。以上僅爲個人學習整理,如有錯漏,大神勿噴~~~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章