3-2-基於LVS實現4層負載均衡原理講解
阿新 • • 發佈:2019-03-17
網站 響應報文 tunnel 數量 傳輸層 協議 pat 相關 請求報文 對負載均衡來講,最關鍵的就是調度器了
網絡傳輸層數:下四層由內核來管理及實現,被稱為通信子網,最上面三層,叫應用層,在用戶空間實現,叫做資源子網
lvs是四層的負載均衡器,而且是真正附著在netfilter(內核通信過濾或操作框架)不需要向內核監聽註冊某一端口,不再受套接字文件數量的限制,直接修改報文扔給後端,不需要自己扮演任何角色
tcp協議棧有65536個端口,主機只要向外發請求,就會用ip打開一個端口,像nginx這種運行在用戶空間的進程,就需要通過自己的套接字(打開端口)向後端服務器的套接字傳送信息,而端口數量是固定的,如果調度器工作在用戶空間,受限於工作模型,不能提高並發請求的性能
而lvs不用端口,源端口源IP不用改變,提高並發能力,有人做過測試,lvs可以在內核級實現400萬並發
網絡傳輸層數:下四層由內核來管理及實現,被稱為通信子網,最上面三層,叫應用層,在用戶空間實現,叫做資源子網
lvs是四層的負載均衡器,而且是真正附著在netfilter(內核通信過濾或操作框架)不需要向內核監聽註冊某一端口,不再受套接字文件數量的限制,直接修改報文扔給後端,不需要自己扮演任何角色
tcp協議棧有65536個端口,主機只要向外發請求,就會用ip打開一個端口,像nginx這種運行在用戶空間的進程,就需要通過自己的套接字(打開端口)向後端服務器的套接字傳送信息,而端口數量是固定的,如果調度器工作在用戶空間,受限於工作模型,不能提高並發請求的性能
而lvs不用端口,源端口源IP不用改變,提高並發能力,有人做過測試,lvs可以在內核級實現400萬並發
lvs大殺器,以後基本不會接觸到,因為不能做超出內核的(例如:cookie綁定,url過濾),有可能需要對內核進行二次開發才好用
可以做兩級調度,第一級lvs,後邊是nginx
lvs可以叫做調度器或director(導演)或分發器,後邊的server叫rs(real server)
pv:page view頁面瀏覽量pv一般大於uv一般大於IP
uv:unit view唯一的訪問者,兩個瀏覽器瀏覽同一個站點,也是兩個用戶
很多站點都是由不同的小集群(一個門戶網站的各個頻道)來承載,
構建架構,按照最大並發80%來算,最高不能超過95%
lvs:Linux Virtual Server VS:Virtual Server RS:Real Server l4:四層路由器,四層交換機---根據目標端口進行分發 VS:根據請求報文的目標IP和目標協議及端口將其調度轉發至某RealServer,根據調度算法來挑選RS; iptables/netfilter: iptables:用戶空間的管理工具; netfilter:內核空間上的框架: 流入:PREROUTING-->INPUT-->用戶空間 流出:用戶空間-->OUTPUT-->POSTROUTING 轉發:PREROUTING-->FORWARD-->POSTROUTING DNAT:目標地址轉換;PREROUTING; SNAT:源地址轉換;POSTROUTING; lvs工作在INPUT上★★★★★★ lvs:ipvsadm/ipvs---監聽用戶訪問的端口是不是集群服務,以規則的方式來定義,如果是,強行扭轉流量方向,直接扔給postrouting,註意會跟iptables規則有某些沖突,最好不要同時使用iptables ipvsadm:用戶空間的命令行工具,規則管理器,用於管理集群服務及相關的RealServer ipvs:工作於內核空間的netfilter的INPUT鉤子之上的框架; lvs集群類型中的術語: vs:Virtual Server,Director,Dispatcher,Balancer rs:Real Server,upstream server(上遊服務器),backend server(後端服務器) CIP:Client IP,VIP:Virtual server IP,RIP:Real server IP,DIP:Director IPVS應該有至少兩個IP,一個面向客戶端,一個面向後端服務器 CIP<-->VIP==DIP<-->RIP lvs集群的類型: lvs-nat:修改請求報文的目標IP;多目標IP的DNAT; lvs-dr:操縱封裝新的MAC地址 lvs-tun:在原請求IP報文之外新加一個IP首部;---隧道,tunnel lvs-fullnat:修改請求報文的源和目標IP和端口---非標準類型 lvs-nat:---根據需要看是否做端口映射 多目標IP的DNAT,通過將請求報文中的目標地址和目標端口修改為某挑出的RS的RIP和PORT實現轉發; (1)RIP和DIP必須在同一個IP網絡,且應該使用私網地址;RS的網關要指向DIP; (2)請求報文和響應報文都必須經由Director轉發;Director易於成為系統瓶頸; (3)支持端口映射,可修改請求報文的目標PORT; (4)vs必須是linux系統,rs可以是任意系統; lvs-dr Direct Routing,直接路由; 通過為請求報文重新封裝一個MAC首部進行轉發,源MAC是DIP所在的接口的MAC,目標MAC是某挑選出的RS的RIP所在接口的MAC;源IP/PORT以及目標IP/PORT均保持不變; Director和各RS都得配置使用VIP; (1)確保前端路由器將目標IP為VIP的請求報文發往Director; (a)在前端網關做靜態綁定;---不適用,容易單點故障 (b)在RS上使用arptables;內核3.0以後實現了iptables和arptables的統一,使用工具還是不方便,內核提供了修改一個參數就可以修改通告不通告 (c)在RS上修改內核參數以限制arp通告及應答級別; arp_announce---限制通告級別 arp_ignore---限制應答級別 (2)RS的RIP可以使用私網地址,也可以是公網地址;RIP與DIP在同一IP網絡;RIP的網關不能指向DIP,以確保響應報文不會經由Director; (3)RS跟Directory要在同一個物理網絡; (4)請求報文要經由Director,但響應不能經由Director,而是由RS直接發往Client; (5)不支持端口映射;
在路由器出口綁定director的mac地址,(目的是為了不讓rs廣播響應和廣播通告),iptables不能做二層的控制,所以linux內核4.0之後整合了iptables和arptables,叫做nftables
lvs-DR中:RS中把VIP配置在lo接口的別名上(基於內核參數控制)
netfilter工作在內核空間當中,有5個鉤子
1、剛剛入站時的prerouting(剛剛進入網卡)
根據報文的流向不同
2、到本機的Input,而後進入用戶空間
3、如果是轉發的,到達forward
4、forward之後是postrouting,然後離開本機
5、由本機內部的用戶空間發出output,然後路由postrouting,離開本機
3-2-基於LVS實現4層負載均衡原理講解