圖解LVS的工做原理

圖解LVS的工做原理

版權聲明:本文爲小小呆原創文章,轉載請註明出處! https://blog.csdn.net/gui951753/article/details/80316565
LVS詳解
LVS簡介
LVS特色:
LVS常見術語
LVS工做原理
NAT模式
DR模式
內核參數詳解
arp_ignore
arp_announce
TUN工做模式
full-nat模式
LVS調度算法介紹
ipvsadm使用指南
NAT和DR模式的實現
NAT模式的實現
DR模式的實現
調度器配置
WEB後端服務器配置
實驗測試
參考文獻
LVS簡介
ILVS,是Linux Virtual Server的簡稱,也就是Linux虛擬服務器, 是一個由章文嵩博士發起的自由軟件項目。LVS由用戶空間的ipvsadm和內核空間的IPVS組成,ipvsadm用來定義規則,IPVS利用ipvsadm定義的規則工做。如今LVS已是 Linux標準內核的一部分,在Linux2.4內核之前,使用LVS時必需要從新編譯內核以支持LVS功能模塊,可是從Linux2.4內核之後,已經徹底內置了LVS的各個功能模塊,無需給內核打任何補丁,能夠直接使用LVS提供的各類功能。php

LVS特色:
經過LVS提供的負載均衡技術和Linux操做系統實現一個高性能、高可用的服務器羣集,它具備良好可靠性、可擴展性和可操做性。從而以低廉的成本實現最優的服務性能。LVS的主要特色有如下幾個方面:前端

高併發鏈接:LVS基於內核網絡層面工做,有超強的承載能力和併發處理能力。單臺LVS負載均衡器,可支持上萬併發鏈接。 穩定性強:是工做在網絡4層之上僅做分發之用,這個特色也決定了它在負載均衡軟件裏的性能最強,穩定性最好,對內存和cpu資源消耗極低。
成本低廉:硬件負載均衡器少則十幾萬,多則幾十萬上百萬,LVS只需一臺服務器和就能免費部署使用,性價比極高。
配置簡單:LVS配置很是簡單,僅需幾行命令便可完成配置,也可寫成腳本進行管理。
支持多種算法:支持多種論調算法,可根據業務場景靈活調配進行使用
支持多種工做模型:可根據業務場景,使用不一樣的工做模式來解決生產環境請求處理問題。
應用範圍廣:由於LVS工做在4層,因此它幾乎能夠對全部應用作負載均衡,包括http、數據庫、DNS、ftp服務等等
缺點:工做在4層,不支持7層規則修改,機制過於龐大,不適合小規模應用。
LVS常見術語
LVS中有一些常見的術語,以下表所示:mysql

名稱 解釋
ipvsadm 用戶空間的命令行工具,用於管理集羣服務及集羣服務上的RS等;
IPVS 工做於內核上的netfilter INPUT HOOK之上的程序,可根據用戶定義的集羣實現請求轉發;
VS Virtual Server ,虛擬服務
Director, Balancer 負載均衡器、分發器
RS Real Server 後端請求處理服務器
CIP Client IP,客戶端IP
VIP Director Virtual IP,負載均衡器虛擬IP
DIP Director IP,負載均衡器IP
RIP Real Server IP,後端請求處理服務器IP
LVS工做原理web


若是對於iptables5條鏈不瞭解的同窗,麻煩先去看下這個知識點。這5條鏈是當數據包流向這臺服務器的時候,數據包在服務器內核中的流向。能夠參考下面這篇文章:算法

iptables工做原理連接sql

LVS工做原理:數據庫

當客戶端的請求到達負載均衡器的內核空間時,首先會到達PREROUTING鏈。
當內核發現請求數據包的目的地址是本機時,將數據包送往INPUT鏈。
LVS由用戶空間的ipvsadm和內核空間的IPVS組成,ipvsadm用來定義規則,IPVS利用ipvsadm定義的規則工做,IPVS工做在INPUT鏈上,當數據包到達INPUT鏈時,首先會被IPVS檢查,若是數據包裏面的目的地址及端口沒有在規則裏面,那麼這條數據包將通過INPUT鏈送至用戶空間,交給用戶空間的進程來處理。
若是數據包裏面的目的地址及端口在規則裏面,那麼這條數據報文將被修改目的地址爲事先定義好的後端服務器,並送往POSTROUTING鏈。
最後經由POSTROUTING鏈發日後端服務器。
NAT模式
LVS有不少種模式來供咱們選擇,生產場景中通常使用的都是NAT模式和DR模式,固然,也並非說其餘模式並不會使用,仍是要根據實際的生產場景來決定選擇什麼樣的方案。vim

Virtual Server via NAT(VS-NAT):用地址翻譯實現虛擬服務器。地址轉換器有能被外界訪問到的合法IP地址,它修改來自專有網絡的流出包的地址。外界看起來包是來自地址轉換器自己,當外界包送到轉換器時,它能判斷出應該將包送到內部網的哪一個節點。優勢是節省IP 地址,能對內部進行假裝;缺點是效率低,由於返回給請求方的數據包通過調度器。windows

數據包流轉的過程如上圖所示:後端

(1)當用戶請求到達DirectorServer,此時請求的數據報文會先到內核空間的PREROUTING鏈。 此時報文的源IP爲CIP,目標IP爲VIP 。

(2) PREROUTING檢查發現數據包的目標IP是本機,將數據包送至INPUT鏈。

(3) IPVS比對數據包請求的服務是否爲集羣服務,如果,修改數據包的目標IP地址爲後端服務器IP,而後將數據包發至POSTROUTING鏈。 此時報文的源IP爲CIP,目標IP爲RIP ,在這個過程完成了目標IP的轉換。

(4) POSTROUTING鏈經過選路,將數據包發送給Real Server。

(5) Real Server比對發現目標爲本身的IP,開始構建響應報文發回給Director Server。 此時報文的源IP爲RIP,目標IP爲CIP 。

(6) Director Server在響應客戶端前,此時會將源IP地址修改成本身的VIP地址,而後響應給客戶端。 此時報文的源IP爲VIP,目標IP爲CIP。

以下圖所示,NAT模式中的一大缺點就是不管是請求的數據包,仍是返回的數據包,都必需要通過負載的這個點,請求的數據包通常內容較少,問題不是很大,而返回的數據包,通常都是圖片,視頻等等,這會給中間的調度器帶來巨大的負擔。font>

 

DR模式
Virtual Server via Direct Routing(VS-DR):用直接路由技術實現虛擬服務器。當參與集羣的計算機和做爲控制管理的計算機在同一個網段時能夠用此方法,控制管理的計算機接收到請求包時直接送到參與集羣的節點。直接路由模式比較特別,很難說和什麼方面類似,前種模式基本上都是工做在網絡層上(三層),而直接路由模式則應該是工做在數據鏈路層上(二層)。

工做原理 :


如上圖所示,Director和REAL SERVER都配置同一個IP(VIP),Director將該IP配置到對外的網卡上,Real server將該IP配置到lo網卡上。配置arp_ignore爲1(目的是讓數據包發出apr請求時,只有Director會響應該arp請求),全部REAL SERVER對自己這個IP的ARP請求保持靜默。而Director收到數據包後根據調度算法,找出對應的 REAL SERVER,把目的MAC地址改成REAL SERVER的MAC併發給這臺REAL SERVER。這時REAL SERVER經過網卡eth0收到這個數據包,因爲Real Server上的lo網卡配置的也有VIP,因此RS接收該數據包。處理後直接返回給客戶端(這裏要配置arp_announce,目的是修改返回數據包的源ip地址。)。因爲DR要對二層包頭進行改換,因此DR和REAL SERVER之間必須在一個廣播域,也能夠簡單的理解爲在同一臺交換機上。

內核參數詳解
arp_ignore
arp_announce
不修改的話,回答數據包源ip地址爲VIP,mac爲發送網卡的mac即途中的eth0,那麼交換機上更新mac表以後,就會發現VIP對應兩條mac記錄,一條對應Director的mac地址,一條對應Real Server的mac地址。就會使真正的VIP得不到正確的請求了
相對於NAT模式來言,DR模式可以較好的解決上述問題,其數據在服務器集羣中的流向如上圖所示,請求報文通過LVS到達後端真實的WEB服務器,而響應報文,則直接發給客戶端,並不須要經過調度器。

數據包流轉過程


用戶請求目標網站時,通過dns查詢獲得目的IP爲VIP,目的端口爲80,因而客戶端和咱們VIP,端口80創建鏈接。當數據包到達VIP所在的局域網時,在同一網段中,兩個主機通訊靠的是二層的物理地址而不是Ip地址,所以須要將IP地址轉換爲MAC地址,所以會發出apr請求,查詢VIP對應的mac地址。==Linux主機有這麼一個特性,假設咱們的主機上有兩塊網卡,好比eth0,eth1 當arp請求eth1的mac地址的時候,eth1會答覆,這個是理所固然的,可是eth0也會「好心」的幫eth1回答這個arp請求。==咱們在Real Server的lo網卡上配置了VIP,可是咱們只想讓Director上的網卡來響應咱們的這個arp請求。所以就須要更改下咱們的一些內核參數,具體含義見後文。這時,數據包就獲得了二層的Director的傳輸地址。
net.ipv4.conf.lo.arp_ignore = 1

net.ipv4.conf.all.arp_ignore = 1
1
2
3
正常狀況下只寫第二條就是了,all 是指全部設備的interface,當all和具體的interface好比lo,按照最大的值生效;

當用戶請求到達DirectorServer,此時請求的數據報文會先到內核空間的PREROUTING鏈。 此時報文的源IP爲CIP,目標IP爲VIP。
PREROUTING檢查發現數據包的目標IP是本機,將數據包送至INPUT鏈.
IPVS比對數據包請求的服務是否爲集羣服務,如果,將請求報文中的源MAC地址修改成DIP的MAC地址,將目標MAC地址修改RIP的MAC地址,而後將數據包發至POSTROUTING鏈。此時的源IP和目的IP均未修改,僅修改了源MAC地址爲DIP的MAC地址,目標MAC地址爲RIP的MAC地址
因爲DS和RS在同一個網絡中,因此是經過二層來傳輸。POSTROUTING鏈檢查目標MAC地址爲RIP的MAC地址,那麼此時數據包將會發至Real Server。
client的請求被Director轉發並通過鏈路層尋址到達Realserver後,因爲Realserver的lo接口配置了VIP(請求中的目標IP正是VIP),因此接收請求並處理。處理完成以後,將響應報文經過lo接口傳送給eth0網卡(這個網卡通常指和調度器在一個網段的網卡)而後向外發出。此時的源IP地址爲VIP,目標IP爲CIP。==若是將源地址爲VIP將數據包發送出去,那麼最終交換機上會產生兩條VIP對應的mac地址記錄,一條是Director的mac地址記錄,還有一條是Real server的mac地址記錄,這將會致使真正的VIP沒法接收到請求。==所以,此處要配置arp_announce,目的是爲了修改源ip的目的地址。
net.ipv4.conf.lo.arp_announce = 2

net.ipv4.conf.all.arp_announce = 2
1
2
3
配置arp_announce=2,選擇該主機發送網卡上最合適的本地地址做爲arp請求的源IP地址。
9. 響應報文經過二層鏈路傳輸,最終送達至客戶端。

DR模式的特性
一、保證前端路由將目標地址爲VIP報文通通發給Director Server,而不是RS

二、RS可使用私有地址;也能夠是公網地址,若是使用公網地址,此時能夠經過互聯網對RIP進行直接訪問

三、RS跟Director Server必須在同一個物理網絡中

四、全部的請求報文經由Director Server,但響應報文必須不能進過Director Server

五、不支持地址轉換,也不支持端口映射

六、RS能夠是大多數常見的操做系統

七、RS的網關毫不容許指向DIP

八、RS上的lo接口配置VIP的IP地址

TUN工做模式

1.客戶端將請求發往前端的負載均衡器,請求報文源地址是CIP,目標地址爲VIP。

2.負載均衡器收到報文後,發現請求的是在規則裏面存在的地址,那麼它將在客戶端請求報文的首部再封裝一層IP報文,將源地址改成DIP,目標地址改成RIP,並將此包發送給RS。

3.RS收到請求報文後,會首先拆開第一層封裝,而後發現裏面還有一層IP首部的目標地址是本身lo接口上的VIP,因此會處理次請求報文,並將響應報文經過lo接口送給eth0網卡(這個網卡通常指和調度器在一個網段的網卡)直接發送給客戶端。注意:須要設置lo接口的VIP不能在公網上出現。

full-nat模式


特色:
(1)RIP,DIP可使用私有地址;
(2)RIP和DIP能夠再也不同一個網絡中,且RIP的網關未必須要指向DIP;
(3)支持端口映射;
(4)RS的OS可使用任意類型;
(5)請求報文經由Director,響應報文也經由Director

LVS調度算法介紹
LVS有兩種類型的調度算法,其一就是靜態的調度算法,這種算法一經實現,後續就不會發生變化,是既定的規則,後續數據包的流轉都會按照這種規則進行循序漸進的流轉;其二就是動態的調度算法,這種算法是基於網絡情況,或者後端服務器的情況,鏈接的情況等來進行實時的調整,算法的規則會根據實際狀況而發生必定的變化。

經常使用的靜態調度算法有如下幾種:

1.RR:輪叫調度(Round Robin)
調度器經過」輪叫」調度算法將外部請求按順序輪流分配到集羣中的真實服務器上,它均等地對待每一臺服務器,而無論服務器上實際的鏈接數和系統負載。

2.WRR:加權輪叫(Weight RR)
調度器經過「加權輪叫」調度算法根據真實服務器的不一樣處理能力來調度訪問請求。這樣能夠保證處理能力強的服務器處理更多的訪問流量。調度器能夠自動問詢真實服務器的負載狀況,並動態地調整其權值。

3.DH:目標地址散列調度(Destination Hash )
根據請求的目標IP地址,做爲散列鍵(HashKey)從靜態分配的散列表找出對應的服務器,若該服務器是可用的且未超載,將請求發送到該服務器,不然返回空。

4.SH:源地址 hash(Source Hash)
源地址散列」調度算法根據請求的源IP地址,做爲散列鍵(HashKey)從靜態分配的散列表找出對應的服務器,若該服務器是可用的且未超載,將請求發送到該服務器,不然返回空。

經常使用的動態調度算法有下面這些

1.LC:最少連接(Least Connections)
調度器經過」最少鏈接」調度算法動態地將網絡請求調度到已創建的連接數最少的服務器上。若是集羣系統的真實服務器具備相近的系統性能,採用」最小鏈接」調度算法能夠較好地均衡負載。

2.WLC:加權最少鏈接(默認採用的就是這種)(Weighted Least Connections)
在集羣系統中的服務器性能差別較大的狀況下,調度器採用「加權最少連接」調度算法優化負載均衡性能,具備較高權值的服務器將承受較大比例的活動鏈接負載。調度器能夠自動問詢真實服務器的負載狀況,並動態地調整其權值。

3.SED:最短延遲調度(Shortest Expected Delay )
在WLC基礎上改進,Overhead = (ACTIVE+1)*256/加權,再也不考慮非活動狀態,把當前處於活動狀態的數目+1來實現,數目最小的,接受下次請求,+1的目的是爲了考慮加權的時候,非活動鏈接過多缺陷:當權限過大的時候,會倒置空閒服務器一直處於無鏈接狀態。

4.NQ永不排隊/最少隊列調度(Never Queue Scheduling NQ)
無需隊列。若是有臺 realserver的鏈接數=0就直接分配過去,不須要再進行sed運算,保證不會有一個主機很空間。在SED基礎上不管+幾,第二次必定給下一個,保證不會有一個主機不會很空閒着,不考慮非活動鏈接,才用NQ,SED要考慮活動狀態鏈接,對於DNS的UDP不須要考慮非活動鏈接,而httpd的處於保持狀態的服務就須要考慮非活動鏈接給服務器的壓力。

ipvsadm使用指南
在ipvsadm中有幾個常見術語須要解釋一下:

virtual-service-address:是指虛擬服務器的ip 地址
real-service-address:是指真實服務器的ip 地址
scheduler:調度方法
配置虛擬服務的語法

ipvsadm 的用法和格式以下:

ipvsadm -A|E -t|u|f virutal-service-address:port [-s scheduler] [-p[timeout]] [-M netmask]
#添加/編輯一條新的虛擬服務器記錄。
ipvsadm -D -t|u|f virtual-service-address
#刪除一條記錄
ipvsadm -C
#清除全部記錄
ipvsadm -R
#恢復虛擬服務器規則
ipvsadm -S [-n]
#保存虛擬服務器規則

命令選項解釋:
-A --add-service 在內核的虛擬服務器表中添加一條新的虛擬服務器記錄。也
就是增長一臺新的虛擬服務器。
-E --edit-service 編輯內核虛擬服務器表中的一條虛擬服務器記錄。
-D --delete-service 刪除內核虛擬服務器表中的一條虛擬服務器記錄。
-C --clear 清除內核虛擬服務器表中的全部記錄。
-R --restore 恢復虛擬服務器規則
-S --save 保存虛擬服務器規則,輸出爲-R 選項可讀的格式
-s --scheduler scheduler 使用的調度算法,有這樣幾個選項
rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,
-p --persistent [timeout] 持久穩固的服務。這個選項的意思是來自同一個客
戶的屢次請求,將被同一臺真實的服務器處理。timeout 的默認值爲300 秒。
-M --netmask netmask persistent granularity mask

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
配置real server的語法

ipvsadm 的用法和格式以下:

ipvsadm -a|e -t|u|f service-address:port -r real-server-address:port [-g|i|m] [-w weight]
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 --start-daemon state [--mcast-interface interface]
ipvsadm --stop-daemon
ipvsadm -h

命令選項解釋:
-a --add-server 在內核虛擬服務器表的一條記錄裏添加一條新的真實服務器
記錄。也就是在一個虛擬服務器中增長一臺新的真實服務器
-e --edit-server 編輯一條虛擬服務器記錄中的某條真實服務器記錄
-d --delete-server 刪除一條虛擬服務器記錄中的某條真實服務器記錄
-L|-l --list 顯示內核虛擬服務器表
-Z --zero 虛擬服務表計數器清零(清空當前的鏈接數量等)

--set tcp tcpfin udp 設置鏈接超時值
--start-daemon 啓動同步守護進程。他後面能夠是master 或backup,用來講
明LVS Router 是master 或是backup。在這個功能上也能夠採用keepalived 的
VRRP 功能。
--stop-daemon 中止同步守護進程
-h --help 顯示幫助信息

-t --tcp-service service-address 說明虛擬服務器提供的是tcp 的服務
[vip:port] or [real-server-ip:port]
-u --udp-service service-address 說明虛擬服務器提供的是udp 的服務
[vip:port] or [real-server-ip:port]
-f --fwmark-service fwmark 說明是通過iptables 標記過的服務類型。

-r --real-server server-address 真實的服務器[Real-Server:port]
-g --gatewaying 指定LVS 的工做模式爲直接路由模式(也是LVS 默認的模式)
-i --ipip 指定LVS 的工做模式爲隧道模式
-m --masquerading 指定LVS 的工做模式爲NAT 模式
-w --weight weight 真實服務器的權值

--mcast-interface interface 指定組播的同步接口
-c --connection 顯示LVS 目前的鏈接 如:ipvsadm -L -c
--timeout 顯示tcp tcpfin udp 的timeout 值 如:ipvsadm -L --timeout
--daemon 顯示同步守護進程狀態
--stats 顯示統計信息
--rate 顯示速率信息
--sort 對虛擬服務器和真實服務器排序輸出
--numeric -n 輸出IP 地址和端口的數字形式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
NAT和DR模式的實現
上述四種工做模式,DR模式和NAT模式是經常使用的兩種模式,本文就只闡述這兩種工做模式。

NAT模式的實現
在實現以前,要先對網段進行必定的規劃,每一臺服務器都去規劃好它的位置,和其所承擔的職責。

機器名稱 IP配置 服務角色
lvs VIP:192.168.31.100 DIP:172.25.0.1 負載均衡器
web1 RIP:172.25.0.31 後端服務器
web2 RIP:172.25.0.32 後端服務器
web3 RIP:172.25.0.33 後端服務器
其數據流轉的模型以下圖所示:


實現步驟:
安裝相關配置工具
[root@lvs1 ~]# yum install ipvsadm -y

lvs-server配置:
一、ipvsadm -A -t 192.168.31.100:80 -s wrr
#開啓一個基於80端口的虛擬服務,調度方式爲wrr

二、ipvsadm -a -t 192.168.31.100:80 -r 172.25.0.31 -m -w 1
#配置web1服務後端real server 爲nat工做方式 權重爲1

ipvsadm -a -t 192.168.31.100:80 -r 172.25.0.32 -m -w 1
#配置web2服務後端real server 爲nat工做方式 權重爲1

ipvsadm -a -t 192.168.31.100:80 -r 172.25.0.33 -m -w 1
#配置web3服務後端real server 爲nat工做方式 權重爲1

三、修改內核配置,開啓路由轉發
vim /etc/sysctl.conf 修改 net.ipv4.ip_forward=1

sysctl -p 使其生效

五、real server配置
配置網關指向172.25.0.11,開啓web、php-fpm、mysql服務

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
可分別在三個站點上面寫上不一樣的內容,而後進行測試,看是否可以進行調度。
注:windows中的瀏覽器中通常都會有緩存,其調度可能會失效,使用Linux中的curl等命令訪問則是沒有問題的。可以正常的實現調度。

DR模式的實現
機器名稱 IP配置 服務角色
lvs VIP:172.25.0.100 DIP:172.25.0.1 負載均衡器
web1 RIP:172.25.0.31 後端服務器
web2 RIP:172.25.0.32 後端服務器
web3 RIP:172.25.0.33 後端服務器

DR模式的配置是使用命令來實現的,故其中的一些配置在系統重啓以後是不存在的,若是要想下次開機啓動以後,可以自動的配置,能夠將配置的步驟寫成腳本,並設置開機自啓動。(上面NAT模式的實現也能夠設置開機自啓動腳原本實現。)

調度器配置
LVS調度器腳本

#!/bin/bash
# chkconfig: 2345 90 10
#LVS script for DR
. /etc/rc.d/init.d/functions
VIP=172.25.0.100
DIP=172.25.0.11
RIP1=172.25.0.31
RIP2=172.25.0.32
RIP3=172.25.0.33
PORT=80
#
#description: hhahahah

case "$1" in
start)
/sbin/ifconfig ens34:0 $VIP broadcast $VIP netmask 255.255.255.255 up
/sbin/route add -host $VIP dev ens34:0

# Since this is the Director we must be able to forward packets
echo 1 > /proc/sys/net/ipv4/ip_forward
# 開啓路由轉發功能
# Clear all iptables rules.
/sbin/iptables -F

# Reset iptables counters.
/sbin/iptables -Z

# Clear all ipvsadm rules/services.
/sbin/ipvsadm -C

# Add an IP virtual service for VIP 192.168.0.219 port 80
# In this recipe, we will use the round-robin scheduling method.
# In production, however, you should use a weighted, dynamic scheduling method.
/sbin/ipvsadm -A -t $VIP:80 -s wrr

# Now direct packets for this VIP to
# the real server IP (RIP) inside the cluster
/sbin/ipvsadm -a -t $VIP:80 -r $RIP1 -g -w 1
/sbin/ipvsadm -a -t $VIP:80 -r $RIP2 -g -w 1
/sbin/ipvsadm -a -t $VIP:80 -r $RIP3 -g -w 1
;;

stop)
# Stop forwarding packets
echo 0 > /proc/sys/net/ipv4/ip_forward

# Reset ipvsadm
/sbin/ipvsadm -C

# Bring down the VIP interface
/sbin/ifconfig ens34:0 down

# echo "ipvs is stopped..."
;;

*)
echo "Usage: $0 {start|stop}"
;;
esac
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
將上述內容保存在/etc/init.d/lvs-director文件中,而後添加到服務:

 

[root@lvs ~]# chmod +x /etc/init.d/lvs-director
# 添加腳本執行權限
[root@lvs ~]# chkconfig --add lvs-director
# 添加腳本到服務當中
[root@lvs ~]# chkconfig lvs-director on
# 設置爲開機自啓動服務
[root@lvs ~]# /etc/init.d/lvs-director start
# 啓動腳本

1
2
3
4
5
6
7
8
9
10
11
WEB後端服務器配置
客戶端腳本

#!/bin/bash
#
# Script to start LVS DR real server.
# chkconfig: - 90 10
# description: LVS DR real server
#
. /etc/rc.d/init.d/functions

VIP=172.25.0.100

host=`/bin/hostname`

case "$1" in
start)
# Start LVS-DR real server on this machine.
/sbin/ifconfig lo down
/sbin/ifconfig lo up
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
#只響應目的IP地址爲接收網卡上的本地地址的arp請求
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
# 對查詢目標使用最適當的本地地址.在此模式下將忽略這個IP數據包的源地址並嘗試選擇與能與該地址通訊的本地地址.
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
#配置全部網卡只響應本身接口上的ip的arp請求,其他的忽略。
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
#必須避免將接口信息向非本網絡進行通告

/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
/sbin/route add -host $VIP dev lo:0

;;
stop)

# Stop LVS-DR real server loopback device(s).
/sbin/ifconfig lo:0 down
echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce

;;

*)
# Invalid entry.
echo "$0: Usage: $0 {start||stop}"
exit 1
;;
esac

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
保存至/etc/init.d/lvs-rs,並賦予執行權限,而後添加爲開機啓動:

 

[root@web1~]# chmod +x /etc/init.d/lvs-rs

[root@web1 ~]# chkconfig --add lvs-rs

[root@web1 ~]# chkconfig lvs-rs on

[root@web1 ~]# /etc/init.d/lvs-rs start

1
2
3
4
5
6
7
8
9
10
web2和web3採用徹底相同的配置便可。

實驗測試在web一、web2和web3上寫入不一樣的站點內容,而後訪問172.25.0.100。訪問調度器的網址,看是否每次訪問的站點內容都是不一樣的。(windows中的瀏覽器有緩存功能,若是站點內容有時候是相同的,那麼不必定是本身配錯了,多是緩存的緣由,避免的辦法就是使用Linux的curl命令去訪問站點的內容)

相關文章
相關標籤/搜索