lvs的基本概念及基礎配置

一、知識整理

1、Session:在計算機中,尤其是在網絡應用中,稱為“會話控制、時域”。Session 對象存儲特定用戶會話所需的屬性及配置信息。這樣,當用戶在應用程序的 Web 頁之間跳轉時,存儲在 Session 對象中的變量將不會丟失,而是在整個用戶會話中一直存在下去。當用戶請求來自應用程序的 Web 頁時,如果該用戶還沒有會話,則 Web 服務器將自動創建一個 Session 對象。當會話過期或被放棄后,服務器將終止該會話。注意會話狀態僅在支持 cookie 的瀏覽器中保留。

2、站點指標:

PVpage view:頁面的瀏覽次數,衡量網站用戶訪問的網頁數量,打開一個頁面記錄一次,刷新累計;

UVunique vistor:一天內訪問某站點的人數,以cookie為依據;

IP:同一個IP的訪問算作一次;同一IP不管訪問了幾個頁面,獨立IP數都為1;

VV:記錄所有訪客1天內訪問了多少次網站;

3LVS的類型:

NAT 地址轉換

集群節點與director必須在同一IP網絡中

RIP通常都是私有地址,僅用于集群節點之間通信

director位于clientreal server之間,并負責處理進出的所有通信

realsever必須將網關指向dip

支持端口映射,可修改請求報文的目標PORT

realsever可以使用任何類型的操作系統,vslinux系統;

較大規模應用場景中,一個單獨的director易成為系統瓶頸

blob.png

DR  直接路由

VIP僅用于作為源地址

修改mac地址通信

集群節點與director必須在同一物理網絡中(mac地址通信)

RIP可以使用公網地址,實現便捷的遠程管理和監控

realsever不能將網關指向DIP,而應直接使用前端網關

不支持端口映射

realsever隱藏了vip,但在發送響應報文時還可以當源IPlo別名配置VIP,修改內核參數,使IP屬于網卡,限制響應模型和通知模型 arp_announce arp_ignore。

RSRIP可以使用私網地址,也可以是公網地址;RIPDIP在同一個網絡;

RSDirector要在同一個物理網絡;

請求報文要經由Director,但響應不能經由Director,而是由RS直接發往client;

NAT處理更多的realserver

blob.png

TUN 隧道

轉發時不修改請求報文的IP首部(CIP VIP),而在源IP報文之外再封裝ip一個首部,借助第一層封裝發送第二層ip報文,要求支持隧道機制(IP-IP)。

集群節點可以跨越互聯網

DIP,VIP,RIP都應該是公網地址

director僅負責處理入站請求,響應報文則由realsever直接發往客戶端

只有支持隧道功能的os才能用于realsever

不支持端口映射;

realsever網關不能指向director,以確保響應報文不會經由Director;,請求報文要經由Director;

blob.png

FULLNAT

同時修改請求報文的源IP地址和目標IP地址進行轉發;

CIP–DIP

VIP–RIP

VIP是公網地址,RIPDIP是私網地址,且通常不在同一IP網絡;因此RIP的網關一般不會指向DIP

RS收到的請求報文源地址是DIP,因此只需要響應給DIP,但Director還要將其發往client;

請求和響應報文都經由Director;

支持端口映射;

此類型默認不支持;(淘寶專用內核補丁)

blob.png

4、正常情況下,如果我們定義了兩個集群:

[root@localhost ~]# ipvsadm -ln 
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flag
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  10.1.49.49:80 w
  -> 10.1.49.10:80                Route   1      0          0         
  -> 10.1.252.28:80               Route   1      0          0  
TCP  10.1.49.49:3306 r
  -> 10.1.49.10:3306              Route   1      0          0         
  -> 10.1.252.28:3306             Route   1      0          0

那么在測試時,我們會發現他們是相互獨立的,也就是說我們在訪問一臺服務器的web服務時,有可能連接到另一臺服務的mysql服務,此處是為了演示,實際中會將httphttps合并同時調度。含有test數據庫的是RS1

[root@localhost ~]# mysql -h10.1.49.49 -uroot -pmagedu -e "SHOW DATABASES;"
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| test               |
| ultrax             |
+--------------------+
[root@localhost ~]# curl http://10.1.49.49/index.html
RS1
[root@localhost ~]# mysql -h10.1.49.49 -uroot -pmagedu -e "SHOW DATABASES;"
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| ultrax             |
+--------------------+

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

方法:在director主機上操作:

[root@localhost ~]# iptables -t mangle -A PREROUTING -d 10.1.49.49 -p tcp -m multiport --dports 
80,3306 -j MARK --set-mark 8
[root@localhost ~]# iptables -t mangle  -vnL 
Chain PREROUTING (policy ACCEPT 138 packets, 11526 bytes)
 pkts bytes target     prot opt in     out     source      destination    
 0  0 MARK      tcp  --  *     *    0.0.0.0/0   10.1.49.49     multiport dports 80,3306 MARK set 0
Chain INPUT (policy ACCEPT 138 packets, 11526 bytes)
 pkts bytes target     prot opt in     out     source       destination         
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source     destination         
Chain OUTPUT (policy ACCEPT 43 packets, 4452 bytes)
 pkts bytes target     prot opt in     out     source    destination         
Chain POSTROUTING (policy ACCEPT 43 packets, 4452 bytes)
 pkts bytes target     prot opt in     out     source       destination         
[root@localhost ~]# ipvsadm -A -f 8 -s wrr 
[root@localhost ~]# ipvsadm -a -f 8 -r 10.1.252.28 -g -w 1
[root@localhost ~]# ipvsadm -a -f 8 -r 10.1.49.10 -g -w 1
[root@localhost ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
FWM  8 wrr
  -> 10.1.49.10:0                 Route   1      0          0         
  -> 10.1.252.28:0                Route   1      0          0

測試,可以看出兩個端口是被綁定起來訪問了:

[root@localhost ~]# mysql -h10.1.49.49 -uroot -pmagedu -e "SHOW DATABASES;" ; curl http://10.1.4
9.49/index.html+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| test               |
| ultrax             |
+--------------------+
RS2
[root@localhost ~]# curl http://10.1.49.49/index.html
RS1
[root@localhost ~]# mysql -h10.1.49.49 -uroot -pmagedu -e "SHOW DATABASES;"
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| ultrax             |
+--------------------+

5、基于LVS的持久連接,此方法與算法無關,是LVS的核心層面實現的:

[root@localhost ~]# ipvsadm -A -t 10.1.49.49:80 -s rr -p 20
[root@localhost ~]# ipvsadm -a -t 10.1.49.49:80 -r 10.1.49.10 -g 
[root@localhost ~]# ipvsadm -a -t 10.1.49.49:80 -r 10.1.252.28 -g 
[root@localhost ~]# 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.49.49:80 rr persistent 20
  -> 10.1.49.10:80          Route   1   0    5         
  -> 10.1.252.28:80         Route   1   0     5

測試如下:

[root@localhost ~]# for i in {1..10}; do curl http://10.1.49.49/index.html; done 
RS2
RS2
RS2
RS2
RS2
RS2
RS2
RS2
RS2
RS2

然而我們可以加上端口綁定來實現多種方式:

單端口持久 PPC:每集群服務單獨定義,并定義其持久性。

每防火墻持久:基于防火墻標記定義持久的集群服務;可實現將多個端口上的應用統一調度,即所謂的port affinity(端口的姻親關系)

每客戶端持久:基于0端口定義集群服務,即將客戶端所有應用的請求全部調度至后端主機,而且使用持久連接進行綁定。

第三種方式的方法如下:

[root@localhost ~]# ipvsadm -C 
[root@localhost ~]# ipvsadm -A -t 10.1.49.49:0 -s rr -p 
[root@localhost ~]# ipvsadm -a -t 10.1.49.49:0 -r 10.1.49.10 -g 
[root@localhost ~]# ipvsadm -a -t 10.1.49.49:0 -r 10.1.252.28 -g 
[root@localhost ~]# 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.49.49:0 rr persistent 360
  -> 10.1.49.10:0     Route   1      0      0         
  -> 10.1.252.28:0    Route   1      0       0

6、保存及重載規則:

保存:建議保存至/etc/sysconfig/ipvsadm

ipvsadm-save >

ipvsadm -S >

systemctl stop ipvsadm.service

重載:ipvsadm-restore <

ipvsadm -R <

systemctl restart ipvsadm.service

停止服務和啟動服務時候或者直接重啟服務的時候,會自動保存及加載此文件中的規則。

[root@localhost ~]# ipvsadm-save > /etc/sysconfig/ipvsadm
[root@localhost ~]# ipvsadm -C 
[root@localhost ~]# ipvsadm-restore <  /etc/sysconfig/ipvsadm
[root@localhost ~]# 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.49.49:0 rr persistent 360
  -> 10.1.49.10:0                 Route   1      0          0         
  -> 10.1.252.28:0                Route   1      0          0


二、命令詳解及事例

1、ipvsadm命令:

保存規則

-S    ipvsadm -S > /path/file

ipvsadm-save

載入之前的規則

-R    ipvsadm -R < /PATH/FILE

ipvsadm-restore

刪除所有集群服務

-C 清空ipvs規則

查看:

-L|l

    -n 數字格式顯示主機地址和端口

    –exactexpand numbers(display exact values)

    –state 統計數據

    –rate

    每秒連接數:CPS

    –timeout 顯示tcp tcpfinudp的會話超時時長

    –daemon

    –sort realsever做排序,默認升序

    -c 顯示當前的ipvs連接狀況

管理集群服務

添加 -A|E -t|u|f service-address [-s scehduler]

    ipvsadm -A -t 172.16.100.1:80 -s rr

    -t tcp協議的集群   vip:port

    -u udp協議的集群

    service-addressip:port

    -f fwm防火墻標記

    service-address:mark number

將不同的端口的規則設置為同一個number,可以統一調度;

[-s scehduler] 調度算法

修改 -E

刪除 -D

     -D -t|u|f service-address

管理集群服務中的RS realsever

添加

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

    service-address :事先定義好的某集群服務

-r server-address

rs的地址,在nat模型中,可使用ipport實現端口映射    

[-g|i|m] LVS類型

   ggateway,dr類型,默認類型;

   iipip,tun類型

   mmasquerade,nat類型

[-w weight] 定義服務器權重

    默認是1

    修改 -e

    刪除 -d

2、調度算法:

固定調度:靜態調度:不考慮服務器上活動鏈接和非活動鏈接

rr:輪詢,輪調,輪叫

wrrweight,加權輪詢

shsource hash:源地址hash

    隨機分配,但是將相同IP地址的請求始終發送到同一個realserver。

    session affinity:持續用一個session,“購物車中的商品不會丟失”

dhdestination hashing

    把發往同一個目標地址的請求始終轉發至第一次挑中的R Server,以目標地址為標準進行挑選。sh類似,但適合的場景不同。

動態調度:

LCleast connection 最少連接

    計算當前后端活動鏈接數 overhead=active*256+inactive

        給數目較小的發送鏈接

wlc(默認方法):加權最少連接 weighted LC

    (active*256+inactive/weight

sed:shortest expection delay最短期望延遲

    (activeconns+1*256/weight

nqnever queue

    每個服務器最少一個連接;

LBLC:基于本地的最少連接locality-based LC

    DH的改進,考慮cache的連接數,動態的DH算法;

LBLCRLBLC with Replication,基于本地的帶復制功能的最少連接

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

(0)
SilencePavilionSilencePavilion
上一篇 2016-11-11
下一篇 2016-11-11

相關推薦

  • N26-第九周

    1、寫一個腳本,判斷當前系統上所有用戶的shell是否為可登錄shell(即用戶的shell不是/sbin/nologin);分別這兩類用戶的個數;通過字符串比較來實現; #!/bin/bash # # # NUM1=0 NUM2=0 for i in `cut -d: -f7 /etc/passwd` ;do if [[ “$i” = ‘/bin/bash…

    Linux干貨 2017-03-15
  • Linux計劃任務

    計劃任務 工作當中有時候需要將某件事情在未來的某個特定的時間執行,而自己確不在機器旁,該如何是好?像這樣在每天特定的時間內去安排做一些事情這樣,一種事情我們就稱之為例行性的計劃任務,其實在我們的操作系統當中都有類似的例行性任務計劃功能,那如何去像設定鬧鐘一種在Linux上指定例行性計劃任務并實施,主要有兩種工具:at和crontab   計劃任務分…

    Linux干貨 2016-09-19
  • Linux 第十天: Linux文件查找和壓縮

      Linux 第十天: Linux文件查找和壓縮                     使用Linux的時候, 經常需要查找文件, 在Linux中, 有很多方法可以做到這一點.…

    Linux干貨 2016-08-18
  • 馬哥教育網絡班21期-第十周課程練習

    1、請詳細描述CentOS系統的啟動流程(詳細到每個過程系統做了哪些事情)  a,post:加電自檢,通電搜索并檢查物理設備的狀態  b,bootsequeence(BIOS):選擇啟動順序  c,bootloader(MBR):加載主引導程序 bootloader,硬盤分區表到內存  d,加載內核kernel &nb…

    Linux干貨 2016-10-24
  • 網卡別名和bonding——讓你的網絡接口更加穩定

    網卡配置文件: 1、IP/NETMASK/GW/DNS等屬性的配置文件:/etc/sysconfig/network-scripts/ifcfg-IFACE     IFACE:接口名稱 2、路由的相關配置文件(默認無此文件):/etc/sysconfig/network-scripts/route-IFACE 3、配置文件/etc/sy…

    Linux干貨 2016-09-05
  • Shell運算符

    Bash 支持很多運算符,包括算數運算符、關系運算符、布爾運算符、字符串運算符和文件測試運算符。 原生bash不支持簡單的數學運算,但是可以通過其他命令來實現,例如 awk 和 expr,expr 最常用。 expr 是一款表達式計算工具,使用它能完成表達式的求值操作。 例如,兩個數相加: #!/bin/bash val=`expr 2 + 2` echo …

    Linux干貨 2017-04-18
欧美性久久久久