Lvs 理論知識和實踐

    LVSLinux Virtual Server的簡寫,意即Linux虛擬服務器,是一個虛擬的服務器集羣系統。本項目在1998年5月由章文嵩博士成立,是中國國內最早出現的自由軟件項目之一。

      LVS集羣採用IP負載均衡技術和基於內容請求分發技術。調度器具有很好的吞吐率,將請求均衡地轉移到不同的服務器上執行,且調度器自動屏蔽掉服務器的故障,從而將一組服務器構成一個高性能的、高可用的虛擬服務器。整個服務器集羣的結構對客戶是透明的,而且無需修改客戶端和服務器端的程序。爲此,在設計時需要考慮系統的透明性、可伸縮性、高可用性和易管理性。

   

1Cluster 理論

  1.1  系統拓展的方式:

         scale up:向上發展;

         scale  out:向外發展;

  1.2集羣類型:

          LB:負載均衡集羣 -->將一個系統上所面臨的諸多負載load Banlancing另外一個主機上;

              硬件: F5 Big-ip

                            Citrix Netscaler

                            A10 A10

              軟件:  Lvs(大型網站)除了負載均衡沒有其他的健康檢測狀態;

                            haproxy nginx (居多)httpd(proxy模塊) varnish

                            ats apache traffic server)發展需要;

                             perlbal

               基於工作協議層劃分:

                             傳輸層: Lvshaproxy(模擬出TCP層可調度mode tcp)

                              應用層:haproxy(個別協議)nginxatsperlbal

          HA:高可用集羣,high availability

          HP:高性能集羣,high performancing

                分佈式存儲及並行處理集羣,

          

   1.3  系統:

              可擴展性;

              可用性;

              容量;例如高速公路,可以跑多少汽車;             單位時間內完成的總量;

              性能;例如車速,單位時間內通過的汽車數量;響應時間;

              

注意,系統運維:可用性-->做好標準化-->自動化運維 (穩定性高於一切)

#################################################################################

  2,構建高可用擴展性系統的重要原則,在系統內部儘量避免穿行和交互;

        GSLB: Global serviceload balancing  全局負載均衡

               SLBservice load balancing   服務負載平衡

 

         分層:      負載均衡層        靜態內容層           數據存儲層

                                                         動態內容層

 

         分割:功能上分割,把不同的請求分佈到不同的server

         分佈式:

                分佈式應用;

                分佈式靜態資源;

                分佈式數據和存儲;

                分佈式計算;

2.1,四層交換,四層路由

              根據請求報文的目標IPport將其轉發至後端主機集羣中的某一臺主機(根據負載均衡算法)

              netfilter

                  入站: prerouting------>input

                  轉發:prerouting---> forward--->postrouting

                  出站:output---->postrouting

 

    2.2Lvs

                  ipvsadm (寫規則)/ipvs(定義規則) 工作在netfilter的內核中;

                  ipvsadm:用戶空間的命令行工具,用於管理集羣服務;

                  ipvs:工作在內核中netfilter INPUT 鉤子協議上;

                  支持TCPUDPAHESTAH_ESTSCTP等協議;

    2.3Centos 7 查看調度模塊信息;

            # grep -i -A 10 'IPVS'/boot/config-3.10.0-229.el7.x86_64

           

    2.4Lvs arch

                 調度器:director(導演)dispatcher(調度員)

                  RSReal server

                  client IPcip

                  directorvirutal ipvip

                  director ipdip

                  real serveriprip

    2.5Lvs type

                A,   Lvs-nat:基於Dnat模式                  masquerade(地址僞裝)類型

                B,    Lvs-dr:直接路由directroutinggateway類型

                C,    Lvs-tunip隧道 ip tunneling          IPIP 隧道類型

                D,    Lvs-fullnat:非標準類型                 請求報文轉發時修改源、目標地址

  

               A,    Lvs-nat

                            多目標的DNATiptables);

                             通過修改請求報文的目標IP地址和端口,完成端口映射,至挑選出某RSRIP地址實現轉發;

                            1 RS應該和DIP使用私網地址,且RS的網關需要指向DIP;

                            2請求和響應報文都要經由director轉發;極高負載的場景中,director可能會成爲系統瓶頸;

                            3RS 可以使用任意OS,支持端口映射;

                            4RSRIPdirectorDIP必須在同一IP網絡;

                              如圖1.1所示:

wKioL1Yfl4WDqPm1AAEJ77fPQZ8159.jpg

  B,    Lvs-dr:direct routing

                              通過修改請求報文的目標mac地址進行轉發;      

                                       directorVIP DIP

                                       RSsRIP,VIP

                            1)必須保證前段路由器將目標IPVIP的請求報文發送給director

                                       解決方案:

                                           靜態綁定;director MAC地址綁定

                                          arptables在每個real server 啓用arptables

                                           修改RS主機內核參數(linux 主機)

                             2RSRIP可以使用私有地址,但也可以使用公網地址;

                             3RSdirector必須在同一物理網絡;

                             4請求報文經由director調度,但響應報文不一定能經由director(由RS直接轉發);

                             5)不支持端口映射

                             6RS可以大多數OS

                             7RS的網關不能指向DIP

wKioL1YfmbKCqEkiAAEavH1flYc889.jpg

#################################################################################

3Lvs -type

              Lvs-natRIPDIP必須在同一網段;

              Lvs-dir: directorRS必須在同一網段;

              Lvs-tun

                     不修改請求報文的IP首部,而是通過原有的IP首部之外,在封裝一個IP首部;

                           

                     1RIPDIPVIP都是公網地址;

                     2RS網關不能指向DIP

                     3)請求報文經由director調度,響應報文必須不經由director

                     4)不支持端口映射,RSOS必須支持隧道功能;

    

               Lvs-fullnat:可以跨機房設置

                        請求報文到達時,director同時修改報文的源地址和目標地址;

                        

                     1VIP是公網地址,DIPRIP可以不在同一網段;

                     2RS接收到的請求報文源地址爲DIP,因此要響應給DIP

                     3)請求報文和響應報文必須經由director

                     4)支持端口映射,RSOS可以使用任意OS

 

 

   4,httpstateless

             追蹤每一客戶端,需要給每一個客戶端發放一個cookie

               session保持:將來自於同一個用戶的請求,調用到同一個RS

               session綁定:請求報文插入cookie (nginx可以,lvs不可以

               session集羣;session主從機制會浪費內存、cpu等消耗;

               session服務器;共享存儲服務器,KV機制存儲

 

    5Lvs scheduler

             靜態方法:僅根據算法本身進行調度,不考慮負載狀態;  起點公平 

                  RR: roundrobin 輪詢

                  WRRweighted rr ,加權

                  SHsource hash 源地址hash 實現session保持;損害負載均衡的效果;

                       將來自同一個IP的請求始終調度至同一RS;反向代理

                  DHdestination hash,目標地址hash,不管來自哪一個的請求,請求同一個目標時,

                        都會調度至同一個RS   正向代理

 

             動態方法:根據算法及各RS的當前負載狀態進行調度;sh

                 LCleast connection 最少連接數;

                   overhead=active(活躍的鏈接數量)*256+inactive(不活躍的連接數)

                  WLCweighted least connection 加權最少連接;

                     overhead=active(活躍的)*256+inactive(不活躍的)/weight 服務器權重           

                  SED:最短期望延遲 shortest expection delay

                     overhead=active+1*256/weight

                 NQnever queue

                                        SED算法改進

                  LBLClocality-based lc,動態DH算法,實現正向代理時;

                  LBLCR:帶複製的的LBLC

               權重大的響應請求,分配延遲

#######################################################################################

靜態

局部性:空間 + 時間

製作緩存時,基於內存的緩存方式

 

動態內容:時間 + 特定

製作緩存時,根據用戶時長判斷;

 

 

######################################################################

6Lvs的集羣服務:  TCPUDPahesp

         

       1)一個ipvs主機可以同時定義多個clusterserver

                            根據  tcpudp

        2)一個cluster server上至少有一個real server

                            定義時:指明lvs-type 以及lvs scheduler(程序機);

 

7ipvsadm的用法:

        A,      管理集羣服務;

                  ipvsadm-A|E -t|u|f service-address [-s scheduler]

                            增加和修改

                  ipvsadm-D -t|u|f service-address

                                 刪除

                  ipvsadm-C    刪除

                  ipvsadm -L | l [options]

                 service-address

                              tcp:-t ip:port

                               udp:-u ip:port

                              fwm:-f mark 數字防火牆標記

                          -sscheculer:  默認爲wlc 非活動鏈接數量

                                

 

          B,      管理集羣服務中的RS

                         ipvsadm -a|e -t|u|f service-address -rserver-address [-g|i|m] [-wweight]

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

                         

                        server-address

                                 ip [:port] 支持端口映射;大多數端口可省略;

                         Lvs-type

                                   -g:gateway,dr

                                  -i:ipip     tun

                                  -m:masquerade,nat   nat模型

 

          C,       清空和查看:

                            ipvsadm -C

                            ipvsadm -L | l[options]

                               -n:numberic 基於數字格式顯示地址和端口;

                               -c:connection 顯示ipvs連接數;

                               --stats:統計數據;pkts:總包數

                               --rate:速率       pps 每秒的包個數

                               --exact:精確值;

                               --sort:排序;

            D,     保存和重載:

                            ipvsadm -R          重載

                            ipvsadm -S [-n]   保存

             E,      置零計數器:

                              ipvsadm -Z[-t|u|f service-address]

                              

 

######################################################################################################

二,實操部分

Lvs-nat

wKioL1YfmeTTdmnSAADllmM6COo821.jpg


1DIP 設置:director準備兩個網口,一個是網橋,一個是虛擬網卡2

     # cd /etc/sysconfig/network-scripts/

     # vimifcfg-eno16777736

     #ifconfig -a

查看eno16777736地址

wKiom1Yfmj2DwDAwAAF5ZS8As9s316.jpg

設置另外一個端口vmnet2

       # cpifcfg-eno16777736 ifcfg-eno33554984

       # vim ifcfg-eno33554984  刪除UUID更改NAMEDEVICE參數

      #ifconfig -a 查看eno33554984端口IP

wKioL1Yfmobz3VWCAAFY2_wGF1c294.jpg

2,接下來我們配置另外兩臺web機器:

      分別配置兩臺web服務器的IP地址,和web服務;

      然後在director上面測試兩個頁面;並關閉iptables防護牆;

      #curl http://192.168.20.7

      #curl http://192.168.20.8

      #iptables -F

     director上轉發功能打開

      # cat /proc/sys/net/ipv4/ip_forward

      # vim /etc/sysctl.conf編輯添加"net.ipv4.ip_forword = 1"

wKioL1YfmqmxDdHpAAAg8wY-TrI887.jpg

wKioL1YfmrbTtNIzAABdStRQqnk923.jpg

3,現在在director上面設置規則:

     # ipvsadm -A -t 172.16.100.117:80 -s rr

     # ipvsadm -a -t 172.16.100.117:80 -r192.168.20.7 -m

     # ipvsadm -a -t 172.16.100.117:80 -r192.168.20.8 -m

 

 4,保存配置永久有效:

    ]# ipvsadm -S > /etc/sysconfig/ipvsadm

wKioL1Yfms_hyoCCAACmSQeZPPA998.jpg

5,如果不小心刪除規則,可以及時修復;

6,重讀配置文件,並修復;

      # ipvsadm -R < /etc/sysconfig/ipvsadm

wKioL1YfmvXR2JDlAAEfV6n3iG8856.jpg

  7,開始驗證Lvs-nat 效果:

   http://172.16.100.117來查看;

wKioL1YfmzzAhwWzAADt2aDRk58456.jpg

8,使用"-E"選項修改調度器:

    #ipvsadm -E -t 172.16.100.117:80 -s sh

wKiom1YfmzWRJcwvAAFJE5EC3-0750.jpg

9,基於web修改RS端口映射;

  # ipvsadm -e -t172.16.100.117:80 -r 192.168.20.7:8080 -m

  # ipvsadm -e -t172.16.100.117:80 -r 192.168.20.8:8080 -m

或者修改 #vim/etc/sysconfig/ipvsadm 裏的參數;然後重讀信息。

wKioL1Yfm3XyKQg_AAEPFaaq0qQ904.jpg

這樣web服務又恢復了正常;

wKiom1Yfm3HT9J8JAADgLn1bAGk813.jpg

10,刪除一個real server

    #ipvsadm -d -t 172.16.100.117:80 -r192.168.20.7:8080

          刪除集羣服務:

    #ipvsadm -D -t 172.16.100.117:80

           修復ipvsadm

    #ipvsadm -R < /etc/sysconfig/ipvsadm

11Lvs-dr 內核參數配置  arp_ignore對請求是否響應  / arp_announce 接不接受請求通告

          arp_announce(通告)-INTEGER  請求

        0 默認,不保留通告

                 1   儘量不通告

                  2  只能、總是避免通告

     arp_announce = 1 儘量避免,

     arp_announce = 2 只能、總是避免

     

     arp_ignore -INTEGER 響應

      0 -默認 通告全場

      1 -  僅通告報文請求的入口

Lvs-dr實操圖

wKiom1Yfm8Xymh6tAAGwqoyvKCU318.jpg

A,修改DIP

      配置director主機地址和迴環地址:

      # ifconfigeno16777736:0 172.16.100.118/32 broadcast 172.16.100.118 up

      # route add -host 172.16.100.118 deveno16777736:0    限定接口-->目標地址響應

     

 B,配置real server   *參數配置--->配置VIP

      配置兩臺real server內核參數;

       # echo 1 >/proc/sys/net/ipv4/conf/all/arp_ignore

       #   echo 1 >/proc/sys/net/ipv4/conf/eth0/arp_ignore

       # echo 2 >/proc/sys/net/ipv4/conf/all/arp_announce

       # echo 2 >/proc/sys/net/ipv4/conf/eth0/arp_announce

       # ifconfig lo:0 172.16.100.118/32broadcast 172.16.100.118 up添加回環Vip地址

       # route add -host 172.16.100.118 devlo:0  端口限定

 

  C,請求RIP地址驗證;curl 命令;

  Ddirector上添加集羣服務;

        #ipvsadm -C 刪除之前的配置

wKioL1YfnJfB0xL_AAGyXMPC1zw833.jpg

# ipvsadm -A -t172.16.100.118:80 -s rr

 # ipvsadm -a-t 172.16.100.118:80 -r 172.16.100.21 -g

 # ipvsadm -a-t 172.16.100.118:80 -r 172.16.100.22 -g





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