LVS是Linux Virtual Server的簡寫,意即Linux虛擬服務器,是一個虛擬的服務器集羣系統。本項目由章文嵩博士在1998年5月創立,是中國國內最先出現的自由軟件項目之一。其做用是實現LB(Load Balance)將大量的併發訪問或數據流量分擔到多臺節點設備上分別處理,減小用戶等待響應的時間;將單個重負載的運算分擔到多臺節點設備上作並行處理,每一個節點設備處理結束後,將結果彙總,返回給用戶,系統處理能力獲得大幅度提升。html
HA(High Avalibaility)高可用性,即雙機熱備的方式保證服務的高可用性。node
本文高可用負載均衡集羣解決方案,是在LVS實現負載均衡的基礎之上,採用雙機熱備director來保證lvs個高可用性,並經過heartbeat實時監聽主director的運行狀態,另外使用ldirectord實時監測director後端Real Server的健康狀態,將不能正常提供服務的主機離線。web
整套方案拓撲架構如圖:算法
下面開始詳述實現步驟:vim
1、兩臺Real Server:RS一、RS2的配置後端
初始化步驟:配置ip地址、主機名、yum源等不在贅述瀏覽器
- echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
- echo 2> /proc/sys/net/ipv4/conf/lo/arp_announce
- echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
- echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
- #定義內核參數,禁止real server響應ARP廣播請求
Ps:因爲使用DR模型故要屏蔽arp對後端realserver的解析服務器
- ifconfig lo:0 192.168.0.123 broadcast 192.168.0.123 netmask 255.255.255.255 up
- #在迴環端口配置對外通訊的VIP,並鎖定其廣播域
- route add -host 192.168.0.123 dev lo:0
- #配置主機路由,使之對外發送數據包均使用VIP
- yum install -y httpd
- #安裝安裝web服務
- service httpd start
- echo '<h>Real Server 1</h>' > /var/www/html/index.html
- #添加real server測試頁面
- mkdir /var/www/html/test/
- echo 'ok' > /var/www/html/test/index.html
- #爲ldirectord提供檢測頁面
- service httpd start
Ps:這裏僅以RS1爲實例進行說明,RS2同此法操做。架構
2、高可用HA director節點的配置併發
初始化步驟:配置ip、yum源等。
Ps:兩臺director節點都使用雙網卡,eth0與real server同網段,eth1使用網卡直連用於傳輸心跳信號。
- vim /etc/hosts
- 192.168.0.71 node1.a.org node1
- 192.168.0.72 node2.a.org node1
- #用於實現兩臺director節點間域名解析,此操做node一、node2相同
- vim /etc/sysconfig/network
- #設置主機名
- hostname node1.a.org
- #修改主機名使之當即生效
使heartbeat信息加密傳輸
- ssh-keygen -t rsa
- #生成密鑰
- ssh-copy-id -i .ssh/id_rsa.pub root@node2.a.org
- #將公鑰複製給node2
- ssh node2 -- ‘ifconfig’
- #執行命令測試,此時應該顯示node2的ip信息
安裝heartbeat
- cd heartbeat
- yum localinstall -y --nogpgcheck ./*
- #安裝此目錄中的全部rpm包
- cd /usr/share/doc/heartbeat-2.1.4
- cp authkeys /etc/ha.d/
- cp haresources /etc/ha.d/
- cp ha.cf /etc/ha.d/
- #拷貝heartbeat所需配置文件到指定目錄下
- vim /etc/ha.d/ha.cf
- bcast eth1
- #定義心跳信息從那一塊網卡傳輸
- node node1.a.org
- node node2.a.org
- #添加這兩行,用於指明心跳信號傳輸範圍
- vim /etc/ha.d/authkeys
- auth 2
- 2 sha1 [鍵入隨機數]
- chmod 400 authkeys
- #保存退出並修改權限400
- vim /etc/ha.d/haresource
- node1.a.org 192.168.0.123/24/eth0/192.168.0.255 ldirectord::ldirectord.cf httpd
- #末行添加主節點域名,vip資源,廣播地址,ldirectord資源,以及用戶提供顯示錯誤頁面的httpd資源
同步配置文件到node2
- /usr/lib/heartbeat/ha_propagate
- #腳本用來同步ha.cf和authkeys文件到node2
- scp haresources node2:/etc/ha.d/
- #複製haresource到nod2
配置ldirectord,同步配置文件
- cp /usr/share/doc/heartbeat-ldirectord-2.1.4/ldirectord.cf /etc/ha.d/ldirectord.cf
- #複製ldirector的配置文件
內容以下配置
- checktimeout=3
- #當DR收不到realserver的迴應,設定幾秒後斷定realserver當機或掛掉了,預設5秒。
- checkinterval=1
- #查詢間隔,每一個幾秒偵測一次realserver
- autoreload=yes
- #配置文件發生改變是否自動重讀
- quiescent=yes
- #靜態連接,yes:表示偵測realserver宕機,將其權值至零(若是開啓了persistent參數不要用yes);no:表示偵測到宕機realserver,隨即將其對應條目從ipvsadm中刪除。
- virtual=192.168.0.123:80
- real=192.168.0.51:80 gate 4
- real=192.168.0.52:80 gate 2
- fallback=127.0.0.1:80 gate #realserver所有失敗,vip指向本機80端口。
- service=http
- request="test/index.html" #用於健康檢測的url
- receive="ok" #用於健康檢測的url包含的關鍵字
- scheduler=wlc
- #persistent=600
- #持久連接:表示600s以內贊成ip將訪問同一臺realserver
- protocol=tcp
- checktype=negotiate
- #檢查類型:negotiate,表示DR發送請求,realserver恢復特定字符串才表示服務正常;connect,表示DR可以連線realserver即正常。
- checkport=80
啓動兩個節點上的heartbeat
- service heartbeat start
- ssh node2 -- 'service heartbeat start'
- #啓動兩節點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服務,並建立測試頁
- yum install -y httpd
- #安裝安裝web服務
- echo '<h2>sorry, web service is down, please try again later...</h2>' > /var/www/html/index.html
- #node1上添加報錯提示
- echo 'sorry, web service is down, please try again later...' > /var/www/html/index.html
- #node2上添加報錯提示,此處字體不一樣以示區別
3、測試
使用瀏覽器訪問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高可用負載均衡集羣解決方案的實現流程已敘述完畢,以上內容在您實現過程當中出現的任何問題,歡迎在此交流;並請各位高手前輩大神達人予以批評指正,謝謝!