heartbeat+lvs實現高可用負載均衡原理:node
兩臺heartbeat(ldirectord)主機構成高可用集羣,同時監管着lvs(負載均衡集羣)總體構成了heartbeat+lvs的高可用負載均衡集羣.在使用heartbeat的時候加載了watchdog模塊,用來檢測heartbeat服務,當heartbeat服務出現故障,會進行重啓主機。linux
注意:可是,當內核崩潰了,watchdog也無能了(modprobe softdog),由於watchdog是基於內核級別的軟件服務(至關於軟fence一種硬件保護機制)web
實驗環境:CentOS 6.4
算法
系統架構主要由四臺主機組成,兩臺heartbeat主機做爲lvs和heartbeat,兩臺Real Server主機做爲真實服務器。shell
實驗準備:apache
1.在本地/etc/hosts文件中定義各個節點的解析。vim
2.關閉selinux和iptables後端
3.軟件下載:heartbeat-3.0.4-1.el6.x86_64.rpm heartbeat-devel-3.0.4-1.el6.x86_64.rpm
api
ldirectord-3.9.2-1.2.x86_64.rpm heartbeat-libs-3.0.4-1.el6.x86_64.rpm瀏覽器
實驗步驟:
1、heartbeat安裝及配置:
# yum localinstall *.rpm 使用yum方式安裝,可以解決本地rpm包所須要依賴(前提得須要yum源)
#less /etc/ha.d/README.config
ha.cf Main configuration file heartbeat高可用主配置文件
haresources Resource configuration file 資源文件
authkeys Authentication information 認證文件
# cd /usr/share/doc/heartbeat-3.0.4/
# cp authkeys haresources ha.cf /etc/ha.d/
# vim ha.cf
debugfile /var/log/ha-debug
logfile /var/log/ha-log
keepalive 2 指定心跳間隔爲2s
deadtime 30 備用節點在30s後自動接管資源
warntime 10 心跳延遲10s,10s內備用機不接受主節點心跳 就會發出警告
initdead 60 重啓後恢復網絡的時間(至少deadtime的2倍)
udpport 666 廣播通訊使用的端口
bcast eth0 使用廣播()
auto_failback on 故障轉換
watchdog /dev/watchdog 這個得加載一個模塊
node server66.example.com 主節點和輔助節點
node server68.example.com
ping 192.168.0.253 測試連通性,最好是網關
respawn選項是可選的,列出與heartbeat一塊兒啓動和關閉的進程,該進程通常是和heartbeat集成的插件,這些進程遇到故障能夠自動重啓。默認使用ipfail
respawn hacluster /usr/lib64/heartbeat/ipfail 檢測和處理網絡故障
#apiauth client-name gid=gidlist uid=uidlist
apiauth ipfail gid=haclient uid=hacluster ipfail的運行用戶和組
加載watchdog,軟fence監控heartbeat而且重啓
# modprobe softdog
# vi /etc/rc.local 設置開機自動加載
modprobe softdog
# vim authkeys 認證文件權限必須600
auth 3
#1 crc
#2 sha1 HI!
3 md5 Hello!
# chmod 600 authkeys
# vim haresources
server68.example.com IPaddr::192.168.0.234/24/eth0 httpd 定義主節點,虛擬ip和監控的服務
要肯定主節點的httpd服務啓動了
heartbeat默承認用監控一下目錄的服務:
/etc/init.d/ ;/etc/ha.d/resource.d/ ;/etc/ha.d/rc.d/
heartbeat安裝配置完成,此時能夠在另一臺主機上安裝heartbeat,而且進行相應的配置。(注意,在配置集羣的時候,儘可能選擇相同配置的主機,這樣便於之後管理和排錯)
測試heartbeat:
#/etc/init.d/heartbeat start 分別在兩臺heartbeat主機上啓動服務
#tail -f /var/log/message 查看日誌發現server68主機接管VIP資源,此時能夠ping同VIP
同時heartbeat服務監控本地httpd服務,發現httpd也會開啓
2、構建lvs負載均衡集羣
在以前兩臺heartbeat主機上進行相同的安裝配置操做(部分參數得指定)
使用lvs負載均衡會使用到三種工做方式(NAT/DR/TNU)和八種調度算法,這裏就作說明。
lvs的配置通常有三種方式:經過ipvsadm命令配置
經過ldirectord(heartbeat插件)來配置
經過紅帽可視化piranha軟件進行配置
經過ipvsadm命令配置lvs:
# ipvsadm -A -t 192.168.0.224:80 -s rr 定義一個VIP,使用輪詢
# ipvsadm -a -t 192.168.0.224:80 -r 192.168.0.103:80 -g 定義rs使用DR模式
# ipvsadm -a -t 192.168.0.224:80 -r 192.168.0.191:80 -g
本章將使用ldirectord配置lvs:
ldirectord工做原理:
ldirectord 須要你在真實服務器內啓用apache服務器,並在每臺真實服務器web服務器的根目錄下創建你在配置文件所指定的文件與內容,而後ldirectord 經過循環檢查此文件來肯定真實服務器是否存活,若是不存活,則自動將其權重設爲0,以確保後面客戶的鏈接不會再導向失效的真實服務器,若是真實服務修復上線後,則其又將它的權重設爲以使它可以繼續爲客端鏈接提供服務。
ldirectord主要是經過調用ipvsadm來建立ipvs虛擬服務器表。
#yum install ipvs -y
#yum localinstall ldirectord****.rpm
perl-IO-Socket-INET6 ldirectord啓動時須要的包
#/etc/init.d/ldirectord start
使用ldirectord來配置lvs,並將ldirectord交給heartbeat控管:
將lvs交給ldirectord來監控:
注意:heartbeat上安裝ldirectord
heartbeat上安裝lvs
主備配置文件一致
#cp -r /usr/share/doc/packages/ldirectord/ldirectord.cf /etc/ha.d/
#vim /etc/ha.d/ldirectord.cf
virtual=192.168.0.224:80 定義虛擬資源VIP
real=192.168.0.103:80 gate 指定後端真實服務器,採用DR調度模式
real=192.168.0.191:80 gate
fallback=127.0.0.1:80 gate 當真實服務器宕機,本機自動接管
service=http
scheduler=rr 使用輪詢調度算法
#persistent=600
#netmask=255.255.255.255
protocol=tcp
checktype=negotiate
checkport=80
#vim /etc/init.d/ldirectord
#. /etc/ha.d/shellfuncs 註釋掉
#/etc/init.d/ldirectord start
Real Server須要進行一下配置:
注意:在配置lvs負載均衡時,後端真實服務器須要制定VIP和禁止arp(使用arptables軟件)
#yum install arptables_jf -y
#ifconfig lo:0 192.168.0.224 netmask 255.255.255.255
#arptables -A IN -d 192.168.0.224 -j DROP VIP設置
#arptables -A OUT -s 192.168.0.224 -j mangle --mangle-ip-s 192.168.0.103 增長RS
#/etc/init.d/arptables_jf save
#chkconfig arptables_jf on
lvs負載均衡集羣配置成功
測試:在瀏覽器中訪問http://192.168.0.224 會自動加載103和191的web發佈頁面,刷新會自動跳轉則配置成功。
3、整合heartbeat+lvs實現高可用負載均衡
首先在另一臺heartbeat主機上安裝而且配置LVS,而且啓動相應的服務。
修改heartbeat資源配置文件:
# vim haresources
server68.example.com IPaddr::192.168.0.224/24/eth0 httpd ldirectord
注意:主備心跳節點必須同步哦
這樣,就可使用heartbeat來監控和控制lvs了(實際上是heartbeat可以監控三個目錄裏的腳本文件,就直接監控了ldirectord,而ldirectord又用來配置和監控LVS)
測試:如今直接關閉ldirectord
開啓heartbeat,會發現ldirectord開啓了,同時訪問流量器可以訪問RS的內容
實際上是lvs負載均衡過來的哦
測試高可用性和負載均衡性吧!
1.當關閉任何一個heartbeat主機,另一個heartbeat主機會進行檢測和接管服務(VIP和ldirectord,ldirectord其實監控的lvs),所以不會影響客戶對後端真實服務的訪問。
2.負載均衡測試:在不斷的刷新過程當中,會刷新出不一樣Real Server主機發布的頁面。