Ubuntu10.04.4 Server下基於LVS DR模式+Keepalived的負載均衡高可用集羣
linux
LVS 2 shell
Keepalvied 2 ubuntu
ubuntu系統環境準備工做 2 bash
更換Ubuntu軟件源 2 服務器
架構拓撲圖 2 網絡
服務安裝 3 架構
安裝LVS 3 負載均衡
安裝Keepalived 3 less
申明:這只是我照着網絡上的相關技術文檔作實驗後的整理
LVS是Linux Virtual Server的簡寫,意即Linux虛擬服務器,是一個虛擬的服務器集羣系統。本項目在1998年5月由章文嵩博士成立,是中國國內最先出現的自由軟件項目之一。目前有三種IP負載均衡技術(VS/NAT、VS/TUN和VS/DR);
十種調度算法(rrr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq)。
Keepalived在這裏主要用做RealServer的健康狀態檢查以及LoadBalance主機和BackUP主機之間failover的實現,對lvs的單點故障提供高可用接管方案
將源配置爲:http://old-releases.ubuntu.com/ubuntu/(國內163等源對舊版本的ubuntu已不支持了)
分別在lbserver一、lbserver2上安裝lvs
它是基於linux內核實現的,2.6.X內核默認集成了lvs模塊,須要安裝管理工具ipvsadm。若是已安裝過會提示已是最新版本)
#apt-get install ipvsadm
第一次運行ipvsadm前須要配置下ipvsadm(#vi /etc/init.d/ipvsadm)
#dpkg–reconfigure ipvsadm
[no](不自動啓動)-->[master](設爲主LB Server)-->「eth0」(默認第一塊網卡)-->[yes](肯定後返回)
查看ipvsadm安裝路徑
#which ipvsadm
查看ipvsadm的版本
#ipvsadm -v
其餘的命令可以使用 ipvsadm --help | less 查看,關於lvs的具體知識見附錄A
分別在lbserver一、lbserver2上安裝lvs
#apt-get install keepalived
查找Keepalived的安裝路徑
#which keepalived
查找Keepalived的版本
#keepalived -v
查看init.d文件夾下是否有LVS、Keepalived啓動文件
#ls -/etc/init.d/ | grep 「ipvsadm\|keepalived」
分別在lbserver一、lbserver2上建立啓動腳本 (* 附錄B)
#vi /root/lvs.sh
#!/bin/bash vip=192.168.56.200 rs1=192.168.56.201 rs2=192.168.56.202 #clear ipvs tables ipvsadm -C #set LVS Server ipvsadm -A -t $vip:80 -s rr ipvsadm -a -t $vip:80 -r $rs1:80 -g -w 1 #-w表示權重,默認爲1 ipvsadm -a -t $vip:80 -r $rs2:80 -g #不加-w 1效果同上句 # update /etc/sysctl.conf,如下配置重啓後將復原 echo "1" >/proc/sys/net/ipv4/ip_forward #啓用ip轉發 echo "1" >/proc/sys/net/ipv4/conf/all/send_redirects echo "1" >/proc/sys/net/ipv4/conf/default/send_redirects echo "1" >/proc/sys/net/ipv4/conf/eth0/send_redirects #sysctl -p #查看sysctl的配置變化,可不執行
*:這裏rr表示ipvsadm的8種算法中的輪詢,作實驗選這個算法,效果比較明顯。-g,就是lvs的三種模式中的LVS-DR模式。-i 就是遂道LVS-TUN.爲何eth0:0的broadcast就是它的IP,由於他的netmask爲/32.(the VIP is a /32 addr, so the brd addr is the VIP, not x.x.x.255.)
分別在real server一、real server2上建立啓動腳本 (* 附錄B)
#vi /root/rs.sh
#!/bin/bash vip=192.168.56.200 ifconfig lo:0 $vip netmask 255.255.255.255 broadcast $vip up #網關要和虛ip同樣,掩碼不能同於eth0的 route add -host $vip dev lo:0 #添加永久路由 #echo "0" >/proc/sys/net/ipv4/ip_forward #關閉real server ip轉發,2.6.*內核默認是關閉的 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 #sysctl -p #查看sysctl的配置變化,可不執行
要在未開啓Cookie狀況下刷新效果明顯,2min流轉一次估計
查看lvs的運行情況
查看lvs日誌
查看Keepalived啓動文件
#cat /etc/init.d/keepalived
編輯主機keepalived配置文件
#vi /etc/keepalived/keepalived.conf
備機的配置文件,加 * 號處須要注意或作修改
# Global Configuration global_defs { router_id ubuntu-lvs-a # * 當前Server主機名 } # VRRP Configuration vrrp_instance LVS { state MASTER # * 主機或備機(MASTER/BACKUP) interface eth0 # * 綁定到哪一個網卡 virtual_router_id 51 #VRID標記(0~255),主備要保持相同 priority 150 # * 優先級,MASTER要高於BACKUP的優先級(至少50) advert_int 1 #檢查間隔時間,默認1秒 authentication { auth_type PASS #指定要使用哪種認證(PASS|AH) auth_pass 123456 #指定要使用的密碼字符串 } virtual_ipaddress { 192.168.56.200 # * VIP } } # Virtual Server Configuration - for WWW service virtual_server 192.168.56.200 80 { delay_loop 1 lb_algo rr #調度算法,這裏用了最簡單的rr lb_kind DR #包轉發模式 persistence_timeout 60 #長鏈接超時設置爲60秒 protocol TCP # Real Server 1 configuration real_server 192.168.56.201 80 { #real_server就是用來定義真實服務器的 weight 3 #權重,默認設爲3 TCP_CHECK { connection_timeout 10 #鏈接遠程真實服務器超時時間(秒) nb_get_retry 3 #最大重試次數 delay_before_retry 3 #連續兩次重試的延遲時間(秒) } } real_server 192.168.56.202 80 { weight 1 TCP_CHECK { connection_timeout 10 nb_get_retry 3 delay_before_retry 3 } } }
啓動keepalived
#/etc/init.d/keepalived start
查看keepalived日誌
#tail -f /var/log/message
附錄A lvs參數簡介
部分參數以下:man ipvsadm能夠所有看到。
-A, --add-service Add a virtual service
-E, --edit-service Edit a virtual service
-D, --delete-service Delete a virtual service
-C, --clear Clear the virtual server table.
-R, --restore
-S, --save
-a, --add-server Add a real server to a virtual service
-e, --edit-server Edit a real server in a virtual service
-d, --delete-server Remove a real server from a virtual service
-L, -l, --list List the virtual server table if no argument is specified
-t, --tcp-service Use TCP service.
-u, --udp-service Use UDP service
-s 指定服務採用的算法,經常使用的算法參數以下:
rr 輪叫(Round Robin)
調度器經過"輪叫"調度算法將外部請求按順序輪流分配到集羣中的真實服務器上,它均等地對待每一臺服務 器,而無論服務器上實際的鏈接數和系統負載。
wrr 加權輪叫(Weighted Round Robin)
調度器經過"加權輪叫"調度算法根據真實服務器的不一樣處理能力來調度訪問請求。這樣能夠保證處理能力強的服務器處理更多的訪問流量。調度器能夠自動問詢真實服務器的負載狀況,並動態地調整其權值。
lc 最少連接(Least Connections)
調度器經過"最少鏈接"調度算法動態地將網絡請求調度到已創建的連接數最少的服務器上。若是集羣系統的真實服務器具備相近的系統性能,採用"最小鏈接"調度算法能夠較好地均衡負載。
wlc 加權最少連接(Weighted Least Connections)
在集羣系統中的服務器性能差別較大的狀況下,調度器採用"加權最少連接"調度算法優化負載均衡性能,具備較高權值的服務器將承受較大比例的活動鏈接負載。調度器能夠自動問詢真實服務器的負載狀況,並動態地調整其權值。
lblc 基於局部性的最少連接(Locality-Based Least Connections)
"基於局部性的最少連接" 調度算法是針對目標IP地址的負載均衡,目前主要用於Cache集羣系統。該算法根據請求的目標IP地址找出該目標IP地址最近使用的服務器,若該服務器是可用的且沒有超載,將請求發送到該服務器;若服務器不存在,或者該服務器超載且有服務器處於一半的工做負載,則用"最少連接"的原則選出一個可用的服務器,將請求發送到該服務器。
lblcr 帶複製的基於局部性最少連接(Locality-Based Least Connections with Replication)
"帶複製的基於局部性最少連接"調度算法也是針對目標IP地址的負載均衡,目前主要用於Cache集羣系統。它與LBLC算法的不一樣之處是它要維護從一個目標IP地址到一組服務器的映射,而LBLC算法維護從一個目標IP地址到一臺服務器的映射。該算法根據請求的目標IP地址找出該目標IP地址對應的服務器組,按"最小鏈接"原則從服務器組中選出一臺服務器,若服務器沒有超載,將請求發送到該服務器,若服務器超載;則按"最小鏈接"原則從這個集羣中選出一臺服務器,將該服務器加入到服務器組中,將請求發送到該服務器。同時,當該服務器組有一段時間沒有被修改,將最忙的服務器從服務器組中刪除,以下降複製的程度。
dh 目標地址散列(Destination Hashing)
"目標地址散列"調度算法根據請求的目標IP地址,做爲散列鍵(Hash Key)從靜態分配的散列表找出對應的服務器,若該服務器是可用的且未超載,將請求發送到該服務器,不然返回空。
sh 源地址散列(Source Hashing)
"源地址散列"調度算法根據請求的源IP地址,做爲散列鍵(Hash Key)從靜態分配的散列表找出對應的服務器,若該服務器是可用的且未超載,將請求發送到該服務器,不然返回空。
-a 表示往一個服務內增長一個real server
-r 指定real server的IP地址
-w 表示權重
-g 表示使用DR方式,-m表示NAT方式,-i表示tunneling方式。
增長、故障lvs server
現有的lvs和keepalived無須重配置
增長、故障real server
須要對lvs server的lvs和keepalived都要配置,且要在新加的real server建立啓動腳本