LVS筆記,(一)

LB解決方案Load Balancing

硬件:F5 big-ip,Cotrox Metscaler,A10,Array,Redware,深信服

軟件:LVS Linux Virtual Server(章文嵩,阿里),HAproxy(四層七層),Nginx(七層)

F5能夠識別應用的轉發,例如基於cookie的轉發.所以四層七層都能轉發

LVS:ipvs+ipvsadm 工作在TCP/UDP的四層,可以根據ip+端口(套接字)進行轉發,以及定義向何處轉發.無法識別應用層的轉發,通常稱之爲四層交換,四層路由


技術有點類似iptables的工作機制,ipvs工作在INput鏈,依賴於規則進行轉發,當匹配到相依規則,將input鏈上的請求,強行轉發至內部某一網絡.(目標地址可能更改,也可能不改).所以iptables和LVS的過濾機制有衝突.

ipvs用來定義集羣服務,定義後端一個或多個服務器.

ipvsadm:LVS的管理工具

LVS能夠轉發400W個請求,HAproxy上限65535(基於套接字)一般3-5W,F5600-700W個

一般入口設備用LVS調度,內部小規模集羣可用HAproxy,LVS

LVS工作機制

Director:調度器,提供LVS服務主機,也稱爲分發器(Dispatcher),負載均衡器(Load Balancing)

VIP:LVS主機的IP,提供響應用戶請求服務的虛擬IP,可以做IP轉移,

CIP:發起請求客戶端IP

Real Server:後端真正處理用戶請求的服務器

DIP:Director IP,LVS主機通往後端Real Server的網卡IP地址

RIP:Real Server的網卡地址

CIP<-->VIP<-->DIP<-->RIP

 客戶端   LVS服務器    後端服務器

LVS類型:

1,NAT:(多目標)相當於iptables的DNAT,將用戶請求,進行分析,將請求的IP地址修改爲後端一個服務器集羣,由一定規則進行修改,有可能每一次挑選的服務器都是不同的,從而實現負載均衡功能.iptables的NAT機制是修改爲明確的後端服務器,沒有負載均衡的功能

2,DR,(Direct Routing)發送響應時,不再經過Director,由RS在響應時僞裝爲VIP封裝響應報文,直接發到路由.分爲兩種:RIP可使用私有地址也可使用公網地址,當RIP(公網地址)和VIP在一個網段內是走同一個路由,當RIP(私有地址)和VIP不在一個網段內,接受請求和發送響應是走的不同路由,

3,TUN

4,FULLNAT

LVS NAT的特性,

1,RS應該使用私有地址

2,RS的網關必須要只想DIP

3,RIP和DIP必須在同一網段內,不能垮網段

4,進出的報文,請求和響應的報文都的經過Director,在高負載場景中,Director有可能成爲性能瓶頸

5,支持端口映射,

6,RS可以使用任意支持集羣服務的OS(windows,bsd)

由於響應報文也都有Director來構建,構建響應負載很大,(例如,用戶發來一個請求只是一個URL,而Director卻要響應一個幾M幾十M的頁面,用戶發來一個查詢請求,我們需要響應的是成百上千行內容)性能瓶頸只能支持10個服務器

LVS DR類型,

讓前端路由將請求發往VIP時只能是Director的vip,

解決方案

(1)靜態地址綁定,在前端路由上實現靜態MAC地址綁定VIP,缺點,未必有路由器的配置權限,Director故障轉移時靜態綁定難以適用

(2)arptables,在各RS安裝arptables程序,並編寫arptables規則,缺點依賴於獨特功能的應用

(3)修改Linux內核參數,將RS上的vip配置在lo接口的別名上;限制Linux僅對對應接口的ARP請求做響應.缺點,只能用在Linux服務器中,適應性差

LVS DR的特性

1,RS可以使用私有地址,但也可以使用公網地址,如果使用公網地址,可以直接通過互聯網連入RS以實現配置,監控等

2,RS的網關一定不能只想DIP,

3,RS跟Director要在同一物理網絡內(不能由路由器分隔,也不能垮VLAN)

4,請求報文經過Director,但響應報文一定不能經過Director,

5,因爲是基於MAC,不支持端口映射

6,RS可以使用大多數的操作系統.

LVS tun類型:IP隧道,擴展的DR模型,可以垮互聯網工作.類似DR的第二種類型,但是這時候使用的RIP必須是公網地址.

1,RIP,VIP都得是公網地址,DIP一般來講也要求公網地址,但是DIP不接受響應,所以也可用私有地址

2,RS的網關不會指向也不可能指向DIP

3,請求報文經過Director,但響應報文一定不經過Director

4,不支持端口映射

5,RS的OS必須得支持隧道功能.在報文IP首部能多加IP

LVS FULLNAT類型可以垮網絡的NAT模型,向後發送時把報文ip首部改爲DIP+RIP,向外發送時將IP首部改爲CIP+VIP以實現垮網絡通信.必須,修改內核.


LVS的調度方法:調度算法 Scheduling Method

前端的Director是否考慮後端的每一個RS當前正處於活動及非活動狀態,或只考慮活動狀態,將請求轉發至相應的RS

靜態方法,僅根據算法本身進行調度,不考慮RS當前是不是承載的有很多的用戶請求

rr:輪詢,rr和wrr無法解決session,只能用session複製或session服務器

wrr:Weighted RR:加權輪詢.根據服務器性能等指標給服務器一個權重(weight),根據其權重比例分配.權重越高,分配到的處理請求越多(能者多勞).

sh:source hashing :能夠將同一個ip的用戶定向至同一個服務器

dh:destination hashing :對目標地址進行hash,(作用在防火牆的目標追蹤功能下)

動態方法,根據算法及RS當前的負載狀態

lc:Least Connection:後端服務器哪一個服務器連接少,Overhead=Active(活動連接)*256+Inactive(非活動連接),結果小的overhead值獲得分配

wlc:Weighted LC,Overhead=Active*256+Inactive/weight,結果小的overhead值獲得分配.存在問題,權重分配不合理,不能合理分配連接

sed:Shortest Expect Delay,最小期望延遲.Overhead=(Active+1)*256/weight,結果小的overhead值獲得分配.

nq:Nerver Queue,永不排隊,在sed算法基礎上考慮權重,讓分配更合理.

lblc:Locality-based Least Connection,類似於dh+lc算法,用於後端是緩存服務器時,將同一個請求定位至同一個RS

lblcr:Replicated and Locality-based Least Connection,用於後端是緩存服務器時,將同一個請求定位至同一個RS

LVS缺陷,不會檢測後端服務器的健康狀態,所以每種算法都不能避免將請求調度到壞的RS上

grep -E -i "ipvs|IP_VS" /boot/config-2.6.32-431.el6.x86_64(查看內核配置文件,支持的LVS支持的協議,集羣服務,調度算法)

LVS的集羣服務,四層路由,四層交換:根據請求目標的套接字(第四層協議,ip+port,包括端口的端口協議類型tcp|udp)來實現轉發.ipvs在INPUT鏈上匹配規則,匹配到的請求,強行轉發到FORWARD,再交到POSTROUTING轉發到後端,LVS不能和iptables的Filter和NAT一塊來工作,可以和mangle表一起工作.

ipvsadm -A|E -t|u|f service-address [-s scheduler][-p [timeout]] [-M netmask]:

-A :添加一個集羣服務 

-t,tcp協議 -u,udp協議 -f,firewall mark,防火牆標記,通常用於將兩個或以上的服務綁定爲一個服務進行處理時使用(例如,支付切換需要從80轉換到443,把80和443標記爲一個集羣)

service-address: -t ip:port  -u ip:port  -f firewall_mark(用iptables打上的自定義數字一般爲1-99)

-s:調度方法,默認爲wlc,實際場景中效果最好的

-p timeout:persistent connection,持久連接,

-E :修改集羣服務選項和-A一樣

RS相關

ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight] [-x upper] [-y lower]

-a :向指定的CS集羣中添加RS

-t|u|f service-address,指明將RS添加至哪個Cluster Service中

-r:指定RS,可以包含ip:[port],只有支持端口映射的LVS的類型才允許使用跟集羣服務中不同的端口

-g|i|m:指定LVS類型默認是DR類型,-g DR   -i ipip LVSTUN   -m masquerade NAT

-w:指定權重,默認爲1

-x|y :最少連接數

-e:修改指定的RS屬性

ipvsadm -D -t|u|f service-address:刪除指定的集羣服務

ipvsadm -d -t|u|f service-address -r server-address:刪除指定集羣服務中的RS

ipvsadm -C:清空所有的規則

ipvsadm -S >> /etc/ipvs.conf, 相當於ipvsadm-save,只不過要用輸出重定向指定保存的文件

ipvsadm -R  << /etc/ipvs.conf    相當於ipvsadm-restor,只不過要用輸入重定向指定保存的文件

ipvsadm -L [option]:顯示ipvs規則,相當於iptables -L

-n :數字格式顯示ip地址

-c :顯示連接數相關信息

--stats :顯示統計數據,每個RS接受過多少連接,請求(響應)報文數,請求(響應)的字節數.Conns連接數,InPKts進入的報文數, OutPkts響應的報文數,InBytes進入的字節數,OutBytes響應的字節數

--rate :平均數據 CPS平均每秒的連接數,  InPPs平均每秒的進入報文數, OutPPs平均每秒的響應報文數, InBPS平均每秒的進入字節數, OutBPS平均每秒的響應字節數,

--timeout :顯示tcp會話時長

--daemon :顯示ipvs集羣服務的狀態和多播接口

--sort:進行協議,ip,端口排序

--exact :對輸出數據不做單位換算,顯示精確值

ipvsadm -Z [-t|u|f service-address]:清空所有規則的計數器,清零-L查看的所有數據

使用ipvs前要清空iptables的規則iptables -F 或者iptables -F -t filter


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