LVS+heartbeat+ldirectord高可用負載均衡集羣解決方案

LVS是Linux Virtual Server的簡寫,意即Linux虛擬服務器,是一個虛擬的服務器集羣系統。本項目由章文嵩博士在1998年5月創立,是中國國內最早出現的自由軟件項目之一。其作用是實現LB(Load Balance)將大量的併發訪問或數據流量分擔到多臺節點設備上分別處理,減少用戶等待響應的時間;將單個重負載的運算分擔到多臺節點設備上做並行處理,每個節點設備處理結束後,將結果彙總,返回給用戶,系統處理能力得到大幅度提高。

HA(High Avalibaility)高可用性,即雙機熱備的方式保證服務的高可用性

本文高可用負載均衡集羣解決方案,是在LVS實現負載均衡的基礎之上,採用雙機熱備director來保證lvs個高可用性,並通過heartbeat實時監聽主director的運行狀態,另外使用ldirectord實時監測director後端Real Server的健康狀態,將不能正常提供服務的主機離線。

整套方案拓撲架構如圖:

下面開始詳述實現步驟:

一、兩臺Real Server:RS1、RS2的配置

初始化步驟:配置ip地址、主機名、yum源等不在贅述

  1. echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore 
  2. echo 2> /proc/sys/net/ipv4/conf/lo/arp_announce 
  3. echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore 
  4. echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce 
  5. #定義內核參數,禁止real server響應ARP廣播請求 

Ps:由於使用DR模型故要屏蔽arp對後端realserver的解析

  1. ifconfig lo:0 192.168.0.123 broadcast 192.168.0.123 netmask 255.255.255.255 up 
  2. #在迴環端口配置對外通信的VIP,並鎖定其廣播域 
  3. route add -host 192.168.0.123 dev lo:0 
  4. #配置主機路由,使之對外發送數據包均使用VIP 
  1. yum install -y httpd 
  2. #安裝安裝web服務 
  3. service httpd start 
  4. echo '<h>Real Server 1</h>' >  /var/www/html/index.html 
  5. #添加real server測試頁面 
  6. mkdir /var/www/html/test/ 
  7. echo 'ok' >  /var/www/html/test/index.html 
  8. #爲ldirectord提供檢測頁面 
  9. service httpd start

Ps:這裏僅以RS1爲實例進行說明,RS2同此法操作。

二、高可用HA director節點的配置

初始化步驟:配置ip、yum源等。

Ps:兩臺director節點都使用雙網卡,eth0與real server同網段,eth1使用網卡直連用於傳輸心跳信號。

  1. vim /etc/hosts 
  2. 192.168.0.71    node1.a.org         node1 
  3. 192.168.0.72    node2.a.org         node1 
  4. #用於實現兩臺director節點間域名解析,此操作node1、node2相同 
  1. vim /etc/sysconfig/network 
  2. #設置主機名 
  3. hostname node1.a.org 
  4. #修改主機名使之立即生效 

使heartbeat信息加密傳輸

  1. ssh-keygen -t rsa 
  2. #生成密鑰 
  3. ssh-copy-id -i .ssh/id_rsa.pub root@node2.a.org 
  4. #將公鑰複製給node2 
  5. ssh node2 -- ‘ifconfig’ 
  6. #執行命令測試,此時應該顯示node2的ip信息 

安裝heartbeat

  1. cd heartbeat 
  2. yum localinstall -y --nogpgcheck ./* 
  3. #安裝此目錄中的所有rpm包 

  1. cd /usr/share/doc/heartbeat-2.1.4 
  2. cp authkeys /etc/ha.d/ 
  3. cp haresources /etc/ha.d/ 
  4. cp ha.cf /etc/ha.d/ 
  5. #拷貝heartbeat所需配置文件到指定目錄下 
  1. vim /etc/ha.d/ha.cf 
  2. bcast eth1 
  3. #定義心跳信息從那一塊網卡傳輸 
  4. node node1.a.org 
  5. node node2.a.org 
  6. #添加這兩行,用於指明心跳信號傳輸範圍 
  7. vim /etc/ha.d/authkeys 
  8. auth 2 
  9. 2 sha1 [鍵入隨機數] 
  10. chmod 400 authkeys 
  11. #保存退出並修改權限400 
  12. vim /etc/ha.d/haresource 
  13. node1.a.org         192.168.0.123/24/eth0/192.168.0.255 ldirectord::ldirectord.cf httpd
  14. #末行添加主節點域名,vip資源,廣播地址,ldirectord資源,以及用戶提供顯示錯誤頁面的httpd資源

同步配置文件到node2

  1. /usr/lib/heartbeat/ha_propagate 
  2. #腳本用來同步ha.cf和authkeys文件到node2 
  3. scp haresources node2:/etc/ha.d/ 
  4. #複製haresource到nod2 

配置ldirectord,同步配置文件

  1. cp /usr/share/doc/heartbeat-ldirectord-2.1.4/ldirectord.cf /etc/ha.d/ldirectord.cf 
  2. #複製ldirector的配置文件 

內容如下配置

  1. checktimeout=3 
  2. #當DR收不到realserver的迴應,設定幾秒後判定realserver當機或掛掉了,預設5秒。 
  3. checkinterval=1 
  4. #查詢間隔,每個幾秒偵測一次realserver 
  5. autoreload=yes 
  6. #配置文件發生改變是否自動重讀 
  7. quiescent=yes 
  8. #靜態鏈接,yes:表示偵測realserver宕機,將其權值至零(如果開啓了persistent參數不要用yes);no:表示偵測到宕機realserver,隨即將其對應條目從ipvsadm中刪除。 
  9. virtual=192.168.0.123:80 
  10.         real=192.168.0.51:80 gate 4 
  11.         real=192.168.0.52:80 gate 2 
  12.         fallback=127.0.0.1:80 gate #realserver全部失敗,vip指向本機80端口。 
  13.         service=http 
  14.         request="test/index.html" #用於健康檢測的url 
  15.         receive="ok"    #用於健康檢測的url包含的關鍵字 
  16.         scheduler=wlc 
  17.         #persistent=600 
  18.         #持久鏈接:表示600s之內同意ip將訪問同一臺realserver 
  19.         protocol=tcp 
  20.         checktype=negotiate 
  21.         #檢查類型:negotiate,表示DR發送請求,realserver恢復特定字符串才表示服務正常;connect,表示DR能夠連線realserver即正常。 
  22.         checkport=80 

啓動兩個節點上的heartbeat

  1. service heartbeat start 
  2. ssh node2 -- 'service heartbeat start' 
  3. #啓動兩節點heartbeat服務  

Ps:ldirectord同vip一樣是DR節點爭奪的資源,由heartbeart啓動 

 tail -f /var/log/messages

應出現:heartbeat: info: Running /etc/ha.d/resource.d/ldirectord ldirectord.cf start

ip、ldirectord和httpd資源被主節點成功啓動

或查看ipvsadm -ln

在主節點上安裝httpd服務,並創建測試頁

  1. yum install -y httpd  
  2. #安裝安裝web服務  
  3. echo '<h2>sorry, web service is down, please try again later...</h2>' >  /var/www/html/index.html  
  4. #node1上添加報錯提示  
  5. echo 'sorry, web service is down, please try again later...' >  /var/www/html/index.html  
  6. #node2上添加報錯提示,此處字體不同以示區別 

三、測試

使用瀏覽器訪問web頁面,多次刷新RS1和RS2都能訪問到

ab測試wlc算法的負載均衡 

 

關閉node1上的heartbeat模擬主節點宕機,並進行ab測試,node2上查看ipvsadm

依舊能夠從備份DR節點node2訪問web服務並實現負載均衡

重啓node1上heartbeat,關閉RS1的httpd服務,查看ipvsadm 

idirectord立即檢測到,並將RS1的權值至0 

繼續關閉RS2的httpd服務,查看ipvsadm

RS2權值至0,本地權值至1

刷新瀏覽器頁面

主節點node1 web服務反饋realserver宕機提示信息

此時關閉node1上heartbeat,刷新頁面

備份節點node2 web服務反饋realserver宕機提示信息

 

至此LVS+heartbeat+ldirectord高可用負載均衡集羣解決方案的實現流程已敘述完畢,以上內容在您實現過程中出現的任何問題,歡迎在此交流;並請各位高手前輩大神達人予以批評指正,謝謝!

 

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