1. 程式人生 > >3-3-基於LVS實現4層負載均衡模式和場景應用

3-3-基於LVS實現4層負載均衡模式和場景應用

之間 需要 問題 系統 sad 適用於 不支持 客戶 nat

回顧:
linux的集群形式:LB負載均衡,HA高並發,HP高性能
分布式系統:存儲、計算(超算集群)
lb cluster實現方式:
軟件
四層:lvs、nginx(stream)、haproxy(mode tcp)
七層:
http:nginx(http)/httpd/haproxy(mode http)/ats/perlbal/pound
mysql:ProxySQL...
硬件
lvs:linux virtual server
vs/rs,cip/vip/dip/rip
lvs type:
nat/dr/tun/fullnat
nat類型:多目標IP的DNAT,通過修改請求報文的目標IP和PORT來實現調度;
dr類型:通過為請求報文重新封裝一個MAC首部進行轉發:源MAC是DIP所在的接口的MAC,目標MAC是某次挑選出的RS的RIP所在接口的MAC地址;請求報文經由directory,響應報文不經由directory

NAT和DR都有距離的限制,必須在很近的距離內,因為雙絞線的限制(私網地址必須在同一個物理網絡)

接上次課課件:
lvs-tun:---RS不在同一個機房,所以不需要做拒絕arp廣播和響應,這種模型應用不多(有個問題,巨型幀---客戶端請求數據超過mtu)
轉發方式:不修改請求報文的IP首部(源IP為CIP,目標IP為VIP),而是在原IP報文之外再封裝一個IP首部(源IP是DIP,目標IP是RIP),將報文發往挑選出的目標RS;RS直接響應給客戶端(源IP是VIP,目標IP是CIP);
(1)DIP,VIP,RIP都應該是公網地址;
(2)RS的網關不能,也不可能指向DIP;
(3)請求報文要經由Director,但響應不能經由Director;

(4)不支持端口映射;
(5)RS的OS得支持隧道功能;

    lvs-fullnat:---非標準類型
        通過同時修改請求報文的源IP地址和目標IP地址進行轉發;
        CIP<-->DIP
        VIP<-->RIP

        (1)VIP是公網地址,RIP和DIP是私網地址,且通常不在同一IP網絡;因此,RIP的網關一般不會指向DIP;
        (2)RS收到的請求報文源地址是DIP,因此,只能響應給DIP;但Direcotr還要將其發往Client;
        (3)請求和響應報文都經由Director;
        (4)支持端口映射;
        註意:此類型默認不支持;

總結:
    lvs-nat,lvs-fullnat:請求和響應報文都經由Director;
        lvs-nat:RIP的網關要指向DIP;
        lvs-fullnat:RIP和DIP未必在同一IP網絡,但要能通信;
    lvs-dr,lvs-tun:請求報文要經由Director,但響應報文由RS直接發往Client;
        lvs-dr:通過封裝新的MAC首部實現,通過MAC網絡轉發;
        lvs-tun:通過在原IP報文之外封裝新的IP首部實現轉發,支持遠距離通信;

ipvs scheduler:
根據其調度時是否考慮各RS當前的負載狀態,可分為靜態方法和動態方法兩種:
靜態方法:僅根據算法本身進行調度;---一般短鏈接使用這種調度方法
RR:roundrobin,輪詢;
WRR:Weighted RR,加權輪詢;---有的服務器計算能力比較強,會虛擬出幾臺服務器的能力
SH:Source Hashing,實現session sticy(黏性),源IP地址hash;將來自同一個IP地址的請求始終發往第一次挑中的RS,從而實現會話綁定;---用戶第一次訪問,一般是加權輪詢,在內存建立一個hash表,以源IP為鍵,以RIP為值---有個問題,server down了,session也就丟了,而且lvs工作在四層,不能進行cookie綁定
DH:Destination Hashing;目標地址哈希,將發往同一個目標地址的請求始終轉發至第一次挑中的RS,典型使用場景是正向代理緩存場景中的負載均衡;

    動態方法:主要根據每RS當前的負載狀態及調度算法進行調度;---適用於長連接---非活動連接對資源的依賴很少很少,重量是活動連接的256分之一
        Overhead=負載值
        LC:least connections---最少連接,誰小就挑選誰
            Overhead=activeconns*256+inactiveconns
        WLC:Weighted LC---加權最少連接,誰重就選誰,默認算法,有問題,剛開始沒有連接,恰好輪詢時第一臺性能最差
            Overhead=(activeconns*256+inactiveconns)/weight
        SED:Shortest Expection Delay---最短期望延遲
            Overhead=(activeconns+1)*256/weight
        NQ:Never Queue不排隊保證每個server都有鏈接

        LVLC:Locality-Based LC,動態的DH算法;如果沒有綁定,不是輪詢而是根據後端服務器的負載來調度
        LBLCR:LBLC with Replicaion,帶復制功能的LBLC;兩個緩存服務器之間允許緩存協議的共享

ipvsadm/ipvs:---ipvs是內核的直接功能,只要內核編譯時開啟此功能就能用,ipvsadm是用戶空間工具,只要裝安裝包就能用,不需要監聽任何服務和端口
集群和集群之上的各RS是分開管理的;
集群定義
RS定義
ipvs:
~]#grep -i "ipvs" -C 10 /boot/config-VERSION-RELEASE.x86_64---從這個內核編譯信息配置模板的上下文中查找關鍵字的上下10行
支持的協議:TCP,UDP,AH,ESP,AH_ESP,SCTP;---都是四層協議
ipvs集群:
集群服務
服務商的RS
yum info ipvsadm---查看這個包信息

正向代理:代表客戶端發出請求的
反向代理:代表服務端提供服務的

3-3-基於LVS實現4層負載均衡模式和場景應用