首先,瞭解下LVS的工做原理,LVS有三種工做模式,分別是NAT, TUN和DR,調度算法上LVS有十種調度算法,分別是rr, wrr, lc, wlc, lblc, lblcr, dh, sh, sed, nq,工做模式和調度算法能夠根據本身需求進行設置。
LVS三種工做模式:算法
- NAT 地址轉換
原理:就是把客戶端發來的數據包的IP頭的目的地址,在負載均衡器上換成其中一臺RS的IP地址,併發至此RS來處理,RS處理完成後把數據交給通過負載均衡器,負載均衡器再把數據包的原IP地址改成本身的IP,將目的地址改成客戶端IP地址便可。期間,不管是進來的流量,仍是出去的流量,都必須通過負載均衡器。優勢:集羣中的物理服務器可使用任何支持TCP/IP操做系統,只有負載均衡器須要一個合法的IP地址。
缺點:擴展性有限。當服務器節點(普通PC服務器)增加過多時,負載均衡器將成爲整個系統的瓶頸,由於全部一的請求包和應答包的流向都通過負載均衡器。當服務器節點過多時,大量的數據包都交匯在負載均衡器那,速度就會變慢。
- TUN 隧道
原理:隧道模式就是,把客戶端發來的數據包,封裝一個新的IP頭標記(僅目的IP)發給RS,RS收到後,先把數據包的頭解開,還原數據包,處理後接返回給客戶端,不須要再通過負載均衡器。注意,因爲RS須要對負載均衡器發過來的數據包進行還原,因此說必須支持IP Tunneling協議。因此,在RS的內核中,必須編譯支持IPTUNNEL這個選項。
優勢:負載均衡器只負責將請求包分發給後端節點服務器,而RS將應答包直接發給用戶。因此,減小了負載均衡器的大量數據流動,負載均衡器再也不是系統的瓶頸,就能處理很巨大的請求量,這種方式,一臺負載均衡器可以爲不少RS進行分發。並且跑在公網上就能進行不一樣地域的分發。
缺點:隧道模式的RS節點須要合法IP,這種方式須要全部的服務器支持IP Tunneling(IP Encapsulation)協議,服務器可能只侷限在部分Linux系統上。
- DR 直接路由
原理:負載均衡器和RS都使用同一個IP對外服務。但只有DR對ARP請求(根據IP獲取Mac地址請求)進行響應,全部RS對自己這個IP的ARP請求保持靜默。也就是說,網關會把對這個服務IP的請求所有定向給DR,而DR收到數據包後根據調度算法,找出對應的RS,把目的MAC地址改成RS的MAC(由於IP一致)並將請求分發給這臺RS。這時RS收到這個數據包,處理完成以後,因爲IP一致,能夠直接將數據返給客戶,則等於直接從客戶端收到這個數據包無異,處理後直接返回給客戶端。因爲負載均衡器要對二層包頭進行改換,因此負載均衡器和RS之間必須在一個廣播域,也能夠簡單的理解爲在同一臺交換機上。
優勢:和TUN(隧道模式)同樣,負載均衡器也只是分發請求,應答包經過單獨的路由方法返回給客戶端。與TUN相比,DR這種實現方式不須要隧道結構,所以可使用大多數操做系統作爲物理服務器。
缺點:要求負載均衡器的網卡必須與物理網卡在一個物理段上。
三種工做模式中,NAT限制最小,同時效率也是最低的,TUN和DR兩種效率比較高,DR效率最高,不過DR要求在局域網中,通常推薦使用DR模式。
LVS提供和十種調度算法:後端
- 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)從靜態分配的散列表找出對應的服務器,若該服務器是可用的且未超載,將請求發送到該服務器,不然返回空。
- sed 最短時間望延遲 (Shortest Expected Delay)
sed算法基於wlc算法,只是在wlc上作了微調,(活動鏈接數 + 1)x 256 / 權重。
- nq 永不排隊(never queue)
無需隊列,若是有臺realserver的鏈接數=0就直接分配過去,不須要在進行sed運算。
管理集羣服務:服務器
- 添加或者修改配置
-A|E -t|u|f service-address [-s scheduler]
-t:tcp協議的集羣服務 -u:udp協議的集羣 -f:FWM:防火牆標記
-s: rrr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq
ipvsadm -A t 192.168.1.100:80 –s rr
ipvsadm -E t 192.168.1.100:80 –s rr
- 刪除配置
-D -t|u|f service-address
ipvsadm -D -t 192.168.100:80
- 清除配置
ipvsadm -C
- 保存配置
ipvsadm -S > file
- 載入配置
ipvsadm -R < file
- 查看配置
ipvsadm -L
管理集羣服務中的RS:網絡
- 添加或者修改RS
-a|e virtual-service -r server-address [-g|i|m] [-w weight] [-x upper] [-y lower]
-g: DR -i: TUN -m: NAT
ipvsadm -a -t 192.168.1.100 -r 192.168.1.101 -g
ipvsadm -a -t 192.168.1.100 -r 192.168.1.102 -g
- 刪除RS
-d -t|u|f service-address -r server-address
ipvsadm -d -t 192.168.1.100 -r 192.168.1.101
搭建過程:併發
首先,咱們選擇DR工做模式和rr調度算法。Linux內核從2.6.x起已經支持LVS,因此只須要安裝ipvsadm管理便可,具體步驟以下:負載均衡
- 安裝配置ipvsadm
apt-get install ipvsadm
dpkg–reconfigure ipvsadm
- 建立vip進行廣播
vip = 192.168.100 (用於廣播)
dip = 192.168.101 (用於實現HA)
rip = 192.168.1.102
ifconfig eth0:0 192.168.1.100 netmask 255.255.255.0
// 配置虛擬外網網卡,並設置vip和netmask,正常對外工做
- 建立集羣
ipvsadm -A -t 192.168.1.100:80 –s rr
ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.102:80 -g
ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.103:80 -g
ipvsadm -S
- 修改sysctl.conf
net.ipv4.ip_forward=0
net.ipv4.conf.all.send_redirects=1
net.ipv4.conf.default.send_redirects=1
net.ipv4.conf.eth0.send_redirects=1
sysctl -p 生效
- RS配置 sudo ifconfig lo:0 192.168.1.100 netmask 255.255.255.255 // 配置虛擬網卡,網卡必須是lo,netmask必須爲255.255.255.255,不然會響應客戶端的arp 修改/etc/sysctl.conf // DR的原理就是限制RS ARP響應,ARP用到就是廣播 net.ipv4.conf.all.arp_ignore=1 // 只對本身網卡地址作ARP響應 net.ipv4.conf.all.arp_announce=2 // 只攜帶外網網卡地址做爲原地址發送ARP請求 sysctl –p 生效