LVS負載均衡集羣服務搭建詳解

1、LVS概述
html

 1.LVSLinux Virtual Server前端

         四層交換(路由)根據請求報文的目標IP和目標PORT將其轉發至後端主機集羣中的某臺服務器(根據調度算法);web

                                           不可以實現應用層的負載均衡算法

          lvs(又稱ipvs),基於內核中的防火牆netfilter實現後端

  2.lvs集羣術語:瀏覽器

vsVirtual  Server緩存

虛擬服務,可稱爲DirectorDispatcher分發器、Balancer負載均衡器bash

rsReal  Server服務器

真實服務器網絡

CIPClient  IP

客戶端IP

VIPDirector  Virtual IP

等同於FIP(流動IP),負載均衡器虛擬IP

DIPDirector  IP

調度IP(第二張網卡IP地址)

RIPReal  Server IP

真實服務器IP

 3.LVSipvsadm/ipvs

     (1)ipvsadm: CLI工具

              用戶空間的命令行工具,用於管理集羣服務及集羣服務上的RS等;# yum install -y ipvsadm

     (2)ipvs:內核存在(CentOS默認支持)

               工做於內核上的netfilterINPUT鉤子之上的程序代碼;其集羣功能依賴於ipvsadm定義的集羣服務器規則;

               支持基於TCPUDPSCTPAHESTAH_EST等協議的衆多服務;

 

  4.負載均衡集羣中設計時的要點:

      (1)session保持

     session sticky (iphash)IP地址綁定,來源IP記錄在ip hash表做統一調度

     session cluster(multicast/broadcast/unicast):廣播集羣同步(複製)session,只適用於小規模場景

     session server ()session服務器

       (2)數據共享(提供一致性存儲)

     1) 共享存儲;

  NAS:Network Attached Storage (文件級別),網絡附加存儲,文件服務器

  SAN:Storage Area Network (塊級別),存儲區域網絡

  DS:Distributed Storage,分佈式春初

      2) 數據同步:rsync … ...

 

 

 

2、LVS模型

 1.lvs-nat:地址假裝模型

        多目標的DNAT:經過將請求報文的目標地址和目標端口修改成挑選出某RS的RIP和PORT來實現;

        客戶端主機發起請求報文CIP指向VIP,經過內核的核心網卡間轉發功能,VIP會將請求交給DIP進行調度,DIP根據設定的算法進行負載均衡給後端的RS主機的RIP,在這個過程當中DIP調度功能會將目標IP地址重寫爲RIP。請求和返回請求讀要調度DIP來進行轉換操做。

wKioL1auNzHD-B8xAAD_ySoQeQM843.png

    (1)RIP和DIP應該使用私網地址,RS的網狀應該指向DIP;

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

    (3) 支持端口映射(轉發)

    (4) VS必須爲Linux,RS能夠任意操做系統

    (5)RS的RIP與Director的DIP必須在同一IP網絡;

 

 

 2.lvs-dr(direct routing直接路由):網關模型

        經過修改請求報文的MAC地址進行轉發;IP首部不會發生變化(源IP爲CIP,目標IP始終爲VIP)

    客戶端發起請求,通過層層路由到達離VS服務器最近的交換機,經過交換機轉發給VS服務器,由VS服務器負載均衡轉發請求給RS服務器。在此過程當中VIP修改MAC地址調度請求給真實主機。在此過程當中經過ARP協議在一個局域網中廣播尋找真實主機的MAC地址。每一個RS真實主機的網卡會一個別名地址VIP,實現全過程源地址爲CIP,目標地址爲VIP不變。調度基於尋找MAC。網關模型中的全部主機均要能與外網通訊。這樣RS主機就可以直接響應客戶機。

wKiom1auNubgM1pFAAF_3RNQS9I904.png

    (1)確保前端路由器將目標IP爲VIP的請求報文必定會發送給Director;

解決方案:

    1)靜態綁定;

    2)禁止RS響應VIP的ARP請求;

a) arptables上定義

b) 修改各RS的內核參數,並把VIP配置在特定的接口上實現禁止其響應;

    (2)RS的RIP可使用私有地址,也可使用公網地址;

RIP使用私有地址能夠經過在以前加一個路由器的方式和外網通訊,直接響應客戶機

    (3)RS跟Director必須在同一物理網絡中;

    (4)請求報文必須由Director調度,但響應報文必須不能經由Director;

    (5) 不支持端口映射;

    (6) 各RS可使用大多數的操做系統

 

 3.lvs-tun(ip tunneling)IP隧道模型

         轉發方式:不修改請求報文的IP首部(源IP爲CIP,目標IP爲VIP),而是在原有的IP首部這外再次封裝一個IP首部(源IP爲DIP,目標IP爲RIP);

    (1)RIP,DIP,VIP全得是公網地址;

    (2)RS的網關不能也不可能指向DIP;

    (3)請求報文經由Director調度,但響應報文將直接發給CIP;

    (4) 不支持端口映射;

    (5)RS的OS必須支持IP隧道功能;

 

 4.lvs-fullnat:完整模型(同時改變請求報文的源IP和目標IP)

         經過同時修改請求報文的源IP地址(cip-->dip)和目標IP地址(vip--> rip)實現轉發;

      注意:前三種爲標準類型,第四種爲後添加類型,內核默承認能不支持,需自編譯內核

    (1)VIP是公網地址;RIP和DIP是私網地址,且能夠不在同一IP網絡中,但須要經過路由互相通訊;

    (2)RS收到的請求報文的源IP爲DIP,所以其響應報文將發送給DIP;

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

    (4) 支持端口映射;

    (5) RS可以使用任意OS;

 

 

 

 

3、LVS scheduler調度算法

  1.靜態方法:僅根據算法自己進行調度

      (1)RR round robin,輪詢機制,依次分配請求,方式簡單但時負載均衡的效果通常

      (2)WRR weighted rr,加權輪詢,權重越大承擔負載越大

      (3)SH source ip hash,源地址哈希,未來自同一個ip請求經過記錄在ip hsash表中綁定在同一個服務器,實現session保持

                   缺點:調度粒度大,對負載均衡效果差;session黏性不一樣,鏈接時長保持不一樣

      (4)DH desination ip hash,目標地址哈希。能實現鏈接追蹤,但不考慮負載均衡效果

正向web代理,負載均衡內網用戶對互聯網的請求;

Client--> Director --> Web Cache Server(正向代理)

 

  2.動態方法:根據算法及各RS當前的負載狀態進行評估

Overhead

負載值,VS轉發時記錄每一個RSActiveInactive數量(甚至權重)進行算法計算

Active

活動連接值,當發起新請求後保持在ESTABLISHED狀態時,仍有請求響應

Inactive

非活動連接值,在ESTABLISHED狀態時,還沒有斷開保持空閒等待狀態

   (1)LCleast connection,最少鏈接

            Overhead=Active*256+Inactive

              後端的RS誰的鏈接少就分發請求至那臺RSoverhead同樣則自上而下輪詢列表中的RS

   (2)WLCweighted least connection,加權最小鏈接

              Overhead=(Active*256+Inactive)/weight計算結果小的將爲選中的下一跳RS服務器

             缺點:當Overhead同樣時,自上而下輪詢響應,權重小的若在列表上方則其會響應

   (3)SEDShortest Expection Delay,最短時間望延遲

               Overhead=(Active+1)*256/weight

              缺點:解決WLC問題,但時沒法確保權重小的主機必定響應

   (4)NQnever Queue,永不排隊,SED算法改進

            RS權重大小排列,每臺RS服務器先分配一個請求,其他的按照權重大小計算分配

   (5)LBLCLocality-Based LC,基於本地的最少鏈接,動態的 DH鏈接算法

   (6)LBLCRLBLC with Replication,帶複製功能的LBLC

 

 

 

4、ipvsadm命令

  1.管理集羣服務:

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

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

   -A:添加-E:修改-D:刪除

 service-address

服務地址和 -t|u|f 結合使用,具體格式以下

  -t, tcp, vip:port  

 TCPipport

  -u, udp, vip:port

 UDPipport

  -f, fwm, MARK   

防火牆標記

   -s scheduler:默認爲WLC調度算法,可省

  -p [timeout] :超出時長,持久鏈接相關,默認時長爲300

  2.管理集羣服務上的RS:

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

ipvsadm -d -t|u|f service-address -rserver-address

-a:添加一個RS-e:修改一個RS-d:刪除一個RS

server-address指的是rip[:port],端口可省表示與以前的service-address相同,只有nat模式支持端口映射纔會使用

[-g|i|m]

   -g:GATEWAY (默認)lvs-dr模型

   -i: IPIP lvs-tun隧道模型

   -m: MASQUERADElvs-nat模型

  3.查看

          ipvsadm -L|l[options]

-n:numeric,數字格式顯示地址和端口;

-c:connection,顯示ipvs鏈接;

--stats:顯示統計數據;

--rate:速率

--exact:精確值,不通過單位換算的數值

  4.清空規則:

ipvsadm  -C

  5.數器清零:

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

  6.保存和重載:

保存:

ipvsadm-S  > /PATH/TO/SOME_RULE_FILE

ipvsadm-save  > /PATH/TO/SOME_RULE_FILE

重載:

ipvsadm  -R < /PATH/FROM/SOME_RULE_FILE

ipvsadm-restore< /PATH/FROM/SOME_RULE_FILE

         注意:須要結合重定向一塊兒使用,從自定義的規則文件中導入導出

附錄(ipvsadm -h):

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

[-p[timeout]] [-M netmask] [-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

[-g|i|m][-w weight] [-x upper] [-y lower]

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-h



5、lvs-nat模型構建

 1.lvs-nat模型示意圖

          本次構建的lvs-nat模型的示意圖以下,其中全部的服務器和測試客戶端均使用VMware虛擬機模擬,所使用的CentOS 7

          VS內核都支持ipvs功能,且安裝ipvsadm控制書寫lvs規則工具。

          RS端兩臺服務器爲httpd服務器作請求的負載均衡。

     注意;

1) 客戶端可使用Windows上的瀏覽器,會後緩存影響結果,因此採用CentOS上的curl命令請求http協議顯示更加直觀

2) DIP上不能配置iptables規則

wKioL1auNzOAsYX7AACvHD7S6gs173.png

 

2.VS網卡配置

   (1)增長網卡

         "虛擬機設置"中增長一個網絡適配器設備,並將其自定義特定網絡爲VMnet2模式,此處爲了模擬負載均衡服務器的兩張網卡處於不一樣網段

wKiom1auNueRtgRJAAE-3b_c9xM927.jpg

   (2)配置VS兩張網卡的IP地址

            [root@localhost ~]# nmtui      # CentOS 7 文本圖形界面配置網卡命令

[root@localhost ~]# systemctl start network.service

wKioL1auNzSiX6fYAABeYoB3gY0988.png

注意:

      網絡適配器1(172.16.249.57)模擬爲外網網卡,網絡適配器2(192.168.100.1)模擬爲內網,且該網卡的Ip地址要和RS服務器得ip在同一網段,DIP做爲RIP的網絡調度(網關),無需配置GATEWAY

       [root@localhost~]# ifconfig

wKioL1auNzWhfl-nAAIcovgnHnU989.jpg

 

 3.RS網卡配置

          此處使用兩臺CentOS 7虛擬機做爲負載均衡後端真實響應主機,安裝RPM包格式httpd服務,並啓動服務。nmtui命令配置網卡信息,RS1IP:192.168.100.2RS2IP:192.168.100.3RIPDIP在同一網段,虛擬機網卡和DIP同時匹配值爲VMnet2模式,且兩臺RS服務器主機網關指向DIP192.168.100.1

           [root@localhost~]# yum install -y httpd

[root@localhost ~]# systemctl start httpd.service

注意:安裝完成後在各httpd服務器上配置測試頁面,/var/www/html/index.html.

[root@localhost ~]# nmtui       # 配置方法同上,此處省略

… ...

[root@localhost ~]# systemctl start network.service

[root@localhost~]# ifconfig

wKiom1auNumTbNfDAAAidSXiMbU520.png

 

  4.測試全部主機是否可以通訊

          ping命令測試各節點的通訊,例如RIP1VIPDIPRIP2之間是否可以通訊

[root@localhost ~]# ping  IPADDR

 

 5.VS主機:核心轉發和安裝ipvsadm

       (1)安裝ipvsadm組件:[root@localhost ~]# yum install -y ipvsadm

       (2)啓動網卡間核心轉發功能:[root@localhost ~]# sysctl -w net.ipv4.ip_forward=1

      [root@localhost~]# cat /proc/sys/net/ipv4/ip_forward

wKiom1auNumw7qkzAABNmcU71hg039.png

 

  6.VS主機:定義配置lvs-nat服務(此處採用rr算法)

      (1)定義ipvsadm負載均衡集羣規則,並查看

             此處定義DIP是以-s指定爲rr算法進行輪詢調度,-m指定模式爲lvs-nat,配置命令以下:

    [root@localhost~]# ipvsadm -A -t 172.16.249.57:80 -s rr

    [root@localhost~]# ipvsadm -a -t 172.16.249.57:80 -r 192.168.100.2:80 -m 

    [root@localhost~]# ipvsadm -a -t 172.16.249.57:80 -r 192.168.100.3:80 -m 

    [root@localhost~]# ipvsadm -L -n

wKioL1auNzaSgL5DAADUsMqbfns717.png

      (2)Client客戶機測試

            在客戶端主機上使用curl命令對VIP發起請求,負載均衡服務器會將請求按照rr算法依次將請求調度給不一樣的主機進行處理,依次請求給分發給192.168.100.2192.168.100.3主機響應。

[root@localhost~]# curl http://172.16.249.57

wKiom1auNuqx_sONAAET0Ync_pw514.png

 

   7.VS主機:定義配置lvs-nat服務(此處採用wrr算法)

      (1)定義ipvsadm負載均衡集羣規則,並查看

              此處將在上面lvs-natrr的基礎上進行修改,改爲wrr加權輪詢算法;將192.168.100.2的權重設置爲1,192.168.100.3的權重設置爲3

[root@localhost~]# ipvsadm -E -t 172.16.249.57:80 -s wrr

[root@localhost~]# ipvsadm -e -t 172.16.249.57:80 -r 192.168.100.2 -w 1 -m

[root@localhost~]# ipvsadm -e -t 172.16.249.57:80 -r 192.168.100.3 -w 1 -m

[root@localhost~]# ipvsadm -L -n

wKioL1auNzeAJ6MHAADNWyh0K6U556.png

      (2)Client客戶機測試

                在客戶端主機用curl發起請求,負載均衡主機VS會將其按照權重大小轉發給各個主機,四個請求有三個發給了192.168.100.3請求響應,一個發給了192.168.100.2主機處理。並以此算法作輪詢負載請求

[root@localhost~]# curl http://172.16.249.57

wKioL1auNzfQAfClAAEN7fXE3s0557.png

 

 

 

 

6、lvs-dr模型構建

 1.lvs-dr模型示意圖

         三臺主機爲虛擬機CentOS 7,每臺主機僅有一塊網卡,且使用橋接方式都指向外部網絡的網關172.16.100.1

wKiom1auNuyiAcPNAAEIsUxXZpE244.png

  2.配置VSRS服務器的VIP

       此處的VIP均已別名的形式配置在往卡上,VS是配置在對外通訊的DIP的網卡上;RS配置在lo本地迴環網卡

   注意:此時配置的VIP的子網掩碼必須爲255.255.255.255,廣播地址爲本身自己

           VS[root@localhost~]# ifconfig eno16777736:0 172.16.50.50 netmask 255.255.255.255 broadcast172.16.50.50 up

           RS[root@localhost~]# ifconfig lo:0 172.16.50.50 netmask 255.255.255.255broadcast 172.16.50.50 up

 

 3.RS服務器上配置路由

          [root@localhost~]# route add -host 172.16.50.50 dev lo:0

wKiom1auNuyRe_EJAACP0tXZM9M565.png

 

 4.RS服務器配置APR內核參數修改

      [root@localhost~]# ll /proc/sys/net/ipv4/conf

wKioL1auNzmS1JGFAABuW7dj2A4055.png

    (1)ARP響應行爲和ARP解析行爲內核參數:

         1)arp_annouce定義通告級別

   0:默認級別,將本地的任何接口上的配置的地址都在網絡中通告

   1:儘可能避免向本主機上的其餘網卡進行網絡通訊,特殊狀況下其餘接口也能夠

   2:老是使用最佳網絡地址接口(僅使用定義的網卡接口在同網絡通訊)

         2)arp_ignore定義響應級別(0-8九個級別),響應時忽略方式

   0:都全都響應

   1:只對從本接口進入的請求響應,且本接口地址是個網絡地址

    … …

 註釋:通常使用arp_annouce=2arp_ignore=1

    (2)配置各RS主機參數

             注意:all必須配置、eno16777736(本地)lo兩個能夠同時所有配置或者配置其中一個

     RealServer內核參數:

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

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

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

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

注意:INTERFACE爲你的物理接口;此處網卡接口指的是eno16777736lo

wKiom1auNu3SpFUuAAB5pmjFDbs464.png

 

 5.VS主機:定義配置lvs-dr模式(此處採用rr算法)

   (1)配置查看

[root@localhost~]# ipvsadm -A -t 172.16.50.50:80 -s rr

[root@localhost~]# ipvsadm -a -t 172.16.50.50:80 -r 172.16.200.10 -g

[root@localhost~]# ipvsadm -a -t 172.16.50.50:80 -r 172.16.200.11 -g

[root@localhost~]# ipvsadm -L -n

wKioL1auNzmifYUrAADM1ZEP1_8290.png

   (2)測試

         [root@localhost~]# curl http://172.16.50.50

             由於基於rr算法調度,依次分發給RS主機

 

 

 

 

7、經過防火牆標記來定義lvs

 1.FWM防火牆標記功能

         防火牆標記能夠實現多個集羣服務綁定爲同一個,實現統一調度;將共享一組RS的集羣服務統一進行定義

         FWM基於iptablesmangle表實現防禦牆標記功能,定義標記作策略路由

   2.FWM定義集羣的方式

(1)在director上netfilter的mangle表的PREROUTING定義用於"打標"的規則

~]#iptables -t mangle -A PREROUTING -d $vip -p $protocol --dport $port -j MARK--set-mark #

$vip:VIP地址

$protocol:協議

$port:協議端口

(2)基於FWM定義集羣服務:

~]#ipvsadm -A -f # -s scheduler

  3.實例演示

[root@localhost~]# iptables -t mangle -A PREROUTING -d 172.16.50.50 -p tcp --dport 80 -j MARK--set-mark 5

[root@localhost~]# ipvsadm -A -f 5 -s rr

[root@localhost~]# ipvsadm -a -f 5 -r 172.16.200.10 -g

[root@localhost~]# ipvsadm -a -f 5 -r 172.16.200.11 -g

wKioL1auNzqgLzSvAACERDj7aaM665.png

 

 

 

 

8、LVS持久鏈接功能lvs persistence

 1.lvs persistence功能

        不管ipvs使用何種scheduler,其都可以實如今指定時間範圍內始終未來自同一個ip地址的請求發往同一個RS;實現方式和lvs調度的十種算法無關,經過lvs持久鏈接模板(hash)實現,當超過自定義的可持節鏈接時長候再根據LVS算法自己進行調度。

        ipvsadm命令中-p選項實現,在-p後不指定具體數字(單位:),默認爲300,到時候會自動延長2分鐘,對於web自己就是15

 

  2.模式

   (1)每端持久(PPC)

            客戶端對同一服務端口發起請求,會基於該服務的端口實現請求在一段時間內對同一RS服務器持久鏈接;

         例如:有兩臺主機作爲RS服務器作httphssh的兩種服務的集羣,僅http作每端口持久,Client請求會實現綁定在,可是22號端口請求不會綁定在同一臺RS

   (2)每客戶端持久(PCC):定義tcp或udp協議的0號端口爲集羣服務端口

              director會將用戶的任何請求都識別爲集羣服務,並向RS進行調度;同一客戶端的請求任何端口都發往同一臺第一次選定的RS服務器

   (3)防火牆標記持久(PFWMC)

           將兩個或兩個以上服務經過防火牆打標綁定在一塊兒,這些服務的請求實現同時定向與同一臺RS服務器,服務綁定同一RS

   實例:

      lvs-dr模式下以rr算法綁定httphttps服務

~]#iptables -t mangle -A PREROUTING -d 172.16.100.9 -p tcp --dport 80 -j MARK--set-mark 99

~]#iptables -t mangle -A PREROUTING -d 172.16.100.9 -p tcp --dport 443 -j MARK--set-mark 99

~]#ipvsadm -A -f 99 -s rr -p

~]#ipvsadm -a -f 99 -r 172.16.100.68 -g

~]#ipvsadm -a -f 99 -r 172.16.100.69 -g

     



附錄:LVS-DR類型RS腳本示例

#!/bin/bash

#

vip=172.16.50.50

interface="lo:0"

case$1 in

start)

echo1 > /proc/sys/net/ipv4/conf/all/arp_ignore

echo1 > /proc/sys/net/ipv4/conf/lo/arp_ignore

echo2 > /proc/sys/net/ipv4/conf/all/arp_announce

echo2 > /proc/sys/net/ipv4/conf/lo/arp_announce

ifconfig$interface $vip broadcast $vip netmask 255.255.255.255 up

routeadd -host $vip dev $interface

;;

stop)

echo0 > /proc/sys/net/ipv4/conf/all/arp_ignore

echo0 > /proc/sys/net/ipv4/conf/lo/arp_ignore

echo0 > /proc/sys/net/ipv4/conf/all/arp_announce

echo0 > /proc/sys/net/ipv4/conf/lo/arp_announce

ifconfig$interface down

;;

status)

ififconfig lo:0 |grep $vip &> /dev/null; then

echo"ipvs is running."

else

echo"ipvs is stopped."

fi

;;

*)

echo"Usage: `basename $0` {start|stop|status}"

exit1

esac

相關文章
相關標籤/搜索