Linux集羣--lvs

下面介紹的是Linux集羣


一、Linux集羣基礎

1、Linux集羣類型:LB、HA、HP、DS

(1)、LB:負載均衡集羣

  缺陷:單點故障,其調度器會成爲性能瓶頸

(2)、HA:高可用集羣

  平均無故障時間(MTBF)、平均故障修復時間(MTTR)。

  有效值==MTBF/(MTBF+MTTR) -------------提高可用性公式

(3)、HP:高性能集羣

(4)、DS:分佈式系統集羣

  功能:分佈式處理、分佈式存儲


2、Linux集羣調度器:硬件(F5)、軟件(lvs)。


3、負載均衡

(1)、傳輸層的負載均衡:四層交換

  應用協議工具:lvs、nginx、haproxy

(2)、應用層的負載均衡:七層交換

  應用協議工具:httpd、nginx、haproxy

(3)、FastCGI負載均衡:------------性能好,沒httpd穩定

  應用協議工具:httpd、nginx

(4)、mysql的負載均衡:

  管理工具:mysql-proxy



二、lvs --------------Linux虛擬服務器

虛擬服務器:vs ------------調度器

真實服務器:rs(Real Server)----------後端服務器


CIP:客戶端 ip,請求發送方 ip地址

VIP:虛擬服務器 ip,客戶端訪問的地址

DIP:調度器 ip

RIP:真實服務器的 ip


1、lvs基礎

lvs是基於套接字(ip:port)來實現數據分發的。lvs,根據目標套接字,調度數據報文到後端真實服務器(rs)上,調度時,通過不同的算法來調度響應的服務器。


lvs使用的調度規則鏈:INPUT

iptables 和 lvs 的規則,不能同時使用,至少INPUT規則鏈不能同時使用。


lvs 的內核組件:ipvs ----------接收 ipvsadm 的管理命令,支持TCP、UDP、SCTP、AH、ESP、AH_ESP協議

      用戶空間工具爲:ipvsadm ------------集羣服務和 rs 管理


2、lvs的集羣類型:lvs-nat、lvs-dr、lvs-tunnel。

(1)、lvs-nat -----------多目標IP地址的DNAT

  client ---------> DIP ---------- >RIP ------------> RS(目標地址、目標端口)

                  (同一網段、私有IP)


  具體步驟:

  client ------> VIP --------> INPUT ------> DIP ------> RIP ------>RS


  lvs-nat:(注意)

  1、RIP和DIP在同一個網段,並應該是私有IP地址,RS的網關指向DIP。

  2、請求報文和響應報文,都必須通過director轉發器轉發,易引發性能瓶頸、單點故障。

  3、可以實現端口重定向,即VIP、DIP端口號可以不同。

  4、vs必須是Linux系統,而RS可以是任意的操作系統。



(2)、lvs-dr(默認類型) ----------重要

  dr:直接路由(注意判斷網關)----------------響應報文不經過轉發器


  具體步驟:

  client -------> 路由器 ----------> 交換機 ---------> VS -----------> RS ---------------> 交換機 

(CIP+VIP)                                            (RIP、DIP同一網段)

  -------->路由器 ---------> client  

  步驟:

  1、客戶機將CIP+VIP(源CIP,目的VIP)報文發給路由器;

  2、路由器將CIP+VIP報文發給交換機;

  3、交換機根據目的地址爲VIP,找到接收端爲轉發器VS;VS有VIP、DIP。

     RS也有VIP地址,但是RS的arp_ignore=1/2,表示入棧接口爲指定的接口,在此指定入棧接口爲VS;

  4、VS接收CIP+VIP報文,發現VIP地址是集羣服務的,將報文中轉給對應的RS;

     VS有DIP接口、VIP標籤接口(別名接口);

  5、RS因爲有VIP地址,所以能接收CIP+VIP報文;RS的VIP在環回接口上,不和外部通信;

     即:CIP+VIP報文不是從RIP直接發送出去,而是通過一條這路由到VIP的環回接口上走一圈,使發送的源地址變爲VIP;

  6、RS發送VIP+CIP給交換機;

     因爲RS內,arp_announce=2,決定了出棧地址,在此指定出棧爲對應交換機;

  7、交互機轉發VIP+CIP報文發送給路由器;

  8、路由器再將VIP+CIP報文發送給客戶端;

     客戶端接收到VIP+CIP報文,就像直接從VS發來的一樣,不會意識到有RS的存在。



  lvs-dr:(注意)

  1、通過對請求報文封裝一個數據鏈路層首部(MAC地址)。

  2、重新封裝的源MAC地址,是DIP所在網絡的MAC地址。

               目的MAC地址,是調度選出來的RS的RIP接口的MAC地址。

  3、源IP地址和源PORT,目的IP地址和目的PORT,在整個報文轉發過程中保持不變

  4、交換機 -------> VS:將目標地址爲VIP的報文發往VS,方法:在路由器上靜態綁定IP地址和MAC地址。

    交換機 --------> RS:交換機到RS的方法,有兩種:在RS上使用arptables,RS的內核參數(arp_announce、arp_ignore)

  5、不支持端口重定向

  6、RS爲Linux

  7、RS上必須配置RIP和VIP,並且VIP應該配置在lo接口的lable上



(3)、lvs-tun ----------只經過一次VS

  tunnel:隧道封裝,VS和RS之間的數據傳輸。

          不修改請求報文的ip首部(CIP/VIP),而是在之外再封裝一個IP首部(DIP/RIP)。

  具體步驟:        

  client ----------> VS --------> RS ---------> client(只經過一次VS)


  lvs-tun:(注意)

  1、CIP,VIP,DIP,RIP都應該是公有IP地址

  2、RS的網關無法指向DIP,因此響應報文不會經過Director轉發,而是直接發往CIP

  3、不支持端口重定向

  4、RS必須支持隧道協議

  5、RS上必須配置RIP和VIP



(4)、lvs-fullnat -----------非標準類型(VS的開銷更大,但可增加一定的安全性)

  同時修改請求報文的源IP地址、目的IP地址,實現報文轉發。

  CIP --------->DIP

  VIP --------->RIP

  即:CIP/VIP -------> DIP/RIP


  lvs-fullnat:(注意)

  1、CIP、VIP爲公有地址,DIP、RIP爲私有地址。DIP、RIP可不在同一網段。

  2、RS對收到的請求報文的響應報文的目的地址是DIP,所以請求報文和響應報文都必須經過Director

  3、支持端口重定向



3、lvs的調度算法

根據是否與RS的負載狀態有關,分爲:靜態算法(無關)、動態算法(有關)。

(1)、靜態算法:與算法本身有關

    RR:輪詢算法

    WRR:加權輪詢算法

    SH:源地址哈希算法(源地址綁定)

    DH:目標地址哈希(正向代理服務器) ---------緩存方式實現


(2)、動態算法:與RS當前負載狀態有關,RS的負載:Overhead。

    LC:最少連接數算法(選擇Overhead值小的)------------存在【起點問題】

   *WLC(默認算法):加權最小連接算法 -------------存在【起點問題】

    SED:最短期望延遲算法 -------------解決了起點問題,存在【連續請求問題】

    NQ:無序列排隊算法 ------------開始據RS權重依次分配一個,保證一個活動連接,然後再SED

    LBLC:基於本地的最少連接數算法 ----------------動態DH(正向代理)

    LBLCR:帶有複製功能的LBLC算法 ------------帶複製的動態DH(正向代理)


4、ipvsadm -------------編寫ipvs規則

ipvs規則:作用於內核空間的TCP/IP協議棧上 -------------INPUT鏈上


ipvsadm命令:

(1)、集羣相關

  【添加】集羣相關格式:

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

  常用選項:

  -t:基於TCP的集羣,其後地址爲VIP地址

  -u:基於UDP的集羣,其後地址爲VIP地址

  -f:基於防火牆標記的集羣,其後地址爲mangle表中的標記

  -s:集羣調度算法

  -p:持久連接


  【修改】集羣格式:ipvsadm -E -t|u|f service-address [-s scheduler] [-p [timeout]]

  常用選項:

  -E:刪除集羣


  【刪除】集羣格式:ipvsadm -D -t|u|f service-address

  常用選項:

  -D:刪除指定集羣


  【清除】集羣:ipvsadm -C

  常用選型:

  -C:清空集羣,所有清空


(2)、集羣中的RS相關:

  【添加】RS:ipvsadm -a -t|u|f service-address -r server-address [-g|i|m] [-w weight]

  常用選項:

  -r:添加的RS的,IP地址和端口

  -w:權重


  -g:dr集羣 ----------默認

  -i:tunnel集羣

  -m:nat集羣

  

  【修改】其中的RS:ipvsadm -e -t|u|f service-address -r server-address [-g|i|m] [-w weight]

  常用選項:

  -e:修改集羣中RS


  【刪除】其中的RS:ipvsadm -d -t|u|f service-address -r server-address

  常用選項:

  -d:刪除集羣中的RS


(3)、查看集羣信息

  格式:ipvsadm -L|l [options]:

  常用選項:

  -c:集羣中各連接狀態

  --stats:集羣的統計數據信息

  --rate:傳輸速率相關

  --timeout:超時時長


(4)、保存、重載ipvs的規則

  保存格式:ipvsadm -S [-n]

  # ipvsadm -S [-n] > /PATH/TO/IPVS_RULE_FILE

  # ipvsadm-save > /PATH/TO/IPVS_RULE_FILE

  

  重載格式:

  # ipvsadm -R < /PATH/FROM/IPVS_RULE_FILE

  # ipvsadm-restore < /PATH/FROM/IPVS_RULE_FILE



5、lvs-nat集羣實現過程:

  調度器配置:----------------支持端口重定向

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

    # ipvsadm -a -t 172.16.72.1:80 -r 192.168.100.8:8080 -m -w 1

    # ipvsadm -a -t 172.16.72.1:80 -r 192.168.100.9 -m -w 2


  RS服務器配置:

  正常配置ip地址,注意網關指向調度器的DIP。



6、lvs-dr集羣的實現過程:

  調度器配置:------------兩塊網卡

  一塊網卡:作爲主接口,配置DIP

  另一塊網卡:作爲網絡標籤,配置VIP,用於接收報文。-----------注意配置廣播地址,即只是自己使用。

    # ifconfig eno16777736:0 172.16.72.101 netmask 255.255.255.255  broadcast 172.16.72.101 up


  RS服務器配置:

  網卡主接口:配置RIP

  調整內核參數:

    echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore --------入棧接口

    echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore

    echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce -------出棧接口

    echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce

  設置VIP:

    # ifconfig lo:0 172.16.72.101 netmask 255.255.255.255  broadcast 172.16.72.101 up

  設置直接路由:

    # route add -host 172.16.72.101 dev lo:0



7、防火牆標記集羣的實現過程:

  打標記:iptables -t mangle -A PREROUTING -d VIP -p tcp --dport PORT -j MARK --set-mark 6

  建防火牆標記集羣:ipvsadm -A -f FWM -s rr


8、LVS持久連接:

  常做的端口持久端口爲:443、80

  # iptables -t mangle -A PREROUTING -d VIP -p tcp -m multiport --dports 80,443 -j MARK --set-mark 6


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