LVS實際操作與調度方法

LVS概念、類型、調度方法、命令操作與實際配置

字數2134 閱讀4 評論0 

LVS實際操作與調度方法

LVS

(一)LVS概念

LVS( Linux Virtual Server)是一種負載均衡(LB,Laod Balance)技術,采用IP負載均衡技術和基于內容請求分發技術。具有很好的吞吐率,將請求均衡地轉移到不同的服務器上執行。LVS是一套組件(ipvs與ipvsadm),類似與iptables,ipvs相當于netfilter,是能將用戶請求轉發的框架,需要依賴以規則完成轉發,工作于內核中的INPUT鏈上,并依賴于規則進行轉發,而ipvsadm是用來定義規則的工具。LVS工作在TCP/UDP協議的四層,能根據用戶請求的IP與PROT進行轉發,即LVS能實現四層交換、四層路由。

LVS組成
Director:負載均衡器
RS:服務器池(RealServer)
CIP:客戶端IP(Client IP)
VIP: Client所請求的,提供虛擬服務的IP,可以用Keepalive做高可用
DIP:在Director實現與RS通信的IP
RIP:RealServer IP


(二)LVS類型

LVS類型有四種:NAT、DR、TUN、FULLNAT

2.1 LVS/NAT

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

模型:

LVS實際操作與調度方法

NAT

LVS NAT的特性
1.RS應該使用私有地址
2.RS的網關必須指向DIP
3.RIP和DIP必須在同一網段內
4.請求和響應的報文都得經過Director,在高負載場景中,Director很可能成為性能瓶頸
5.支持端口映射
6.RS可以使用任意支持集群服務的OS

2.2 LVS/DR

通過為請求報文重新封裝一個MAC首部進行轉發,源MAC是DIP所在的接口的MAC,目標MAC是某挑選出的RS的RIP所在接口的MAC地址;源IP/PORT,以及目標IP/PORT均保持不變,請求報文經過Dirctor但響應報文不再經過Dirctor

模型

LVS實際操作與調度方法

DR

LVS實際操作與調度方法

IP說明

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通告及應答級別:

arp_announce 定義arp通告級別
arp_ignore 定義arp應答級別

Linux kernel從2.4.26與2.6.4以后引入了兩個設備標識,即上面提到的arp_announce arp_ignore來調整arp模式
arp_announce:0:默認的,通告時告之本機所使用的所有地址、配置、接口1: 盡量只通告接入的網絡一端的接口地址(不絕對保證)2: 必需避免向非本機網絡通告    # DR模式需要   地址/proc/sys/net/ipv4/conf/enoXXX/arp_announcearp_ingore: 
0: 默認的,響應本機接口上配置的所有的目標IP地址1:  只響應入棧報文的那個接口     # DR模式需要  地址同上描述

LVS DR類型的特性
1.RS可以使用私有地址,也可以使用公網地址,此時可以直接通過互聯網連入RS,以實現配置、監控等
2.RS的網關一定不能指向DIP
3.RS跟Dirctory要在同一物理網絡內(不能有路由器分隔)
4.請求報文必須經過Dirctory,但響應報文不能經過Director而是由RS直接發往Client以釋放Directory的壓力。
5.不支持端口映射(因為響應報文不經過Drictor)
6.RS可以使用大多數的操作系統
7.Dirctor的VIP對外可見,RS的VIP對外不可見

2.3 LVS/TUN

模型:

LVS實際操作與調度方法

TUN

TUN類型工作流程

LVS TUN類型特性
1.RIP,DIP,VIP都得是公網地址
2.RS的網關不會指向也不可能指向DIP
3.請求報文經過Directory,但響應報文一定不經過Director
4.不支持端口映射
5.RS的OS必須得支持隧道功能 ??

2.4 LVS/FULLNAT (LVS默認不支持此類型)

通過同時修改請求報文的源IP地址和目標IP地址進行轉發
CIP–>DIP
VIP–>RIP

特點

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

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

  3. 請求和響應報文都經由Dirctor

  4. 支持端口映射.


(三)LVS調度方法(Scheduler)

LVS的調度方法分為兩類(靜態算法、動態算法),共10種

靜態方法:僅根據算法本身進行調度(注重起點公平)
① rr:Round Robin 輪詢,按順序輪流分配到集群中的RS服務器上,不支持權重。
② wrr:Weighted RR 權重輪詢,根據RS的不同處理能力來調度訪問請求??杀WC處理能力強的服務器能處理更多的訪問流量。

③ sh:source hashing 源地址hash,對請求的客戶端IP進行hash計算,可實現session綁定,但可能會破壞負載均衡。Director在本地維護一張hash表,此表保存有每一個源IP及其第一次調度哪一個Server,每一條記錄都有默認時長。
④ dh:destination hashing 目標地址hash,請求的目標IP地址,作為散列鍵(Hash Key)從靜態分配的散列表找出對應的服務器,若該服務器是可用的且未超載,將請求發送到該服務器,否則返回空。Director在本地維護一張散列表,此表保存有每一次請求的目標IP及其對應調度的目標服務器(RS) 。將發往同一個目標地址的請求始終轉發至第一次挑中的RS。

動態方法:根據算法及RS當前的負載狀態(注重結果公平)
⑤ lc:Least Connection 最少連接,計算當前的負載Overhead=Active*256+Inactive來實現,采用計算值最小的RS,不支持權重。

⑥ wlc: Weighted LC 權重最少連接,具有較高權重的服務器將承受較大比例的活動連接負載計算方法:Overhead=(Active*256+Inactive)/weight

⑦ sed:Shortest Expect Delay 最短期望延遲,wlc的改進算法,先選擇權重較大的服務器計算方法:Overhead=(Active+1)*256/weight

⑧ nq:Nerver Queus: sed算法的改進,永不排隊
⑨ lblc:Locality-based least connection 基于本地的最少連接,相當于dh+lc
⑩ lblcr:基于復制的基于本地的最少連接 Replicated and Locality-based least connection


(四)ipvsadm命令

grep -i -C "ipvs" /boot/config-3.10.0-327.el7.x86_64查看ipvs支持的協議與調度方法

① 對集群的操作

  1. 首先要確定好需要使用哪種拓撲類型(NAT DR TUN)的集群

-A -t|u|f  service-address [-s scheduler] [-p [timeout]]
    -A:添加一個集群服務     # Add
    -E:修改一個集群服務     # Edit
    -D:刪除集群服務        # Delete    ipvsadm -D -t 10.1.0.5:80
    -t:tcp協議服務
    -u:udp協議服務
    -f:firewall make通常應用于將兩個或以上的服務綁定為一個服務進行處理時使用  
        示例:ipvsadm -A -f 11 -s wrr     
        # 這個11為通過iptables xxxx -j MARK --set-mark 11 得到

    service-address   # 即LVS服務器的IP地址加之前選項指明的協議類型端口
        -t IP:port   # tcp協議
        -u ip:port   # udp協議
        -f firewall_mark  # 后接一個標記數字,將多個端口組織成一個集群進行統一調度

    -s 調度算法,默認為wlc
    -p: persistence     # LVS的持久連接功能,沒有接數字則默認為300秒

② 對RS的操作

-a -t|u|f service-address -r server-address -[g|i|m] [-w weight]  # LVS的類型在這里定義
    -a:添加RS    -e:修改    -d:刪除
    -r: 后接 RS的ip[:port]
    -g:gateway,  DR默認DR模型
    -m:masquerade, NAT模型
    -i:ipip, TUN模型
    -w:權重

③ 查看、清空、保存、導入規則

-L|l:顯示規則
    -n, --numeric: 不反解析IP地址和端口,數值格式顯示主機地址和端口號
    --exact: 顯示精確值
    --stats: 統計數據
    --rate: 速率
    --timeout: 顯示tcp、tcpfin和udp的會話超時時長
    --sort: 顯示當前的ipvs連接狀況
    -c, --connection: 查看連接數清空規則
    ipvsadm -C     # Clear
保存規則(一般都保存在/etc/sysconfig/ipvsadm)
    * service ipvsadm save 
    * ipvsadm -S 重定向至其他文件中 
    * ipvsadm-save 重定向到標準輸出
    * systemctl stop ipvsadm.service   # 停止時會自動保存
導入規則
    ipvsadm -R < /save_file

(五)LVS實際配置

5.1 配置一個NAT類型(2臺RS)的集群

LVS: if1=10.1.252.206 if2=172.16.50.129/24
RS1: 172.16.50.130/24
RS2: 172.16.50.131/24

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

(2)
sjfbjssjfbjs
上一篇 2016-10-30 21:02
下一篇 2016-10-30 21:02

相關推薦

  • N26第四周博客作業

    1、復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其它用戶均沒有任何訪問權限cp -r /etc/skel /home/tuser1chmod -R go= /home/tuser1 2、編輯/etc/group文件,添加組hadoop。echo “hadoop:x:2020:”…

    Linux干貨 2017-02-27
  • 進程管理

    進程概念 內核的功用:進程管理、文件系統、網絡功能、內存管理、驅動程序、安全功能等 Process(進程):運行中的程序的一個副本,是被載入內存的一個指令集合 進程ID (Process ID ,PID )號碼被用來標記各個進程 UID、GID、和SELinux語境決定對文件系統的存取和訪問權限 通常從執行進程的用戶來繼承 存在生命周期 task struc…

    2017-05-09
  • 高級變量-有類型變量

    一.高級變量用法– 有類型變量   Shell 變量一般是無類型的,但是bash Shell 提供了declare和 typeset 兩個命令用于指定變量的類型,兩個命令是等價的 declare [ 選項]  變量名 -r  將變量設置為只讀屬性 -i  將變量定義為整型數 -a  將變量定義為數…

    Linux干貨 2016-11-24
  • 系統之鍬sysdig:Linux服務器監控和排障利器

    當你需要追蹤某個進程產生和接收的系統調用時,首先浮現在你腦海中的是什么?你可能會想到strace,那么你是對的。你會使用什么樣的命令行工具來監控原始網絡通信呢?如果你想到了tcpdump,你又作出了一個極佳的選擇。而如果你碰到必須追蹤打開的文件(在Unix意義上:一切皆文件)的需求,可能你會使用lsof。 strace、tcpdump以及lsof,確實是些偉…

    Linux干貨 2015-02-09
  • shell基礎if與case

    1.read   使用read來把輸入值分配給一個或多個shell變量;   -p 指定要顯示的提示;例如 read -p "SHURU" num   -t TIMEOUT   read 從標準輸入中讀取值,給每個單詞分配一個變量,所有剩余單詞都被分配給最后一個變量 2.流程控制   過程…

    Linux干貨 2016-08-18
  • 第十周

    1、請詳細描述CentOS系統的啟動流程(詳細到每個過程系統做了哪些事情) 1.POST 開機加電自檢,對計算機的cpu,硬盤,內存等進行檢測。 2.BIOS 對引導程序進行探測,并把控制權交給引導程序。 3.MBR Master bootloader record主引導程序.通常位于硬盤第一扇區/dev/hda(0,0)或/dev/sda(0,0). 此階…

    Linux干貨 2017-03-30
欧美性久久久久