系統服務之LVS 集群

Linux集群(Cluster)

一.概論

1.定義
    Cluster:計算機集合;
    linux集群,多臺Linux主機為解決某個特定問題組合起來形成的單個系統;

    由于現代化業務上線的需求, 單服務器已經不能滿足業務的需要, 業務服務器需要承載更的訪問請求.或者單臺服務器故障(SPOF,single point of failure)將導致所有服務不可用. 
    此情況下, 需要把各種相同的業務服務器連合起來為某個相同的業務提供服務.以達到高并發,快速響應的需求.
    集群技術和Linux操作系統實現了一個高性能和高可用的服務器, 具有很好的可伸縮性,很好的可靠性, 很好的可管理性.
    我們知道服務器集群的重要性以及必要性,而實現服務器集群主要就是為了負載均衡(Load Balance),負載均衡就是有兩臺或者以上的服務器或者站點為我們提供服務,
    我們將來自客戶端的請求靠某種算法盡量平均分攤到這些集群中,從而避免一臺服務器因為負載太高而出現故障。
    簡而言之便是將所有的負載均分到多臺服務器中,即使其中某個出現故障,用戶也能正常訪問,得到服務。


    DNS可以使用單個域名指向多條A記錄,也可以達到負載均衡效果,但效果不理想.因為DNS的解析記錄是可以被緩存的,而用戶執行的DNS服務器大都是緩存服務器,
    大量用戶訪問緩存服務器,造成緩存服務器擁擠,而備份服務器沒有連接.對負載效果要求較高的大型站點是不能依賴DNS啦完成負載的目的.

    這時需要有專門的主機,來完成負載均衡的效果.這臺主機負責接收所有用戶的請求,并將其分發至后端具有相同功能的多臺主機,這個分發主機就稱為負載均衡器,
    調度器,分發器.可以根據某種算法將用戶請求調度至后臺的多臺主機.配合后端主機,著個組合就可以叫做負載均衡集群.
    如果后端主機中的某一臺主機出現故障,調度器還會不會調度到這臺故障合主機上呢?需要調度器對后端每一個主機進行健康狀態監測.

系統服務之LVS 集群

2.Linux Cluster類型:
    LB(Load Baiancing):負載均衡集群;
        實現: 將同一種應用的大量請求,分散至多臺主機響應; 針對無關聯關系的單一請求;
        優勢: 各請求彼此之間是無連接狀態的,使用負載均衡集群是最好的解決方案; 對實際應用有挑戰,需要解決;

    HA(High Availiabity):高可用;
        實現:多臺主機結合起來,共同承載大量請求;
        優勢:提高服務可用性;通過冗余的方式,解決單點故障問題
        衡量公式:
            A=MTBF/(MTBF+MTTR)
            系統可用性=平均無故障時間/(平均無故障時間+平均修復時間)
            可用性處于(0,1)的區間中,無限接近于1最好 ,用百分比來衡量,90%,95%,99%,99.5%,99.99%,99.999%  每10倍的提升
               59指標:99.999% 每年故障時間5分鐘,代價極高
        實現方式:通過冗余節點實現,在線節點不斷廣播自己的健康狀態,在一定時間內無響應,冗余節點會奪取IP,啟動服務,代替主節點工作;
    HP(High Performance):高性能;
        實現:多臺主機分散復雜問題的計算量. 解決龐大的復制的單一問題
        優勢:提升系統性能;
        劣勢:對主機性能要求高,分布式系統漸漸替代HP
            top500組織:每半年統計全球前500臺超級計算機. 超級計算機大部分都是通過集群的方式實現 
                www.top500.org
3.系統擴展方式:
    Scale UP:向上擴展; 用高性能主機替代低性能的主機;
        并不會隨著系統性能的提升帶來負載線性提升,價格提升速度大于性能提升速度;性價比低,有臨界點
    Scale Out: 向外擴展; 當一天只不足與性能時,添加多臺主機組合解決問題,集群的方式


4.站點指標:
    PV:page view   頁面瀏覽量   對真正的頁面入口訪問,而不是頁面上的每個資源  只記錄有效訪問,超短時間內多次訪問為一次訪問
    UV:user view   用戶訪問量    單個訪問者就是一個UV   UV小于PV,一個UV訪問多個PV
    IP: 獨立IP訪問量   在同一站點開啟瀏覽器進程訪問頁面,cookie不同,可以為兩個不同的訪問者,但使用同一個IP  多用戶單IP    ip量小于UV量

5.LB 集群:
    LB實現:
        硬件:
            硬件負載均衡解決方案是直接在服務器和外部網絡間安裝負載均衡設備,由專門的設備完成專門的任務,獨立于操作系統,整體性能得到大量提高,
            加上多樣化的負載均衡策略,智能化的流量管理,但是相對來說成本較高。
            受到了用戶的廣泛認可,基于簡單的Web管理界面,實現4-7層負載均衡、通用持續性、響應錯誤處理、SSL加速、智能HTTP壓縮、TCP優化、第7層速率整形、
            內容緩沖、應用攻擊過濾、拒絕服務(DoS)攻擊和SYN Flood保護等等強大的功能              

            F5 Big-IP    最常用,最貴     F5提供虛擬系統練習,F5官網下載
            Citrix Netscaler
            A10 A10
            Cisco LocalDirector


        軟件:
            LVS:Linux Virtual Server   內核級實現,最大四百萬并發,適合大公司,小公司不適合;原生態,輔助功能不健全
            Nginx:
            haproxy:
            ats:apache traffic server
            pertbal
            pound

            其中 LVS 主要工作與網絡模型中的第四層,而 Nginx 主要工作于第七層,
             HAProxy 是一款提供高可用性、負載均衡以及基于TCP(第四層)和HTTP(第七層)應用的代理軟件,支持虛擬主機。

            其中 LVS 抗負載能力強只是工作在網絡4層之上僅作分發之用,沒有流量的產生,并且工作穩定,
            自身有完整的雙機熱備方案,如LVS+Keepalived和LVS+Heartbeat,在項目實施中用得最多的還是LVS/DR+Keepalived。


        軟件方式基于工作的協議層次劃分:
            傳輸層:通用解決方案  基于DIp:Dpor(目標ip和目標端口)分發  基于端口分發的設備叫做四層交換機(路由器)
                LVS:     真傳輸層調度  不依賴套接字,不依賴端口,并發量能力巨大,取決于內核帶寬能力和網絡帶寬轉發能力
                    LVs工作在內核層,數據不會進入用戶空間,向后端轉發僅僅是路由轉發功能,沒有套接字
                nginx:(stream機制)   模擬傳輸層調度  
                    nginx監聽于套接字,收到用戶請求,用戶請求經過端口,進入nginx用戶空間.nginx進程模擬成某一個后端服務的客戶端,與后端主機基于另一個套接字通信.nginx面對大量用戶請求,要打開大量隨機端口,而端口數量有限,所以有并發響應能力有限,不能多于65534個請求,另一個用于前端連接用戶請求.
                haproxy:(mode tcp) 模擬傳輸層調度


            應用層:專用解決方案  根據應用層的請求內容來進行分發  自定義的請求模型分類進行分發 
              proxy server
                http協議:nginx,httpd,haproxy(mode http)           
                fastcgi協議:nginx,httpd....
                mysql協議:mysql-proxy....

              大并發的每一種應用層協議都有專用的調度解決方案


6. 會話保持機制:有會話的負載均衡必須有的功能

    服務端通過cookie+session來識別客戶端,通過cookie追蹤用戶身份,在服務端用session保存用戶的活動信息.
    用戶請求被分發給不同主機,不同主機對同一用戶的cookie+session不同,需要在當前服務器上保存追蹤用戶狀態,由于服務器上有用戶的狀態,使得用戶請求一分發,另一臺服務器重新進行狀態追蹤,就使得兩邊沒辦法同步用戶信息,影響負載均衡效果,使得兩臺分發主機上的用戶信息不一致.

    要讓用戶無論怎么刷新,怎么調度,都能獲取自己的狀態數據.需要完成對用戶請求的session保持(會話保持)功能.
    (1)會話粘性(session sticky)   識別用戶身份
        用戶第一次訪問時,調度器按需調度,一旦調度到某一臺主機,那么在一定時間內,用戶的訪問將綁定在這臺主機上;
        損害負載均衡的效果;另一方面,服務器的宕機意味著用戶信息丟失.
        操作簡單,只要識別用戶身份;但識別用戶身份才能綁定,必須知道用戶是否訪問過主機,通常在服務端維護一個追蹤會話表,把用戶的源ip地址第一次調度到哪臺主機的記錄下來.用戶訪問先查表,如果有記錄,就不進行調度,按照表中的記錄,分發到對應的主機.如果沒有記錄,在進行調用分發.靠源ip追蹤客戶端身份,但不安全.

        綁定方式:
          source ip
          cookie    適合web服務:    
    (2)session replication;   session復制集群    主從之分
         把多臺后端服務器做成session集群,彼此之間隨時通過多波或廣播或單播地址把自己主機上所維持的session數據同步到同一集群的其他主機;任何一主機宕機,任何一主機都有整個集群的session數據,但每一個主機維持整個集群的session數據,浪費系統資源,小規模適用.

    (3)  session高可用集群  活動非活動之分
        session replication 由于讓單個主機維持整個集群的session數據,浪費系統資源,所以單獨運行一臺服務器,存放session.任何一臺服務器讀取,更新在同一臺主機上,可供所有主機訪問session.但需要基于網絡IO來獲取,可能會有一點延遲.應該使用高性能的存儲設備.還要做好冗余功能.


        解決存儲設備間復制,前端分發,會話集群, 前端高可用.

系統服務之LVS 集群

LVS (Linux Virtual Server)

1.作者:章文嵩   阿里--->滴滴
2.組件:
    VS: Virtual server  Director,Dispatcher,Balancer   調度器,分發器
    Rs: Real server     后端真正提供服務的服務器
3.定義:
    LVS( Linux Virtual Server)是一種負載均衡(LB,Laod Balance)技術,采用IP負載均衡技術和基于內容請求分發技術。具有很好的吞吐率,將請求均衡地轉移到不同的服務器上執行。
    LVS是一套組件(ipvs與ipvsadm),類似與iptables,ipvs相當于netfilter,是能將用戶請求轉發的框架,需要依賴以規則完成轉發,工作于內核中的INPUT鏈上,并依賴于規則進行轉發,而ipvsadm是用來定義規則的工具。
    LVS工作在TCP/UDP協議的四層,能根據用戶請求的IP與PROT進行轉發,即LVS能實現四層交換、四層路由。

    l4: 傳輸層軟件負載均衡調度器,也可以說是四層路由器,四層交換機;
        vs: 根據請求報文的目標協議及端口將其調度轉發至某后端的Real server; 根據調度算法來挑選RS,接受轉發來的用戶請求; 
3.工作模型:
    架構類似于iptables/netfiltew.
        iptbaels:用戶空間的管理工具
        netfile:內核空間的框架,iptables的規則必須放在netfile的鉤子函數上才能發揮效用
            流入:PREROUTING--->INOUT
            流出:OUTPUT --POSTROUTING
            轉發:PREROUTING-->FORWARD--POSTROUTING
        DNAT:目標地址轉換;工作在PREROUTING或OUTPUT,在到達主機時就轉發地址,目標地址需要DNAt,那么目標地址就是防火墻主機,那么下一步,路由完之后,就勢必發往INOUT.

    lvs:有ipvsadm/ipvs組成
        ipvsadm:用戶空間的命令行工具,規則管理器,用于管理集群服務及Real Server;
        ipvs:工作于內核空間的netfilter的INPUT鉤子之間的調度框架;負責在內核完成調度和分發,真正的調度器.靠規則來實現

        工作在INPUR鏈上,請求的數據報文首先到達PREROUTING鏈,能監控用戶請求的是哪一服務,然后強行改變數據報文的流向,不往用戶空間發送,而是直接發送到FORWARD和POSTROUTING,經由網卡發送到后端主機處理(轉發到內部服務器類似于iptables的DNAT,但它不更改目標IP(也可以更改目標IP))..LVS工作在四層,根據請求報文的目標IP和目標PORT將其轉發至后端主機集群中的某臺服務器(其是根據調度算法).支持TCP,UDP,SCTP,AH,ESP,AH_ESP等協議的眾多服務

        不建議在前端調度器上使用iptbales過濾規則,尤其是在INPUT鏈上,以免屏蔽掉報文; 強行改變發往內部主機的報文,直接發送到POSTROUTING.轉發給后端主機.       



4.LVS 的集群特點
    1、在功能上:
        有實現三種IP負載均衡技術和八種連接調度算法的IPVS軟件。在IPVS內部實現上,采用了高效的Hash函數和垃圾回收機制,能正確處理所調度報文相 關的ICMP消息(有些商品化的系統反而不能)。
        虛擬服務的設置數目沒有限制,每個虛擬服務有自己的服務器集。它支持持久的虛擬服務(如HTTP Cookie和HTTPS等需要該功能的支持),并提供詳盡的統計數據,如連接的處理速率和報文的流量等。
        針對大規模拒絕服務(Deny of Service)攻擊,實現了三種防衛策略。

        有基于內容請求分發的應用層交換軟件KTCPVS,它也是在Linux內核中實現。有相關的集群管理軟件對資源進行監測,能及時將故障屏蔽,實現系統的高可用性。
        主、從調度器能周期性地進行狀態同步,從而實現更高的可用性。

    2、在適用性上:
        后端服務器可運行任何支持TCP/IP的操作系統,包括Linux,各種Unix(如FreeBSD、Sun Solaris、HP Unix等),Mac/OS和Windows NT/2000等。

        負載調度器能夠支持絕大多數的TCP和UDP協議: | 協 議 | 內 容 | |--------|--------| | TCP | HTTP,FTP,PROXY,  SMTP,POP3,IMAP4,DNS,LDAP,HTTPS,SSMTP等| UDP | DNS,NTP,ICP,視頻、音頻流播放協議等 |無需對客戶機和服務器作任何修改,可適用大多數Internet服務。

    3、在性能上:
        LVS服務器集群系統具有良好的伸縮性,可支持幾百萬個并發連接。
        配置100M網卡,采用VS/TUN或VS/DR調度技術,集群系統的吞吐量可高達1Gbits/s;如配置千兆網卡,則系統的最大吞吐量可接近10Gbits/s。




5.lvs集群類型中的常用術語:
    VS: Virtual server Director   調度器,分發器
    Rs: Real server     后端提供真正服務的服務器    

    CIP:client ip   客戶端IP    外網ip
    VIp:Virtual ip  LVS的前端IP  外網ip
    Dip:Director ip  LVS的后端IP   私網iP 于RIP通信
    Rip:Real server   后端真正提供服務的服務器IP

     Cip--> vip == Dip---> RIp

系統服務之LVS 集群

lvs集群類型:

lvs-nat:修改請求報文的目標ip完成轉發,
lvs-DR:封裝新的MAC報文首部,不改原報文報文
lvs-tun: 建立ipip隧道,在原請求IP報文之外新加一個IP首部;
Lvs-fullnat:修改請求報文的源和目標IP

lvs-nat:修改請求報文的目標ip完成轉發,

多目標IP的DNAT,通過將請求報文中的目標地址和目標端口修改為某挑選出的RS的RIP和PORT實現轉發;

系統服務之LVS 集群

特性:
    (1)RIP和DIP必須在用一個網絡,且應該使用私網地址,RS的網關要指向DIP;
    (2)請求報文和響應報文都必須經由Director轉發,Director容易成為系統瓶頸
    (3)支持端口映射,可修改請求報文的目標Port;
    (4)VS必須是Linxu系統,rs可以是任意系統;  

優點:集群中的物理服務器可以使用任何支持TCP/IP操作系統,只有負載均衡器需要一個合法的IP地址

缺點: 擴展性有限。當服務器節點(普通PC服務器)增長過多時,負載均衡器將成為整個系統的瓶頸,因為所有的請求包和應答包的流向都經過負載均衡器。
     當服務器節點過多時,大量的數據包都交匯在負載均衡器那,速度就會變慢!

lvs-DR:

Direct Routing,直接路由

Director將接收到的請求報文源IP/port,以及目標Ip/port都不做修改,,通過為請求報文重新封裝一個MAC首部進行轉發,源MAC是DIP所在的接口的MAC,目標MAC是某挑選出的Rs的Rip所在接口的MAC地址;通過交換機發送給RS server,當RS server拆解后發現源目標IP不是自己,此時要在RS上配置VIP,即RS服務器有RIP和VIP,此時有一些問題:
    (1)地址沖突
        RS有VIP將會與VIP沖突
    (2) 廣播回應
        當有VIP的廣播請求時,RS將會把系統上所有的IP進行廣播
   解決問題的目的:把RS上的VIP隱藏起來,發送響應報文時把vip當做源ip使用


MAC地址用于本地網絡通信,IP實現網絡間通信.任何到達本地之間的通信都應該是MAC地址通信.從路由器的網卡接口到RS的網卡或VS的網卡接口,都是MAC地址轉發.路由器收到用戶的請求報文,發現MAC地址是自己.但目標Ip不是自己,需要知道VIP的在哪個主機的哪個接口,MAC地址是什么?使用ARP地址解析協議.路由器向整個本地網路廣播.尋找Vip的MAC地址.凡是有VIP的主機都會響應自己的位置和MAC地址.路由會根據ip的對比,轉發數據報文給VS服務器.而RS服務器也會想路由響應.所以就要限制RS服務器上的VIP響應.

系統服務之LVS 集群 系統服務之LVS 集群

DR類型工作流程
    如上圖所示:當客戶端請求VIP時,通過互聯網到達前端路由Route1,再通過交換機到達Dirctor上;而Dirctor在收到請求報文后,通過定義在ipvs規則中的各rip去獲得各RS的MAC地址,并在此報文外再封裝一個MAC地址,源MAC為Dirctor的dip端口的MAC而目標MAC改為其中一個RS的MAC,但該報文的目標ip(VIP)不變,最后通過dip接口發送給RS;
    為了RS能接收Dirctor發來的報文,需要在各RS上也配置VIP,但RS上的VIP是需要隔離前端arp廣播的,所以需要將各RS上的VIP隱藏*(通常配置到lo網卡接口的別名上,并配合修改linux內核參數來實現)*;而RS封裝響應報文時,源IP為VIP,目標ip為CIP,并通過RIP的網絡接口直接向外發送響應,不再經過Dirctor。
    需要注意的是:因為Route1的A點的IP和Dirctor的VIP在同一網段內,VIP通常是公網IP;而DIP、RIP通常是私有IP,且這兩個IP通常也應在同一物理網絡內;
    假設RIP響應時指向的網關為Route1的A點,這就意味著RIP與A點不在同一網段內,因此將無法響應給客戶端,所以需要另加一個路由route2,Route2能夠通過D接口訪問互聯網,且Route2的C點的IP需要與RIP在同一網段內,此時RIP響應的報文就通過Route2發送。

    上文括號部分的實現及確保前端路由器將目標IP為VIP的請求報文發往Director,方法c是最佳的選擇:
    (a) 在前端網關即Dirctor做靜態綁定
    (b) 在RS上使用arptables
    (c) 在RS上修改內核參數以限制arp通告及應答級別:

特性:
    (1)Director和各Rs都得配置使用Vip,VS的VIp配置在DIP所在的網卡別名上,RS的VIP配置在LO網卡上;
    (2)確保前端路由器將目標IP為VIp的請求報文,一定會轉發給Director,解決方案如下:
        (a)靜態綁定:在前端路由器上把VIP和director的MAC進行綁定.
            缺點: 不能做director的高可用,前端路由器可能由ISP提供
                  路由器不用主動發送廣播,尋找MAC.但卻可以接受任何人的動態請求.RS主機的VIP會向全網通告.路由收到RS的通告,依然會向RS發送數據報文.
        (b)禁止RS響應VIP的ARP請求
            arptables : 定義一個ARP的訪問控制
            修改各RS的內核參數,并把VIP配置在特定的接口上實現,并禁止其響應發送ARP廣播(通常將VIP配置在lo的子接口上)
        (c)在各RS修改內核參數,限制arp響應和通告的級別;ip屬于內核,不屬于網卡.所以要修改內核參數,限制VIP通信.
            限制響應級別:arp_ignore   /proc/sys/net/ipv4/conf/all/arp_ignore
                0:默認值,表示可使用本地任意接口上,
            限制通告級別;arp_announce  /proc/sys/net/ipv4/conf/all/arp_announce
                0:默認值,把本機上的所有接口的所有信息向每個接口上的網絡進行通告;
                1:盡量避免向非直接連接網絡進行通告;
                2:必須避免向非網絡通告;

    (3)Rs的RIP可以使用私網地址,也可以是公網地址,以便于遠程管理與監控。;RIP于DIP在同一IP網絡;
    (4)RS跟Director要在同一物理網絡;
    (5)請求報文要經由Director調度,但響應報文不能經由Director,而是有RS直接發往Clinent;
    (6)不支持端口映射;也就是Real Server 的端口必須是與 VS對外服務的端口一樣
    (7)各RS可以使用大多數OS
    (8)RIP和VIP也應該在同一網段.路由器出口和VIP在同一網段,如果RIP和VIP不在同一網段,那么RIP就跟路由器不在同一網段.RIP的網關就得指向路由器的另一個接口.RS的響應就更加復雜.


優點:和TUN(隧道模式)一樣,負載均衡器也只是分發請求,應答包通過單獨的路由方法返回給客戶端。
     與VS-TUN相比,VS-DR這種實現方式不需要隧道結構,因此可以使用大多數操作系統做為物理服務器。

缺點:(不能說缺點,只能說是不足)要求負載均衡器的網卡必須與物理網卡在一個物理段上。

lvs-tun:ipip隧道 跨越互聯網,支持長距離轉發

VS/DR 限制 Real Server 與 Load Balancer 必須在同一個物理網絡中,那若是分散在各地豈不是無法使用?所以有了 VS/TUN(Virtual Server via IP Tunneling)的誕生。

IP隧道(IP tunneling)是將一個IP報文封裝在另一個IP報文的技術,這可以使得目標為一個IP地址的數據報文能被封裝和轉發到另一個IP地址。
IP隧道技術亦稱為IP封裝技術(IP encapsulation)。IP隧道主要用于移動主機和虛擬私有網絡(Virtual Private Network),在其中隧道都是靜態建立的,隧道一端有一個IP地址,另一端也有唯一的IP地址。

我們利用IP隧道技術將請求報文封裝轉發給后端服務器,響應報文能從后端服務器直接返回給客戶。但在這里,后端服務器有一組而非一個,
所以我們不可能靜態地建立一一對應的隧道,而是動態地選擇 一臺服務器,將請求報文封裝和轉發給選出的服務器。
這樣,我們可以利用IP隧道的原理將一組服務器上的網絡服務組成在一個IP地址上的虛擬網絡服務。 VS/TUN的體系結構如圖所示,各個服務器將VIP地址配置在自己的IP隧道設備上。


轉發方式:Director收到報文后,不修改請求報文的源IP首部(源ip為cip,目標ip為vip),而在原ip報文之外再封裝一個ip首部(源ip是DIp,目標ip為Rip),將報文發往挑選的目標RS;確保每個RIP要有一個VIP,
RS主機接收到報文后,回應時源IP為VIP,目標IP為CIP

請求報文不能太大,如果在請求報文上在添加一個ip首部,可能會大于MTU,以太網傳輸有MTU限制,以太網最大傳輸單元.早期是1500字節.報文過大.在傳輸過程中.交換等設備會無法正常交換,導致數據丟失.一般會有限制.

此架構主要用于容災.地球不爆炸,服務不會掛.

系統服務之LVS 集群

特性:
    (1)DIP,VIP,RIP都應是公網地址,
    (2)RS的網關不能,也不可能指向DIP;
    (3)請求報文要經由Director,響應報文一定不經過經由Director,
    (4)不支持端口映射
    (5)RS的OS得支持隧道功能;

優點:負載均衡器只負責將請求包分發給后端節點服務器,而RS將應答包直接發給用戶。所以,減少了負載均衡器的大量數據流動,
負載均衡器不再是系統的瓶頸,就能處理很巨大的請求量,這種方式,一臺負載均衡器能夠為很多RS進行分發。而且跑在公網上就能進行不同地域的分發。

缺點:隧道模式的RS節點需要合法IP,這種方式需要所有的服務器支持”IP Tunneling”(IP Encapsulation)協議,服務器可能只局限在部分Linux系統上。
封裝兩個IP報文首部會有問題: MTU大小為1500的大小,而再加一個IP報文首部會超出MTU的大小,導致路由器拒收(因為傳輸之前已經被切片傳輸的大小為1500字節)

Lvs-fullnat:修改請求報文的源ip地址和目標IP地址進行轉發;

LVS默認不支持此類型,需要使用淘寶的專用內核,或使用淘寶的專用補丁打入自己的內核.

Director收到報文后, 將源IP(CIP)修改為(DIP),目標地址(VIP)修改為(RIP),轉發給RIP, 當RS主機收到報文后,回應時,源IP為RIP,
目標IP為VIP.Director收到報文后,將源IP修改為自己(VIP), 目標IP修改為CIP,響應給客戶端

    cip --> Dip
    VIp -->Rip
特性:
    (1)Vip是公網地址,Rip和DIP是私網地址,且通常不在同一個ip地址,因此,RIP的網關一般不會執行DIP;
    (2)RS收到的請求報文源地址是DIP,因此,只需響應給DIP,但Director還要將其發往Clinet;
    (3)請求和響應報文都經由Director;          
    (4)支持端口映射;

LVS scheduler: 調度方法

無論LVS的類型,都是調度器將請求報文分發給后端主機,用什么辦法挑選后端主機呢?根據調度算法


根據其調度時是否考慮各RS當時的負載狀態,可分為靜態方法和動態方法兩種:

靜態:僅根據算法本身進行調度
    RR: (roundrobin)   輪詢   輪流替換,一替一個,一次一個
        缺點: 性能好的服務器比較空閑,而性能差的服務器會很繁忙

    WRR: (Weighted roundrobin)  加權輪詢 
        不同主機的負載能力不同 ,考慮當前服務器的權重,權重越大,負載越大
        缺點: 有的情況下,當性能好的服務器分配了更多的長連接,而性能差的分配的大多數都是短連接,此時會造成性能好的服務器處理列多的連接,
        壓力比較大,而性能差的服務器,還處于空間狀態,造成假負載
    SH: (Source Hashing),實現session Sticy;    源ip地址哈希,將來自于同一個IP地址的請求始終發往第一個挑中的RS,從而實現加權輪詢.
        能始終將同一個IP引導到同一臺RS服務器.(在Director服務器上維護一個hash表,其是KV格式,鍵就是源IP地址,值就是RS的地址,每次都會查找hash表,
        如果能查詢到前一次的連接記錄,就直接發送到RS服務器,如果沒有,就使用WRR算法進行調度)
        缺點:隨著時間推移,舊的IP地址會很多,這樣會讓固定的RS服務器壓力大
    DH:(Destination Hashing);目標地址哈希,將發往同一個目標地址的請求始終轉發至同一個挑中的RS;如果沒有,就使用WRR算法進行調度),配合緩存機制.
        缺點: 如果另一個客戶端也請求同一個目標地址, 它也會將這個請求使用同一個網關進行發送, 如果對同一目標地址請求比較大, 
        這樣會造成同一網關的負載壓力,會損壞負載的效果.
        多用于緩存服務器.
動態:主要跟據每RS當時的負載狀態及調度算法進行調度;
    Overhead=(active)活動連接數*256+(inactive)非活動連接數

    LC:least Connextions  最少連接
        按照公式計算哪個RS的最少連接數,值小挑中誰,
        如果RS的最少連接數都一樣,會進行輪循,overhead值小的將會接收下一次請求
        Overhead=活動連接數*256+非活動連接數
        例:
            RS1: 10,100
            RS2:20,10
             Rs1的值下,所以RS1接收下一個請求
        缺點: 不能根據服務器的性能進行分發請求

    WLC:Weighted LC  加權最少連接   默認算法,相對最公平

        Overhead=(活動連接數*256+非活動連接數)/weighted(權重)
        權重越大,得出的值越小
        例:
            RS1 : 10,100,1
            RS2 : 20,10,3
              RS2將會挑出來接收下一個請求
        缺點: 當兩臺活動連接都為0,將進行輪循,如果正好輪循到了權重小的響應,這樣是不理想的,SED算法就是解決這個問題的
    SED:shortest expction delay,最短期望延遲,是WLC算法的改進
        不在考慮非活動連接,
        Overhead=(active+1)*256/weight
        例:
            RS1 : 0,1
            RS2 : 0,3
              RS2將會接收下一次請求
        缺點: 如果權重差別很大的情況下, 權重小的就空閑了,權重大的會一直工作,直到最少連接數大于或等于權重小的主機
    NQ : Nerver Queue   永不排隊,再按算法
        它是SED算法的改進,當用戶第一次請求進來的時候, 服務器事先根據用戶的請求,依照權重大小依次分配,做到每臺主機都有一個連接,隨后再根據SED算法分配

    LBLC : Locality-based LC 基于本地的最少連接
        他是一個動態的DH算法,客戶端請求一個目標地址時,當沒有目標地址的連接記錄,將挑選一個負載小的網關發送, 其也是正向代理時使用的算法
            缺點:一段時間內,大量的訪問都是舊的請求,經過綁定的緩存服務器壓力過大.
    LBLCR : LBLCR with replication, 帶復制的LBLC
        當有一個目標地址被一個緩存服務器大量緩存, 而用戶又大師的請求此目標地址,此時另一臺緩存服務器就過于空閑,
        此時LBLCR算法就會通過將壓力大的緩存服務器內容復制一份到空閑的緩存服務器

DH,LBLC,LBLCR兩種算法比較適合緩存服務器,SH做會話綁定.其他算法更傾向于公平調度的目的

ipvsadm/ipvs: 工具

ipvs:工作在內核,必須在編譯內核時編譯進去,服務器發行版會自動提供
    #grep -i -C 10 " IPVS" /boot/config-3.10.0-327.el7.x86_64  查看內核編譯ipvs,

    支持的協議:TCP,UDP,AH,ESP,AH_ESP,SCTP;
    支持算法:RR,WRR,LC,WLC,LBLC,LBLCR,DH,SH,SED,NQ
ipvs集群:
    設計好架構,確定好LVS類型,根據應用確定好調度方法,最后定義集群.
    定義集群:
        集群服務:把哪一個協議的目標端口為哪一個數字的請求報文定義為集群服務;定義哪一類的請求屬于集群服務.根據協議的目標ip和端口來進行判定. 
            同一臺調度器同時分發多個不同的服務;可調度兩臺有不同服務的RS,比如web,mysql;也可以調度四臺有兩個不同服務的主機;
        服務上的RS:定義多少RS屬于集群

安裝ipvsadm工具:
    #yum install ipvsadm
ipvsadm命令:
    ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]] [-M netmask] [--pe persistence_engine] [-b sched-flags]
    ipvsadm -D -t|u|f service-address
    ipvsadm -C
    ipvsadm -R
    ipvsadm -S [-n]
    ipvsadm -a|e -t|u|f service-address -r server-address [options]
    ipvsadm -d -t|u|f service-address -r server-address
    ipvsadm -L|l [options]
    ipvsadm -Z [-t|u|f service-address]
    ipvsadm --set tcp tcpfin udp
    ipvsadm --start-daemon state [--mcast-interface interface] [--syncid sid]
    ipvsadm --stop-daemon state
    ipvsadm -h   查看命令使用幫助

    管理集群服務:
        增,改: ipvsadm -A|E -t|u|f service-address -r server-address
           [-g|i|m] [-w weight] 

        刪: ipvsadm -D -t|u|f service-addres

        -t|u|f service-address:  指定 服務地址
            -t:TCP端口, VIP:TCP_PORT     例:-t tcp 192.68.1.2:80
            -u:UDP端口, VIP:UDP_PORT
            -f:firwall MARk,防火墻標記,是一個數字;    
                在防火墻級別PREROUTING鏈上,把某個地址的某個端口的所有報文,通通打上同一個標記,基于這個標記來定義集群,
                可以將兩個或多個端口定義為集群,端口不同,集群不同,基于端口進行調度不同的集群.多個服務,多個集群被統一調度

        -s:指定算法:指定集群調度算法,默認為wlc

     管理集群上的RS:
        增,改: ipvsadm -a|e -t|u|f service-address -r server-address [options]

        刪:  ipvsadm -d -t|u|f service-address -r server-address

            server-address: RS的ip和端口
                rip[:port]
                不支持端口映射,可以不加端口
            Options:
                lvs類型:省略此選項為默認DR類型
                    -g:gateway,DR類型
                    -l:ipip,tun類型
                    -M:masquerade,nat類型
                -w weight:權重:
                    默認權重為1
                    支持權重的算法,該選項才有意義
                [-s ]  定義算法:

     清空定義的所有內容(規則):
         ipvsadm -C
     查看 ipvsadm -L|l [options]
         -n:以數字形式顯示
         --exact:以精確數值顯示
         -c:顯示當前連接的相關統計數據
         --stats:統計數據,從服務開啟到此刻,請求總數,活動,非活動數
         --rate:從服務開啟到此刻的速率之和


     保存和重載:   
         規則送往內核,關機或重啟服務,規則會丟失

         保存:
            ipvsadm-save >/etc/sysconfig/ipvsadm
            ipvsadm -S >/etc/sysconfig/ipvsadm
            systemctl stop ipvsadm
        重載:
            ipvsadm-restore < /etc/sysconfig/ipvsadm
            ipvsadm -R < /etc/sysconfig/ipvsadm
            systemctl restart ipvsadm

LVS 實現:

LVS NAt類型的實現

1.準備工作:
  四臺主機:
    Client: 客戶端    CIP:10.1.249.12
    VS:   調度服務器   VIP:10.1.249.13 DIP:172.18.19.121  
    RS1:  web服務器   RIP1:172.18.19.122 
    RS2:  web服務器   RIP2:172.18.19.123

    #ifconfig eno16777736 172,18,19,123/24 up
2.網絡環境
    (1)把所有RS服務器的網關指向DIP地址.
        #route add  default gw 172.18.19.121
        #route -n  檢查route表
    (2)客戶端與VIP在虛擬機的VMware1中,網關為10.1.249.1
    (3)DIP于RIP1,RIP2在虛擬機的VMware8中,網關為172.18.19.1
    (4)CIP只能ping通VIP,不能ping同DIP于RIP
3.服務環境:
    RS服務器分別部署httpd/nginx,mariadb
    #yum -y install httpd mariadb-server mariadb
    #systemctl start http mariadb
    #ss -tnl| grep 80 
    #ss -tnl| grep 3306
4.安裝調取器 10.1.249.13
    #yum -y install ipvsadm
5.時間同步
    (1)NTP服務器
    (2)chronyd服務  centos7
        RS1:#systemctl start chronyd
        RS2:#vim /etc/chrony.conf
                server 172.18.19.122 iburst
            #systemctl restart chronyd
            #chronyc sources
    (3)手動修改,不建議

6.在VS上手動測試,后端服務
    curl http://172.18.19.123
    curl http://172.18.19.122
7.在VS服務器開啟核心轉發功能:
    echo 1 > /proc/sys/net/iPv4/ip_forward
8.VS服務器關閉默認防火墻
    systemctl stop firewalld.service
    systemctl disable firwalld.server
9.在VS上設置ipvs規則
    #ipvsadm -A -t 10.1.249.13 -s rr       定義集群  算法為輪詢算法 rr
    #ipvsadm -a -t 10.1.249.13 -r 172.18.19.122 -m    添加RS至集群   使用-m指定nat類型
    #ipvsadm -a -t 10.1.249.13 -r 172.18.19.123 -m      添加RS至集群
    #ipvsadm -L   查看規則
        IP Virtual Server version 1.2.1 (size=4096)
        Prot LocalAddress:Port Scheduler Flags
          -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
        TCP  10.1.249.13:http rr
          -> 172.18.19.122:http           Masq    1      0          0         
          -> 172.18.19.123:http           Masq    1      0          0  
10.在客戶端主機測試效果,通過VIP,連接web

    [root@wen-7 ~]# curl http://10.1.249.13
    <h1>RS2</h1>
    [root@wen-7 ~]# curl http://10.1.249.13
    <h1>RS1</h1>
    [root@wen-7 ~]# curl http://10.1.249.13
    <h1>RS2</h1>
    [root@wen-7 ~]# curl http://10.1.249.13
    <h1>RS1</h1>
11.循環測試
    [root@localhost ~]# for i in {1..10};do curl http://10.1.249.13 ;done
    <h1>RS1</h1>
    <h1>RS2</h1>
    <h1>RS1</h1>
    <h1>RS2</h1>
    <h1>RS1</h1>
    <h1>RS2</h1>
    <h1>RS1</h1>
    <h1>RS2</h1>
    <h1>RS1</h1>
    <h1>RS2</h1>
12.把調度算法改為wrr 
    [root@wen-7 ~]# ipvsadm -A -t 10.1.249.13:80 -s wrr
    [root@wen-7 ~]# ipvsadm -a -t 10.1.249.13:80 -r 172.18.19.122 -m -w 2
    [root@wen-7 ~]# ipvsadm -a -t 10.1.249.13:80 -r 172.18.19.123 -m -w 1
    [root@wen-7 ~]# ipvsadm -Ln
    IP Virtual Server version 1.2.1 (size=4096)
    Prot LocalAddress:Port Scheduler Flags
      -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
    TCP  10.1.249.13:80 wrr
      -> 172.18.19.122:80             Masq    2      0          0         
      -> 172.18.19.123:80             Masq    1      0          0  
13使用加權輪詢,測試
    [root@localhost ~]# for i in {1..10};do curl http://10.1.249.13 ;done
    <h1>RS2</h1>
    <h1>RS1</h1>
    <h1>RS1</h1>
    <h1>RS2</h1>
    <h1>RS1</h1>
    <h1>RS1</h1>
    <h1>RS2</h1>
    <h1>RS1</h1>
    <h1>RS1</h1>
    <h1>RS2</h1>
14.把調度算法改為SH,  會話粘性
    [root@wen-7 ~]# ipvsadm -A -t 10.1.249.13:80 -ssh
    [root@wen-7 ~]# ipvsadm -a -t 10.1.249.13:80 -r 172.18.19.122 -m -w 2
    [root@wen-7 ~]# ipvsadm -a -t 10.1.249.13:80 -r 172.18.19.123 -m -w 1
    [root@wen-7 ~]# ipvsadm -Ln
15.使用sh算法,進行測試
    [root@localhost ~]# for i in {1..10};do curl http://10.1.249.13 ;done
    <h1>RS1</h1>
    <h1>RS1</h1>
    <h1>RS1</h1>
    <h1>RS1</h1>
    <h1>RS1</h1>
    <h1>RS1</h1>
    <h1>RS1</h1>
    <h1>RS1</h1>
    <h1>RS1</h1>
    <h1>RS1</h1>
16.把調度算法改為wlc,   加權最少連接
    [root@wen-7 ~]# ipvsadm -A -t 10.1.249.13:80 -s wlc
    [root@wen-7 ~]# ipvsadm -a -t 10.1.249.13:80 -r 172.18.19.122 -m -w 2
    [root@wen-7 ~]# ipvsadm -a -t 10.1.249.13:80 -r 172.18.19.123 -m -w 1
    [root@wen-7 ~]# ipvsadm -Ln
17.使用wlc算法,進行測試.
[root@localhost ~]# for i in {1..10};do curl http://10.1.249.13 ;done
    <h1>RS2</h1>
    <h1>RS2</h1>
    <h1>RS2</h1>
    <h1>RS2</h1>
    <h1>RS2</h1>
    <h1>RS2</h1>
    <h1>RS1</h1>
    <h1>RS1</h1>
    <h1>RS2</h1>
    <h1>RS1</h1>

LVS DR類型的實現

1.準備工作:
  四臺主機:
    Client: 客戶端    CIP:172.18.19.214
    VS:   調度服務器   VIP:172.18.19.124  DIP:172.18.19.121  
    RS1:  web服務器   RIP1:172.18.19.122 
    RS2:  web服務器   RIP2:172.18.19.123
2.網絡環境
    (1)VIP定義在DIP的網卡別名上;
    (2),VIp,DIP,RIP全部在一個物理網絡中,這里是虛擬網卡VMware8中,網關為172.18.19.1

3.服務環境:
    RS服務器分別部署httpd/nginx,mariadb
    #yum -y install httpd mariadb-server mariadb
    #systemctl start http mariadb
    #ss -tnl| grep 80 
    #ss -tnl| grep 3306
4.安裝調度器 10.1.249.13
    #yum -y install ipvsadm
5.時間同步
    (1)NTP服務器
    (2)chronyd服務  centos7
        RS1:#systemctl start chronyd
        RS2:#vim /etc/chrony.conf
                server 172.18.19.122 iburst
            #systemctl restart chronyd
            #chronyc sources
    (3)手動修改,不建議

6.在VS上手動測試,后端服務
    curl http://172.18.19.123
    curl http://172.18.19.122
7.RS主機配置(預制腳本)

系統服務之LVS 集群

8.查看arp 解析,查看mac地址通信
    [root@wen-7 ~]# arp -a
    ? (172.18.19.1) at 00:50:56:c0:00:08 [ether] on eno16777736
    ? (172.18.19.122) at 00:0c:29:55:78:ed [ether] on eno16777736
    ? (172.18.19.123) at 00:0c:29:d1:9c:77 [ether] on eno16777736

8.VS服務端配置

 ifconfig eno16777736:0 172.18.19.124 netmask 255.255.255.255 broadcast 172.18.19.124 up
 ipvsadm -A -t 72.18.19.124:80 -s wrr
 ipvsadm -a -t 72.18.19.124:80 -r 172.18.19.122 -g -w 1
 ipvsadm -a -t 72.18.19.124:80 -r 172.18.19.123 -g -w 1

系統服務之LVS 集群

9.在客戶端請求資源
    for i in {1..10}; do curl http://172.18.19.124 ;done

負載均衡的設計要點:

(1)是否需要會話保持
(2)是否需要共享存儲或數據同步rsync  取決業務模型
    共享存儲:NAS,SAN,DS(分布式存儲)
    數據同步: 
        rsync+inotify  rsync+serync 實現數據實時同步,但數據量較大的場景時,不常用 課外作業
    lvs-nat:
        設計要點:
            (1)RIP于DIP在同一IP網絡,RIP的網關要指向DIP;
            (2)支持端口映射

        實踐作業:負載均衡一個php應用
        測試:(1)是否需要會話保持(2)是否需要共享存儲


    lvs-DR:
        DR模型中,各主機上均需要配置vip,解決地址沖突的方式有三種:
            (1)在前端網關做靜態綁定
            (2)在各RS使用 arptables;
            (3)在各RS修改內核參數,啦限制arp響應和通告的級別;
                限制響應級別:arp_ignore
                    0:默認值,表示可使用本地任意接口上,
                限制通告級別;arp_announce
                    0:默認值,把本機上的所有接口的所有信息向每個接口上的網絡進行通告;
                    1:盡量避免向非直接連接網絡進行通告;
                    2:必須避免向非網絡通告;

FWM:firwall Mark 防火墻標記,同時調度多個服務

借助于防火墻標記來分類報文,而后基于標記定義集群服務;可將多個不同的應用服務使用同一個集群服務進行調度;

1.配置DR模式的LVS
2.配置mysql服務
    RS1:
        #systemctl start mariadb
        #mysql
        >GRANT all ON *.* TO 'test'@'176.18.19.%' IDENTIFIED BY 'testpass';
        >FLUSH PRIVILEGES;
        >exit;
        #mysql -h 172.18.19.122 -utest -ptestpass
    RS2:
        #systemctl start mariadb
        #mysql
        >GRANT all ON *.* TO 'test'@'172.18.19.%' IDENTIFIED BY 'testpass';
        >FLUSH PRIVILEGES;
        >CREATE DATABASE mydb;
        >exit;
        #mysql -h 172.18.19.122 -utest -ptestpass
3.配置VS服務器
    #ipvsadm -C
    #ipvsadm -A -t 172.18.19.124:3306 -s rr
    #ipvsadm -a -t 172.18.19.124:3306 -r 172.18.19.122 -g -w 1
    #ipvsadm -a -t 172.18.19.124:3306 -r 172.18.19.123 -g -w 1
4.在客戶端測試
    for i in {1..10};do mysql -h172.18.19.124 -utest -ptestpass -e 'SHOW DATABASES';done
5.配置VS服務器,添加WEB集群
    #ipvsadm -C
    #ipvsadm -A -t 172.18.19.124:80 -s rr
    #ipvsadm -a -t 172.18.19.124:80 -r 172.18.19.122 -g -w 1
    #ipvsadm -a -t 172.18.19.124:80 -r 172.18.19.123 -g -w 1
6.查看集群
    #ipvsadm -Ln
    IP Virtual Server version 1.2.1 (size=4096)
    Prot LocalAddress:Port Scheduler Flags
      -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
    TCP  172.18.19.124:80 rr
      -> 172.18.19.122:80             Route   1      0          0         
      -> 172.18.19.123:80             Route   1      0          0         
    TCP  172.18.19.124:3306 wrr
      -> 172.18.19.122:3306           Route   1      0          0         
      -> 172.18.19.123:3306           Route   1      0          0    
7.分別測試web,mysql的分發效果
8.清除規則
    #ipvsadm -C
9.添加iptables規則
    #iptables -t mangle -A PREROUTING -d 172.18.19.124 -p tcp -m multiport --dports 80,3306 -j MARK --set-mark 11
    #iptables -t mangle -vnL
1定義集群服務
    #ipvsadm -A -f 11 -s wrr
    #ipvsadm -a -f 11 -r 172.18.19.122 -g -w 1
    #ipvsadm -a -f 11 -r 172.18.19.123 -g -w 1
11.ipvsadm -nL
    IP Virtual Server version 1.2.1 (size=4096)
    Prot LocalAddress:Port Scheduler Flags
      -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
    FWM  11 wrr
      -> 172.18.19.122:0              Route   1      0          1         
      -> 172.18.19.123:0              Route   1      0          1   
12在客戶端測試  172.18.19.214
    #for i in {1..10} ;do mysql -h172.18.19.124 -utest -ptestpass -e'show databases'  ;done
    #for i in {1..10} ;do curl http://172.18.19.124  ;done

系統服務之LVS 集群

總結:

VS服務器配置:
    打標記方法:
        #iptables -t mangle -A PREROUTING -d $vip -p tcp/udp --dport[%port] MARK --set-make NUMBER  
            標記數字:可以是0-2^32次方的任意一個整數
    基于標記定義集群服務
        #ipvsadm -A -f Number [options]
    添加主機至集群隊列
        #ipvasdm -a -f Number -r $rip -g -w 1

lvs persistence:持久連接

SH算法可以完成會話保持,但SH可以保持多長時間呢?要靠SH算法中的hash表中的超時時長,但這個超時時長不能手動定義,是由算法進行決定的.
如果我們想綁定來自于同一客戶端的請求始終至一個RS,不管什么調度方法都能實現綁定,而且綁定的時長是自定義的,而不是算法強制定義的,該怎么辦?雖然這個要求違反了算法的定義,但LVS確實有這個功能.能讓你什么方法都能綁定會話,rr都可以,但這不是調度方法自己的功能,而是lVS本身的功能,叫LVS的持久連接.
實現原理:
    保持持久連接,都要有一張保存追蹤用戶連接的會話表.LVS可以在LVS的核心層面上,就可以能夠維持一張會話表,此前無論使用什么算法調度,都可以查詢這張表.用戶第一次訪問時,按照指定的算法進行調度.用戶再次調度時,就會查詢這張表,如果用戶被調度過,就給定向到記錄中的RS上,如果沒有被調度過,就按照算法進行調度.再次聲明,此功能跟算法沒有關系,跟LVS的運行機制有關,就是持久連接機制.
    綁定時長還可以自己定義,無論什么算法都可以綁定.
    會話表,叫做持久連接模板.實現無論任何算法,在一段時間內,實現將來自于同一個地址的請求始終發往同一個RS;

命令:
    ipvsadm -A|E -t|u|f service-address -r server-address [-g|i|m] [-w weight][-p [timeout]]
        [-p [timeout]]:定義綁定時長,默認為300s,timeout可以被省略,直接加-p選項.
        使用該選項就能實現持久連接功能;

實驗:
    (1)清空ipvs規則
        ipvsadm -C
    (2)配置DR類型普通輪詢算法調度
        #ipvsadm -A -t 172.18.19.124:80 -s rr
        #ipvsadm -a -t 172.18.19.124:80 -r 172.18.19.122 -g -w 1
        #ipvsadm -a -t 172.18.19.124:80 -r 172.18.19.123 -g -w 1
    (3)測試
        for i in {1..10};do curl http://172.18.19.124 ;done
    (4)添加保持持久功能
        #ipvsadm -A -t 172.18.19.124:80 -s rr -p 60
        #ipvsadm -a -t 172.18.19.124:80 -r 172.18.19.122 -g -w 1
        #ipvsadm -a -t 172.18.19.124:80 -r 172.18.19.123 -g -w 1
    (5)測試
        for i in {1..10};do curl http://172.18.19.124 ;done
    (6)60s后從新調度

port Affinity(多個端口的姻親關系)

作用:將多個端口綁定在一起,并使用持久連接,來實現多個服務統一調度之效用.

結合FWM的功能,兩個服務能夠統一調度,有可以綁定同一個地址的請求始終在一個主機上,第一個服務綁定在rs1,第二個服務也一定在RS1上,讓兩個服務產生關聯性.
這種將兩個服務綁定在一起,并且統一調度,統一粘性的關系叫做端口的姻親關系(port Affinity:),讓兩個端口建立姻親關系,兩個服務同進同退.持久連接配合FWM,就可以實現這個功能.

實驗:
    (1)參考以上FWM的過程,將80和3306進行綁定
        #iptables -t mangle -A PREROUTING -d 172.18.19.124 -p tcp -m multiport --dports 80,3306 -j MARK --set-mark 11
        #iptables -t mangle -vnL
    (2)定義集群,使用-p定義保持連接功能
        #ipvsadm -A -f 11 -s rr -p 300    
        #ipvsadm -a -f 11 -r 172.18.19.122 -g -w 1
        #ipvsadm -a -f 11 -r 172.18.19.123 -g -w 2
    (3)測試
        #for i in {1..10};do curl http://172.18.19.124 ;done
        #for i in {1..10} ;do mysql -h172.18.19.124 -utest -ptestpass -e'show databases'  ;done
        不同的服務有相同的調度結果,而且有會話保持,300秒會再次調度

port Affinity分類:
    單端口持久(PPC):每集群服務單獨定義,并定義其持久性;即保持連接
        在一段時間內,將來自同一ip地址請求的同一服務時,始終發往一個RS.
    每防火墻標記持久:基于防火墻標記定義持久的集群服務,可實現將多個端口上的應用統一調用,即所謂的port Affinity:
    每客戶端持久;造一段時間內,基于0號端口定義集群服務,即將客戶端對所有的應用的請求統統調度至后端主機,而且可使用持久連接進行綁定.不常用
        #ipvsadm -C
        #ipvsadm -A -t 172.18.19.124:0 -s rr -p   
        #ipvsadm -a -t 172.18.19.124:0 -r 172.18.19.122 -g -w 1
        #ipvsadm -a -t 172.18.19.124:0 -r 172.18.19.123 -g -w 1
        客戶端訪問:
           ssh root@172.18.19.124 使用ssh進行調度 
           可以使用其他服務進行連接,進行調度

考慮 (1)Director不可用,整個系統不可用;SpoF 解決方案:高可用 keepalived(專用) heartbeat/corosync (重量級) (2)某RS不可用時,Director依然會調度請求至此RS. 解決方案:對個RS的健康狀態做檢查,失敗時禁用,成功時啟用; 檢測方式: 層次級別越低,精度越低,但效率越高 (1)網絡層檢測 ping (2)傳輸層檢測 port檢測 (3)應用層檢測 請求資源方式檢測

課外作業:vip于dip/rip不在同一網段的實驗環境設計及配置 博客作業:lvs的詳細應用,類型,調度方法,內初

原創文章,作者:wencx,如若轉載,請注明出處:http://www.www58058.com/55299

(0)
wencxwencx
上一篇 2016-10-28
下一篇 2016-10-29

相關推薦

  • 【推薦】Linux 簡單部署LAMP

    Linux 簡單部署LAMP: 實驗環境: 1、主機系統Centos6.7_X86_64 2、DNS&CA:192.168.3.10 3、LAMP安裝方式為rpm 4、主機IP:192.168.3.11提供web站點:     http://wp.neolinux.com     &nbsp…

    Linux干貨 2016-06-22
  • 馬哥教育網絡班20期+第3周課程練習

    1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。 [root@localhost ~]# who root     pts/0        2016-06-23&nb…

    Linux干貨 2016-06-29
  • Linux系統中的防火墻iptables

    iptables/netfilter——Linux系統下的防火墻 基本原理 防火墻主要功能 工作于主機或者網絡邊緣,對進出本主機或本網絡的報文進行匹配檢測,對匹配到規則的報文進行于規則相對應的處理。 防火墻主要分類 按功能分類 主機防火墻網絡防火墻 按構成分類 軟件防火墻硬件防火墻 Linux防火墻軟件iptables/netfilter(以后簡稱iptab…

    Linux干貨 2017-06-13
  • 8月5日第七節課作業

    一、當天練習 1、找出ifconfig命令結果中本機的所有IPv4地址 2、查出分區空間使用率的最大百分比值 3、查出用戶UID最大值的用戶名、UID及shell類型 4、查出/tmp的權限,以數字方式顯示 5、統計當前連接本機的每個遠程主機IP的連接數,并按從大 到小排序 1、顯示/proc/meminfo文件中以大小s開頭的行;(要求:使 用兩種方式) …

    Linux干貨 2016-08-08
  • SElinux配置httpd

    一、啟用SELinux策略并安裝httpd服務,改變網站的默認主目錄為/website,添加SELinux文件標簽規則,使網站可訪問     1、修改selinux策略并重啟 [root@localhost ~]# vim /etc/selinux/config# This file controls the stat…

    Linux干貨 2016-09-19
欧美性久久久久