1. 程式人生 > >3-2-基於LVS實現4層負載均衡原理講解

3-2-基於LVS實現4層負載均衡原理講解

網站 響應報文 tunnel 數量 傳輸層 協議 pat 相關 請求報文

對負載均衡來講,最關鍵的就是調度器了
網絡傳輸層數:下四層由內核來管理及實現,被稱為通信子網,最上面三層,叫應用層,在用戶空間實現,叫做資源子網
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層負載均衡原理講解