LVS簡介
ILVS,是Linux Virtual Server的簡稱,也就是Linux虛擬服務器, 是一個由章文嵩博士發起的自由軟件項目。LVS由用戶空間的ipvsadm和內核空間的IPVS組成,ipvsadm用來定義規則,IPVS利用ipvsadm定義的規則工作。現在LVS已經是 Linux標准內核的一部分,在Linux2.4內核以前,使用LVS時必須要重新編譯內核以支持LVS功能模塊,但是從Linux2.4內核以后,已經完全內置了LVS的各個功能模塊,無需給內核打任何補丁,可以直接使用LVS提供的各種功能。
LVS特點:
通過LVS提供的負載均衡技術和Linux操作系統實現一個高性能、高可用的服務器群集,它具有良好可靠性、可擴展性和可操作性。從而以低廉的成本實現最優的服務性能。LVS的主要特點有以下幾個方面:
- 高並發連接:LVS基於內核網絡層面工作,有超強的承載能力和並發處理能力。單台LVS負載均衡器,可支持上萬並發連接。穩定性強:是工作在網絡4層之上僅作分發之用,這個特點也決定了它在負載均衡軟件里的性能最強,穩定性最好,對內存和cpu資源消耗極低。
- 成本低廉:硬件負載均衡器少則十幾萬,多則幾十萬上百萬,LVS只需一台服務器和就能免費部署使用,性價比極高。
- 配置簡單:LVS配置非常簡單,僅需幾行命令即可完成配置,也可寫成腳本進行管理。
- 支持多種算法:支持多種論調算法,可根據業務場景靈活調配進行使用
支持多種工作模型:可根據業務場景,使用不同的工作模式來解決生產環境請求處理問題。
- 應用范圍廣:因為LVS工作在4層,所以它幾乎可以對所有應用做負載均衡,包括http、數據庫、DNS、ftp服務等等
- 缺點:工作在4層,不支持7層規則修改,機制過於龐大,不適合小規模應用。
LVS常見術語
LVS中有一些常見的術語,如下表所示:
名稱 | 解釋 |
---|---|
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工作原理
如果對於iptables5條鏈不了解的同學,麻煩先去看下這個知識點。這5條鏈是當數據包流向這台服務器的時候,數據包在服務器內核中的流向。可以參考下面這篇文章:
LVS工作原理:
- 當客戶端的請求到達負載均衡器的內核空間時,首先會到達PREROUTING鏈。
- 當內核發現請求數據包的目的地址是本機時,將數據包送往INPUT鏈。
- LVS由用戶空間的ipvsadm和內核空間的IPVS組成,ipvsadm用來定義規則,IPVS利用ipvsadm定義的規則工作,IPVS工作在INPUT鏈上,當數據包到達INPUT鏈時,首先會被IPVS檢查,如果數據包里面的目的地址及端口沒有在規則里面,那么這條數據包將經過INPUT鏈送至用戶空間,交給用戶空間的進程來處理。
- 如果數據包里面的目的地址及端口在規則里面,那么這條數據報文將被修改目的地址為事先定義好的后端服務器,並送往POSTROUTING鏈。
- 最后經由POSTROUTING鏈發往后端服務器。
NAT模式
LVS有很多種模式來供我們選擇,生產場景中一般使用的都是NAT模式和DR模式,當然,也並不是說其他模式並不會使用,還是要根據實際的生產場景來決定選擇什么樣的方案。
Virtual Server via NAT(VS-NAT):用地址翻譯實現虛擬服務器。地址轉換器有能被外界訪問到的合法IP地址,它修改來自專有網絡的流出包的地址。外界看起來包是來自地址轉換器本身,當外界包送到轉換器時,它能判斷出應該將包送到內部網的哪個節點。優點是節省IP 地址,能對內部進行偽裝;缺點是效率低,因為返回給請求方的數據包經過調度器。
數據包流轉的過程如上圖所示:
(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 <span class="token operator">=</span> 2
- 1
- 2
- 3
配置arp_announce=2,選擇該主機發送網卡上最合適的本地地址作為arp請求的源IP地址。
9. 響應報文通過二層鏈路傳輸,最終送達至客戶端。
DR模式的特性
1、保證前端路由將目標地址為VIP報文統統發給Director Server,而不是RS
2、RS可以使用私有地址;也可以是公網地址,如果使用公網地址,此時可以通過互聯網對RIP進行直接訪問
3、RS跟Director Server必須在同一個物理網絡中
4、所有的請求報文經由Director Server,但響應報文必須不能進過Director Server
5、不支持地址轉換,也不支持端口映射
6、RS可以是大多數常見的操作系統
7、RS的網關絕不允許指向DIP
8、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配置:
1、ipvsadm -A -t 192.168.31.100:80 -s wrr
#開啟一個基於80端口的虛擬服務,調度方式為wrr
2、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
3、修改內核配置,開啟路由轉發
vim /etc/sysctl.conf 修改 net.ipv4.ip_forward=1
sysctl -p 使其生效
5、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=</span>/bin/hostname<span class="token variable">
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 <span class="token variable">$VIP</span> broadcast <span class="token variable">$VIP</span> netmask 255.255.255.255 up
/sbin/route add -host <span class="token variable">$VIP</span> dev lo:0
;;
stop)
<span class="token comment"># Stop LVS-DR real server loopback device(s). </span>
/sbin/ifconfig lo:0 down
<span class="token keyword">echo</span> 0 <span class="token operator">></span> /proc/sys/net/ipv4/conf/lo/arp_ignore
<span class="token keyword">echo</span> 0 <span class="token operator">></span> /proc/sys/net/ipv4/conf/lo/arp_announce
<span class="token keyword">echo</span> 0 <span class="token operator">></span> /proc/sys/net/ipv4/conf/all/arp_ignore
<span class="token keyword">echo</span> 0 <span class="token operator">></span> /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,並賦予執行權限,然后添加為開機啟動:
<span class="token punctuation">[</span>root@web1~<span class="token punctuation">]</span><span class="token comment"># chmod +x /etc/init.d/lvs-rs</span>
<span class="token punctuation">[</span>root@web1 ~<span class="token punctuation">]</span><span class="token comment"># chkconfig --add lvs-rs</span>
<span class="token punctuation">[</span>root@web1 ~<span class="token punctuation">]</span><span class="token comment"># chkconfig lvs-rs on</span>
<span class="token punctuation">[</span>root@web1 ~<span class="token punctuation">]</span><span class="token comment"># /etc/init.d/lvs-rs start</span>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
web2和web3采用完全相同的配置即可。
實驗測試
在web1、web2和web3上寫入不同的站點內容,然后訪問172.25.0.100。訪問調度器的網址,看是否每次訪問的站點內容都是不同的。(windows中的瀏覽器有緩存功能,如果站點內容有時候是相同的,那么不一定是自己配錯了,可能是緩存的原因,避免的辦法就是使用Linux的curl命令去訪問站點的內容)
參考文獻
Linux內核參數之arp_ignore和arp_announce
LVS工作總結之原理篇–DR模式
</div><div><div></div></div>
<link href="https://csdnimg.cn/release/phoenix/mdeditor/markdown_views-60ecaf1f42.css" rel="stylesheet">
</div>