目錄:
1.lvs簡介
2.lvs模式(四種)
3.lvs調度算法
3.安裝
版本說明: ipvs1.26 系統版本: 2.6.32-642.el6.x86_64
1.lvs簡介
- 負載均衡 這裏用LVS
從2.4.24以後IPVS已經成爲linux官方標準內核的一部分, lvs已經被Linux集成到內核中了,內核模塊爲ipvs.不能直接配置內核中的ipvs,而需要使用ipvs的管理工具ipvsadm進行管理。通過keepalived也可以管理LVS。 LVS體系結構與工作原理簡單描述 所以我們要調用ipvs內核的兩種方法: - ipvsadm 命令行管理ipvs (瞭解即可) - keepalived 管理 (使用這種)
2.lvs四種模式介紹:
NAT 模式
DR 模式 (重點是DR模式,其他模式瞭解即可)
tun 隧道模式
full-NAT模式 淘寶自創模式
其中DR模式效率最高
DR模式原理:
名詞解釋:
CIP : 客戶源IP
VIP : 虛擬IP
DIP : LB 調度器IP
DR模式原理: 直接路由模式
lvs 負載均衡器主要做的是修改目的mac,將mac改爲某一臺real_server
real server 主要做的是 1.綁定vip 2.抑制arp
數據包流程:
客戶求請求由LVS接受,但是由Real Server返還給用戶信息,不經過LVS轉發.
這裏引發一個問題: 當用戶請求時,源IP是CIP,目標地址是VIP;LVS調度器將請求轉發給Real Server處理後再發送給用戶,這個時候源IP是RIP,目標地址是CIP,但是用戶並沒有請求RIP,用RIP響應請求時CIP不會接受,所以需要用VIP響應請求。
所以DR原理是:
DR模式下LVS和Real server都需要配備一樣的VIP(Real Server通過將VIP綁定在loopback實現).
但是 同一個局域網中,多臺服務器出現同樣的IP地址會引起衝突(arp協議的ip地址衝突檢測機制,免費arp),so 那麼如何工作下去?
需要在調度服務器上設置一個VIP和DIP, 每個RS也有一個RIP和VIP,但是RS需要對VIP地址做隱藏,不會應答ARP廣播,只有在響應CIP時,作爲源地址使用.
當產生請求時,LVS將目標mac修改爲RS中的MAC,然後轉發到相應的RS上處理,此時源,目的IP都沒有改變,RS收到LVS轉發來的包時,發現mac是自己的,IP也是自己的,所以合法接收,並直接回復,不經過LVS.
注意: 免費arp,主機發送自己的ip查詢mac,如果沒有應答ok,有應答出事.
其他模式簡介:
NAT模式簡介:
這個是通過網絡地址轉換的方法來實現調度的。
首先調度器(LB)接收到客戶的請求數據包時(請求的目的IP爲VIP),根據調度算法決定將請求發送給哪個後端的真實服務器(RS)。然後調度就把客戶端發送的請求數據包的目標IP地址及端口改成後端真實服務器的IP地址(RIP),這樣真實服務器(RS)就能夠接收到客戶的請求數據包了。真實服務器響應完請求後,查看默認路由(NAT模式下我們需要把RS的默認路由設置爲LB服務器。)把響應後的數據包發送給LB,LB再接收到響應包後,把包的源地址改成虛擬地址(VIP)然後發送回給客戶端。
原理圖簡述:
1)客戶端請求數據,目標IP爲VIP
2)請求數據到達LB服務器,LB根據調度算法將目的地址修改爲RIP地址及對應端口(此RIP地址是根據調度算法得出的。)並在連接HASH表中記錄下這個連接。
3)數據包從LB服務器到達RS服務器webserver,然後webserver進行響應。Webserver的網關必須是LB,然後將數據返回給LB服務器。
4)收到RS的返回後的數據,根據連接HASH表修改源地址VIP&目標地址CIP,及對應端口80.然後數據就從LB出發到達客戶端。
5)客戶端收到的就只能看到VIP\DIP信息。
TUN模式
採用NAT模式時,由於請求和響應的報文必須通過調度器地址重寫,當客戶請求越來越多時,調度器處理能力將成爲瓶頸。爲了解決這個問題,調度器把請求的報文通過IP隧道轉發到真實的服務器。真實的服務器將響應處理後的數據直接返回給客戶端。這樣調度器就只處理請求入站報文,由於一般網絡服務應答數據比請求報文大很多,採用VS/TUN模式後,集羣系統的最大吞吐量可以提高10倍。
VS/TUN的工作流程圖如下所示,它和NAT模式不同的是,它在LB和RS之間的傳輸不用改寫IP地址。而是把客戶請求包封裝在一個IP tunnel裏面,然後發送給RS節點服務器,節點服務器接收到之後解開IP tunnel後,進行響應處理。並且直接把包通過自己的外網地址發送給客戶不用經過LB服務器。
原理圖過程簡述:
1)客戶請求數據包,目標地址VIP發送到LB上。
2)LB接收到客戶請求包,進行IP Tunnel封裝。即在原有的包頭加上IP Tunnel的包頭。然後發送出去。
3)RS節點服務器根據IP Tunnel包頭信息(此時就又一種邏輯上的隱形隧道,只有LB和RS之間懂)收到請求包,然後解開IP Tunnel包頭信息,得到客戶的請求包並進行響應處理。
4)響應處理完畢之後,RS服務器使用自己的出公網的線路,將這個響應數據包發送給客戶端。源IP地址還是VIP地址。(RS節點服務器需要在本地迴環接口配置VIP,後續會講)
各種模式優缺點對比:
DR模式 | VS/NAT | VS/TUN |
1. 高併發 RS響應處理後的報文無需經過調度器LB,因此併發訪問量大時使用效率很高(和NAT模式比) 2. 同一個局域網: DR模式是通過MAC地址改寫機制實現轉發,因此所有RS節點和調度器LB只能在一個局域網裏面 3. RS主機需要綁定VIP地址在LO接口上,並且需要配置ARP抑制 | NAT模式優缺點: 1、NAT技術將請求的報文和響應的報文都需要通過LB進行地址改寫,因此網站訪問量比較大的時候LB負載均衡調度器有比較大的瓶頸,一般要求最多之能10-20臺節點 2、只需要在LB上配置一個公網IP地址就可以了。 3、每臺內部的節點服務器的網關地址必須是調度器LB的內網地址。 4、NAT模式支持對IP地址和端口進行轉換。即用戶請求的端口和真實服務器的端口可以不一致。 | 可以WAN 環境 但是需要隧道支持. |
優點:性能最高 缺點: 不能跨域LAN | 優點:地址和端口轉換 缺點: 效率低 | 優點:WAN環境,加密數據 缺點:需要隧道支持 |
lvs調度算法
參考此文章:http://www.linuxvirtualserver.org/zh/lvs4.html
共8種算法,分爲兩類:
固定調度算法和動態調度算法:
固定調度算法:rr,wrr,dh,sh
動態調度算法:wlc,lc,lblc,lblcr
算法 | 說明 |
rr | 輪詢算法 |
wrr | 加權輪詢調度: 它將依據不同RS的權值分配任務。權值較高的RS將優先獲得任務,並且分配到的連接數將比權值低的RS更多。相同權值的RS得到相同數目的連接數。 |
wlc | 加權最小連接調度: 假設各臺RS的權值依次爲Wi,當前tcp連接數依次爲Ti,依次去Ti/Wi爲最小的RS作爲下一個分配的RS |
dh | 目的地址hash調度: 以目的地址爲關鍵字查找一個靜態hash表來獲得需要的RS |
sh | 源地址hash調度: 以源地址爲關鍵字查找一個靜態hash表來獲得需要的RS |
lc | 最小連接數調度: IPVS表存儲了所有活動的連接。LB會比較將連接請求發送到當前連接最少的RS. |
lblc | 基於地址的最小連接數調度: 將來自同一個目的地址的請求分配給同一臺RS,此時這臺服務器是尚未滿負荷的。否則就將這個請求分配給連接數最小的RS,並以它作爲下一次分配的首先考慮 |
LVS算法選型:
1、一般的網絡服務,如http,mail,mysql等常用的LVS調度算法爲:
a.基本輪詢調度rr
b.加權最小連接調度wlc
c.加權輪詢調度wrc
2、基於局部性的最小連接lblc和帶複製的給予局部性最小連接lblcr主要適用於web cache和DB cache
3、源地址散列調度SH和目標地址散列調度DH可以結合使用在防火牆集羣中,可以保證整個系統的出入口唯一。
lvs安裝
安裝LVS軟件
1)在安裝LVS軟件之前,先確定兩條HTTPserver是能夠正常訪問的。
2)下載軟件
wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24.tar.gz
這裏我們使用的2.4版本,並且注意內核是2.6版本的,如果你的版本是6.X版本的話,那麼可以使用2.6版本
3)編譯安裝
需要創建一個軟連接:ln -s /usr/src/kernels/2.6.18-238.el5-i686 /usr/src/linux
此處紅色許根據自己的系統來進行定義,可以使用tab鍵來補齊。
tar -zxf ipvsadm-1.24.tar.gz
cd ipvsadm-1.24
make
make install
lsmod |grep ip_vs
如果此時沒有顯示,則表示系統未將ipvs模塊加載進去.
ipvsadm --》因爲此時系統還沒有把ipvs模塊加載進系統,需要我們執行ipvsadm命令纔會加載進去
或者modprobe ip_vs
DR模式
在real server上需要做的是:
1.添加lo口的vip
ifconfig lo:0 192.168.255.10/32 up
route add -host 192.168.255.10 dev lo
2.在realserver上抑制rap響應:
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
小結:
lvs故障排錯理論
1.調度器上LVS的規則和IP的正確性
2.RS上做VIP綁定和arp抑制檢查
lvs試驗:
3臺機器,一臺lvs 2臺nginx
3臺機器都安裝ipvsadm,如果報錯說明下列依賴包沒有,yum安裝
yum install libnl* popt* -y
lvs:
ipvsadm -C
ipvsadm -Ln
ipvsadm -A -t 192.168.255.111:80 -s rr -p 20
ipvsadm -a -t 192.168.255.111:80 -r 192.168.255.137 -g -w 1
ipvsadm -a -t 192.168.255.111:80 -r 192.168.255.138 -g -w 1
real server:
373 cat /proc/sys/net/ipv4/conf/lo/arp*
374 cat /proc/sys/net/ipv4/conf/all/arp
若全爲0則:
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
添加vip地址和路由:
ifconfig lo:0 192.168.255.111/32 up
route add -host 192.168.255.111 dev lo:0