1. 程式人生 > >構建負載均衡伺服器之二 LVS詳解及應用

構建負載均衡伺服器之二 LVS詳解及應用

在上一篇中介紹了負載均衡及叢集的原理,本篇主要介紹下下實現負載均衡的軟體之LVS的原理及應用。

一、LVS的介紹

1、  LVS的定義

一般來說,LVS採用三層結構:負載排程器、伺服器池、共享儲存。工作在TCP/IP協議的四層,其轉發是依賴於四層協議的特徵進行轉發的,由於其轉發要依賴於協議的特徵進行轉發,因此需要在核心的TCP/IP協議棧進行過濾篩選,可想而知,這就需要在核心的模組來完成,而這樣的過濾轉發規則又是由管理員進行定義的,所以,LVS就是兩段式的架構設計,在核心空間中工作的是”ipvs”,而在使用者空間中工作的,用來定義叢集服務規則的是”ipvsadm”。這就很容易想到iptables而LVS正好工作在iptables的input鏈上。

2、  LVS的組成

ipvsadm:用於管理叢集服務的命令列工具,工作於Linux系統中的使用者空間。

ipvs:為lvs提供服務的核心模組,工作於核心空間 (相對於是框架,通過ipvsadm新增規則,來實現ipvs功能)。

注:在linux核心2.4.23之前的核心中模組預設是不存在的,需要自己手動打補丁,然後把此模組編譯進核心才可以使用此功能。

3、  LVS中每個主機IP地址的定義

VIP:Director用來向客戶端提供服務的IP地址,也是DNS解析的IP

RIP:叢集節點(後臺真正提供服務的伺服器)所使用的IP地址

DIP:Director用來和RIP進行互動的IP地址

CIP:公網IP,客戶端使用的IP

4、  LVS的三種轉發模式

LVS-NAT:網路地址轉換 NetworkAddress Translation

LVS-DR:直接路由 Direct Routing

LVS-TUN:IP隧道 IP Tunneling

5、  LVS的三種轉發模式特點

NAT

a、  叢集節點跟director必須在同一個網段上面

b、  RIP通常是私有地址,僅用於個叢集

c、  支援口對映

d、  realsever可以使用任意OS(作業系統)

e、  較大規模應用場景中director已成為系統瓶頸

wKioL1VljlHx4-_EAAHz5UrkKy4793.jpg

DR:

a、叢集節點跟director必須在同一個物理網路中

b、RIP可以使用公網地址.實現便捷的遠端控制伺服器

c、director只負責處理入站請求,相應報文則有realserver直接發往客戶端

d、realserver不能將閘道器指向DIP

e、director不支援埠對映

f、大多數作業系統都能應用在realserver上

g、DR比NAT能處理更多的realserver

wKioL1VlkBvigNtLAAI2zqAH7C4417.jpg

TUN:

a、各叢集節點可以跨越不同的網路

b、RIP必須是公網地址

c、director只負責處理入站請求,相應報文則有realserver直接發往客戶端

d、realserver網管不能指向director

e、只有支援隧道共跟那個的os才能使用者realserver

不支援埠對映

注:在實際應用中用的不多這裡就不再具體演示!

wKiom1Vljr2SMG_QAAI2zqAH7C4164.jpg

1、  LVS的排程演算法

靜態排程演算法(4種):

(1)rr : round robin :輪叫,輪詢  

說明:輪詢排程演算法的原理是每一次把來自使用者的請求輪流分配給內部中的伺服器,從1開始,直到N(內部伺服器個數),然後重新開始迴圈。演算法的優點是其簡潔性,它無需記錄當前所有連線的狀態,所以它是一種無狀態排程。缺點:是不考慮每臺伺服器的處理能力。

(2)wrr: weight round robin :加權輪詢(以權重之間的比例實現在各主機之間進行排程)  

說明:由於每臺伺服器的配置、安裝的業務應用等不同,其處理能力會不一樣。所以,我們根據伺服器的不同處理能力,給每個伺服器分配不同的權值,使其能夠接受相應權值數的服務請求。

(3)sh : source hashing : 源地址hash 實現會話繫結sessionaffinity  

說明:簡單的說就是有將同一客戶端的請求發給同一個real server,源地址雜湊排程演算法正好與目標地址雜湊排程演算法相反,它根據請求的源IP地址,作為雜湊鍵(Hash Key)從靜態分配的散列表找出對應的伺服器,若該伺服器是可用的並且沒有超負荷,將請求傳送到該伺服器,否則返回空。它採用的雜湊函式與目標地址雜湊排程演算法的相同。它的演算法流程與目標地址雜湊排程演算法的基本相似,除了將請求的目標IP地址換成請求的源IP地址。

(4)dh : destination hashing : 目標地址hash  

說明:將同樣的請求傳送給同一個server,一般使用者於快取伺服器說,簡單的說,LB集群后面又加了一層,在LB與real server之間加了一層快取伺服器,當一個客戶端請求一個頁面時,LB發給cache1,當第二個客戶端請求同樣的頁面時,LB還是發給cache1,這就是我們所說的,將同樣的請求發給同一個server,來提高快取的命中率。目標地址雜湊排程演算法也是針對目標IP地址的負載均衡,它是一種靜態對映演算法,通過一個雜湊(Hash)函式將一個目標IP地址對映到一臺伺服器。目標地址雜湊排程演算法先根據請求的目標IP地址,作為雜湊鍵(Hash Key)從靜態分配的散列表找出對應的伺服器,若該伺服器是可用的且未超載,將請求傳送到該伺服器,否則返回空。

動態排程演算法(6種):

(1)lc :leash-connection 最少連線 

說明:最少連線排程演算法是把新的連線請求分配到當前連線數最小的伺服器,最小連線排程是一種動態排程短演算法,它通過伺服器當前所活躍的連線數來估計伺服器的負載均衡,排程器需要記錄各個伺服器已建立連線的數目,當一個請求被排程到某臺伺服器,其連線數加1,當連線中止或超時,其連線數減一,在系統實現時,我們也引入當伺服器的權值為0時,表示該伺服器不可用而不被排程。此演算法忽略了伺服器的效能問題,有的伺服器效能好,有的伺服器效能差,通過加權重來區分效能,所以有了下面演算法wlc。

簡單演算法:active*256 inactive (誰的小,挑誰)

(2)wlc :加權最少連線  

加權最小連線排程演算法是最小連線排程的超集,各個伺服器用相應的權值表示其處理效能。伺服器的預設權值為1,系統管理員可以動態地設定伺服器的許可權,加權最小連線排程在排程新連線時儘可能使伺服器的已建立連線數和其權值成比例。由於伺服器的效能不同,我們給效能相對好的伺服器,加大權重,即會接收到更多的請求。

簡單演算法:(active*256 inactive)/weight(誰的小,挑誰)

(3)sed :最少期望延遲  

說明:不考慮非活動連線,誰的權重大,我們優先選擇權重大的伺服器來接收請求,但會出現問題,就是權重比較大的伺服器會很忙,但權重相對較小的伺服器很閒,甚至會接收不到請求,所以便有了下面的演算法nq。

基於wlc演算法,簡單演算法:(active 1)*256/weight (誰的小選誰)

(4).nq :never queue 永不排隊   

說明:在上面我們說明了,由於某臺伺服器的權重較小,比較空閒,甚至接收不到請求,而權重大的伺服器會很忙,所此演算法是sed改進,就是說不管你的權重多大都會被分配到請求。簡單說,無需佇列,如果有臺real server的連線數為0就直接分配過去,不需要在進行sed運算。

(5).LBLC :基於區域性性的最少連線  

說明:基於區域性性的最少連線演算法是針對請求報文的目標IP地址的負載均衡排程,主要用於Cache集群系統,因為Cache叢集中客戶請求報文的目標IP地址是變化的,這裡假設任何後端伺服器都可以處理任何請求,演算法的設計目標在伺服器的負載基本平衡的情況下,將相同的目標IP地址的請求排程到同一個臺伺服器,來提高伺服器的訪問區域性性和主存Cache命中率,從而調整整個集群系統的處理能力。

(6).LBLCR :基於區域性性的帶複製功能的最少連線   

說明:基於區域性性的帶複製功能的最少連線排程演算法也是針對目標IP地址的負載均衡,該演算法根據請求的目標IP地址找出該目標IP地址對應的伺服器組,按“最小連線”原則從伺服器組中選出一臺伺服器,若伺服器沒有超載,將請求傳送到該伺服器;若伺服器超載,則按“最小連線”原則從這個叢集中選出一臺伺服器,將該伺服器加入到伺服器組中,將請求傳送到該伺服器。同時,當該伺服器組有一段時間沒有被修改,將最忙的伺服器從伺服器組中刪除,以降低複製的程度。

注:LVS預設排程演算法是 wlc 。

2、  定義叢集服務規則的ipvsadm命令

(1)、管理叢集服務   

ipvsadm –A|E|D  -t |u|f server-adddress [-s scheduler] 

-t :tcp協議的叢集         service-address後面必須寫成ip:port 

-u :udp協議的叢集        service-address後面必須寫成ip:port 

-f :fwm 防火牆的標記     service-address後面必須寫成marknumber 

-s :指定除錯演算法       

-A新增 –E 修改 –D刪除

(2)、管理叢集服務中的realserver

ipvsadm –a|e|d  -t|u|f server-adddress -r server-address  [-g|i|m]  [-w weight] 

 -t|u|f service-address 實現定義好的某叢集服務 

 -rserver-address 某rs的地址在nat模型中可使用ip:port實現埠對映 

 [-g|i|m] lvs型別: 

 -g :DR   -i : TUN -m : NAT   [-w weight] 指定權重

 -a新增  -e修改 –d刪除

(3)、檢視

ipvsadm -L | ipvsadm  -l ….

-n        顯示主機地址和埠為數字格式 

–stats     顯示進出站資料 

–rate      顯示速率 

–timeout  顯示每一個tcp  tcpfin udp 的超時時間值 

–deamon  顯示程序資訊 

–sort     顯示排序規則預設是升序的 

-c        顯示多少個客戶連線進來

(4)、刪除所有叢集服務:  

清空ipvs規則    

ipvsadm –C

(5).儲存定義的規則: 

service ipvsadm save 

ipvsadm -S    > /path/to/somefile

(6).載入此前的規則 

ipvsadm -R 

ipvsadm -R < /path/to/somefile

二、LVS-NAT模式演示

簡單實驗拓撲如下:

wKiom1VhpH6SpWSOAAHJ_M2bq7I129.jpg

Web Server 1測試頁

wKioL1VhpeyBMnOUAABfvrEid30516.jpg

Web Server 2測試頁

wKiom1VhpGDQMQHWAABfgfbVpZI040.jpg

lvs主機上的操作:

1 2 3 4 5 6 [root@lvs ~] # yum -y install kernel-devel  popt-static gcc libnl* libpopt* (請根據實際情況安裝) [root@lvs ~] # ln -s/usr/src/kernels/2.6.32-431.el6.x86_64/ /usr/src/linux [root@lvs ~] # wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24.tar.gz [root@lvs ~] # tar -zxf ipvsadm-1.24.tar.gz [root@lvs ~] # cd ipvsadm-1.24 [root@lvs ipvsadm-1.24] # make &amp;&amp;make install

開啟ip轉發

1 2 3 [root@lvs ~] # vim /etc/sysctl.conf 把net.ipv4.ip_forward = 0改為net.ipv4.ip_forward= 1 [root@lvs ~] # sysctl –p

配置lvs-nat模型

1 2 3 4 5 6 7 8 9 10 11 [root@lvs ~] # ipvsadm --t192.168.2.200:80 -s rr [root@lvs ~] # ipvsadm --t192.168.2.200:80 -r 192.168.1.10 --w 3 [root@lvs ~] # ipvsadm --t192.168.2.200:80 -r 192.168.1.20 --w 1 [root@lvs ~] # ipvsadm -Ln IP Virtual Server version 1.2.(size=4096) Prot LocalAddress:Port Scheduler Flags -&gt; RemoteAddress:Port          Forward Weight ActiveConn InActConn TCP 192.168.2.200:80 rr -&gt; 192.168.1.20:80             Masq    1      0         0         -&gt; 192.168.1.10:80             Masq    3      0         0         [root@lvs ~] #

儲存lvs規則

1 2 3 4 5 6 7 [root@lvs ~] # /etc/init.d/ipvsadm save Saving IPVS table to /etc/sysconfig/ipvsadm :               [確定] [root@lvs ~] # cat /etc/sysconfig/ipvsadm --t 192.168.2.200:80 -s rr --t 192.168.2.200:80 -r 192.168.1.20:80--w 1 --t 192.168.2.200:80 -r 192.168.1.10:80--w 3 [root@lvs ~] #

通過VIP訪問

wKioL1VhpliTRtf0AABj2FP2-TU936.jpg

重新整理(由於設定的權重一樣,所以刷一下會變一下。)

wKiom1VhpM2znUc9AABpsnVw8Bw445.jpg

三、LVS-DR 模式演示

wKioL1VlkGXiezlLAAI2zqAH7C4302.jpg

1、  IP規則

Director:

eth0 192.168.1.100 DIP

eth0:0 192.168.1.188 VIP

RS1:

eth0: 192.168.1.10 RIP

lo0:0 192.168.1.188 VIP

RS2:

eth0: 192.168.1.20 RIP

lo0:0 192.168.1.188 VIP

2、關閉arp響應

web1上:

1 2 3 4 5 6 [root@web1 ~] # sysctl -w net.ipv4.conf.eth0.arp_announce=2 net.ipv4.conf.eth0.arp_announce = 2 [root@web1 ~] # sysctl -w net.ipv4.conf.all.arp_announce=2 net.ipv4.conf.all.arp_announce = 2 [root@web1 ~] # echo 1 &gt;/proc/sys/net/ipv4/conf/eth0/arp_ignore [root@web1 ~] # echo 1 &gt;/proc/sys/net/ipv4/conf/all/arp_ignore

web2上:

1 2 3 4 5 6 [root@web2 ~] # sysctl -w net.ipv4.conf.eth0.arp_announce=2 net.ipv4.conf.eth0.arp_announce = 2 [root@web2 ~] # sysctl -w net.ipv4.conf.all.arp_announce=2 net.ipv4.conf.all.arp_announce = 2 [root@web2 ~] # echo 1 &gt;/proc/sys/net/ipv4/conf/eth0/arp_ignore

相關推薦

構建負載均衡伺服器 LVS應用

在上一篇中介紹了負載均衡及叢集的原理,本篇主要介紹下下實現負載均衡的軟體之LVS的原理及應用。 一、LVS的介紹 1、  LVS的定義 一般來說,LVS採用三層結構:負載排程器、伺服器池、共享儲存。工作在TCP/IP協議的四層,其轉發是依賴於四層協議的特徵進行轉發的,由於其轉發要依賴於協議的特徵進行轉

Nginx/LVS/HAProxy負載均衡軟件的優缺點

pro 做到 提交 處理 流行 pin 測試 技術分享 一是 參考鏈接:http://www.ha97.com/5646.html (總結)Nginx/LVS/HAProxy負載均衡軟件的優缺點詳解 PS:Nginx/LVS/HAProxy是目前使用最廣泛的三種負載均衡軟件

(總結)Nginx/LVS/HAProxy負載均衡軟件的優缺點

ip_hash 不同的 應用服務 uid 目前 規則 alived 利用 edi PS:Nginx/LVS/HAProxy是目前使用最廣泛的三種負載均衡軟件,本人都在多個項目中實施過,參考了一些資料,結合自己的一些使用經驗,總結一下。 一般對負載均衡的使用是隨著網站規模的

CDN快取伺服器負載均衡叢集《CDN技術

1. 集群系統 1.1 集群系統分類 伺服器叢集的分類,可以分為三種分別是計算叢集、負載均衡叢集、高可用叢集,下面分析對計算叢集、負載均衡叢集和高可用叢集做以詳細講解。 根據用途的不同,我們把伺服器叢集分為如下幾類。 (1)計算叢集 伺服器計算叢集通常被用於承載

LVS負載均衡-基礎知識全面整理

一. 叢集的概念 伺服器叢集簡稱叢集是一種伺服器系統,它通過一組鬆散整合的伺服器軟體和/或硬體連線起來高度緊密地協作完成計算工作。在某種意義上,他們可以被看作是一臺伺服器。集群系統中的單個伺服器通常稱為節點,通常通過區域網連線,但也有其它的可能連線方式。叢集伺服器通常用來改進單個伺服器的計算速度和/或可靠性

Nginx做負載均衡時session共享問題

壓縮 多臺 nts 獲得 hash 常見 hub img font 用nginx做負載均衡時,同一個IP訪問同一個頁面會被分配到不同的服務器上,如果session不同步的話,就會出現很多問題,比如說最常見的登錄狀態。 再者Nginx連接Memcached集群時,Nignx的

Hibernate Validator 6.0.7.Final Validator和ConstraintViolation)

Validator介面在bean的校驗中扮演非常重要的角色。本文將詳細講解該介面。 獲取該介面的方法 ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); validator =

Struts2框架學習 action

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

跨鏈技術ILP應用

區塊鏈;跨鏈;托管;ilp;rippleAbstract:As the booming of BlockChain technology, the requirement of asset transfer between different ledgers is as imperative as possi

kerasImageDataGenerator引數用法例項-01

keras圖片生成器ImageDataGenerator keras.preprocessing.image.ImageDataGenerator(featurewise_center=False,     samplewise_center=False,   &nbs

大資料系列——hive(七、hive應用

目錄 2.HQL 一、HIVE概述 1.Hadoop分散式計算遇到的問題 MapReduce只能用java開發(也支援其他語言,但是不是主流)需要對Hadoop的底層原理 api比較瞭解才能順暢的開發出分散式的處

MapReduceWordCount程式常見錯誤彙總

前言:     在之前的筆記中,我們已經成功的關聯了eclipse和hadoop,對FileSystem的使用進行了簡單瞭解。     下面就是Hadoop中的重點MapReduce程式的開發。作為MapReduce(以下使用MR來代替)開發中的入門程式WordCount

[tensorflow 應用路]Batch Normalization 原理應用方法

批正則化(Batch Normalize,BN)是2015年由Sergey Ioffe提出的方法,用於消除神經網路上一層不同分佈的輸入導致本層引數更新困難。由於各個層的卷積核引數不同,根據反向傳播法則我們知道,∣∣W∣∣||W||∣∣W∣∣及結果∣∣h∣∣||h

四 . css系列選擇器權重

(一)選擇器詳解 1.標籤選擇器(元素選擇器):HTML標籤作為選擇器,作用是選取HTML文件中相同的HTML元素P{} 2.類選擇器 第一步:設定類名<開始標籤 class="類名"></結束標籤> 第二步:為類設定樣式.

Androidviewstub用法實現延遲載入

上一篇的佈局中間就用了viewstub這個控制元件,現在來說一下其作用和用法" ViewStub 是一個不可見的,大小為0的View,最佳用途就是實現View的延遲載入,避免資源浪費,在需要的時候才載入View"需要注意的是,載入view之後,viewstub本身就會被新載入

小白KMP演算法python實現

在看子串匹配問題的時候,書上的關於KMP的演算法的介紹總是理解不了。看了一遍程式碼總是很快的忘掉,後來決定好好分解一下KMP演算法,算是給自己加深印象。 ------------------------- 分割線-------------------------------

Linuxman命令中文漢化

使用方法 Linux man中的man就是manual的縮寫,用來檢視系統中自帶的各種參考手冊 使用方法: man command 示例: [[email protected]_0_13_centos ~]# man ls LS(1)

Android 網路框架Retrofit2使用從原始碼中解析原理

就目前來說Retrofit2使用的已相當的廣泛,那麼我們先來了解下兩個問題: 1 . 什麼是Retrofit? Retrofit是針對於Android/Java的、基於okHttp的、一種輕量級且安全的、並使用註解方式的網路請求框架。 2 . 我們為什麼要

【模式匹配】 —— KMP演算法證明

本文所述KMP演算法原始碼可在這裡下載: Name Date Reason for change Revision 超然 2013.03.19 First version 1.0 超然 2013.04.15 Added

【Linux】程序間通訊(IPC)訊息佇列測試用例

學習環境 Centos6.5 Linux 核心 2.6 什麼是訊息佇列? 訊息佇列是SystemV版本中三種程序通訊機制之一,另外兩種是訊號量和共享儲存段。訊息佇列提供了程序間傳送資料塊的方法,而且每個資料塊都有一個型別標識。訊息佇列是基於訊息的,而管