LVS原理詳解以及部署

linux virtual server簡稱LVS,Internet的快速增加使多媒體網絡服務器面對的訪問數量快速增長,服務器須要具有提供大量併發訪問服務的能力,所以對於大負載的服務器來說, CPU、I/O處理能力很快會成爲瓶頸。因爲單臺服務器的性能老是有限的,簡單的提升硬件性能並不能真正解決這個問題。爲此,必須採用多服務器和負載均衡技術才能知足大量併發訪問的須要。Linux 虛擬服務器(Linux Virtual Servers,LVS) 使用負載均衡技術將多臺服務器組成一個虛擬服務器。它爲適應快速增加的網絡訪問需求提供了一個負載能力易於擴展,而價格低廉的解決方案。lvs的負載能力特別強,優化空間特別大,lvs的變種DPVS聽說是lvs性能的幾倍,由愛奇藝開發,並普遍用於愛奇藝IDC。其餘負載均衡服務器還有nginx,haproxy,F5,Netscale。html

2、LVS基本原理


 

  1. 當用戶向負載均衡調度器(Director Server)發起請求,調度器將請求發往至內核空間。
  2. PREROUTING鏈首先會接收到用戶請求,判斷目標IP肯定是本機IP,將數據包發往INPUT鏈。
  3. IPVS是工做在INPUT鏈上的,當用戶請求到達INPUT時,IPVS會將用戶請求和本身已定義好的集羣服務進行比對,若是用戶請求的就是定義的集羣服務,那麼此時IPVS會強行修改數據包裏的目標IP地址及端口,並將新的數據包發往POSTROUTING鏈。
  4. POSTROUTING連接收數據包後發現目標IP地址恰好是本身的後端服務器,那麼此時經過選路,將數據包最終發送給後端的服務器。

3、LVS組成


 

LVS 由2部分程序組成,包括 ipvs 和 ipvsadm。前端

  1. IPVS(ip virtual server):一段代碼工做在內核空間,叫IPVS,是真正生效實現調度的代碼。IPVS的整體結構主要由IP包處理、負載均衡算法、系統配置與管理三個模塊及虛擬服務器與真實服務器鏈表組成。
  2. ipvsadm:另一段是工做在用戶空間,叫ipvsadm,即IPVS管理器,負責爲ipvs內核框架編寫規則,定義誰是集羣服務,而誰是後端真實的服務器(Real Server)。

4、LVS技術術語


 

  • DS:Director Server。指的是前端負載均衡器節點。
  • RS:Real Server。後端真實的工做服務器。
  • VIP:Virtual IP,向外部直接面向用戶請求,做爲用戶請求的目標的IP地址。
  • DIP:Director Server IP,主要用於和內部主機通信的IP地址。
  • RIP:Real Server IP,後端服務器的IP地址。
  • CIP:Client IP,訪問客戶端的IP地址。

5、LVS工做模式和原理


 

5.一、NAT模式

5.1.一、NAT模式工做原理

  1. 當用戶請求到達Director Server,此時請求的數據報文會先到內核空間的PREROUTING鏈。 此時報文的源IP爲CIP,目標IP爲VIP。
  2. PREROUTING檢查發現數據包的目標IP是本機,將數據包送至INPUT鏈。
  3. IPVS比對數據包請求的服務是否爲集羣服務,如果,修改數據包的目標IP地址爲後端服務器IP,而後將數據包發至POSTROUTING鏈。 此時報文的源IP爲CIP,目標IP爲RIP。
  4. POSTROUTING鏈經過選路,將數據包發送給Real Server
  5. Real Server比對發現目標爲本身的IP,開始構建響應報文發回給Director Server。 此時報文的源IP爲RIP,目標IP爲CIP。
  6. Director Server在響應客戶端前,此時會將源IP地址修改成本身的VIP地址,而後響應給客戶端。 此時報文的源IP爲VIP,目標IP爲CIP。

5.1.二、NAT特性

  • RIP最好是內網IP
  • RS的網關必須指向DIP。
  • DIP和RIP必須在同一個網段內。
  • 請求和迴應的報文都必須通過director,director容易成爲瓶頸。
  • nat支持端口轉發。

5.二、DR模式

5.2.一、DR模式工做原理

  1. 首先用戶用CIP請求VIP。
  2. 根據上圖能夠看到,無論是Director Server仍是Real Server上都須要配置相同的VIP,那麼當用戶請求到達咱們的集羣網絡的前端路由器的時候,請求數據包的源地址爲CIP目標地址爲VIP,此時路由器會發廣播問誰是VIP,那麼咱們集羣中全部的節點都配置有VIP,此時誰先響應路由器那麼路由器就會將用戶請求發給誰,這樣一來咱們的集羣系統是否是沒有意義了,那咱們能夠在網關路由器上配置靜態路由指定VIP就是Director Server,或者使用一種機制不讓Real Server 接收來自網絡中的ARP地址解析請求,這樣一來用戶的請求數據包都會通過Director Servrer。
  3. 當用戶請求到達Director Server,此時請求的數據報文會先到內核空間的PREROUTING鏈。 此時報文的源IP爲CIP,目標IP爲VIP。
  4.  PREROUTING檢查發現數據包的目標IP是本機,將數據包送至INPUT鏈。
  5.  IPVS比對數據包請求的服務是否爲集羣服務,如果,將請求報文中的源MAC地址修改成DIP的MAC地址,將目標MAC地址修改RIP的MAC地址,而後將數據包發至POSTROUTING鏈。 此時的源IP和目的IP均未修改,僅修改了源MAC地址爲DIP的MAC地址,目標MAC地址爲RIP的MAC地址
  6.  因爲DS和RS在同一個網絡中,因此是經過二層來傳輸。POSTROUTING鏈檢查目標MAC地址爲RIP的MAC地址,那麼此時數據包將會發至Real Server。
  7.  RS發現請求報文的MAC地址是本身的MAC地址,就接收此報文。處理完成以後,將響應報文經過lo接口傳送給eth0網卡而後向外發出。 此時的源IP地址爲VIP,目標IP爲CIP
  8. 響應報文最終送達至客戶端。

5.2.二、配置DR有三種方式:

第一種方式:

在路由器上明顯說明vip對應的地址必定是Director上的MAC,只要綁定,之後再跟vip通訊也不用再請求了,這個綁定是靜態的,因此它也不會失效,也不會再次發起請求,可是有個前提,咱們的路由設備必須有操做權限可以綁定MAC地址,萬一這個路由器是運行商操做的,咱們無法操做怎麼辦?第一種方式當然很簡便,但未必可行。linux

第二種方式:

在給別主機上(例如:紅帽)它們引進的有一種程序arptables,它有點相似於iptables,它確定是基於arp或基於MAC作訪問控制的,很顯然咱們只須要在每個real server上定義arptables規則,若是用戶arp廣播請求的目標地址是本機的vip則不予相應,或者說相應的報文不讓出去,很顯然網關(gateway)是接受不到的,也就是director相應的報文才能到達gateway,這個也行。第二種方式咱們能夠基於arptables。nginx

第三種方式:

在相對較新的版本中新增了兩個內核參數(kernelparameter),第一個是arp_ignore定義接受到ARP請求時的相應級別;第二個是arp_announce定義將本身地址向外通告時的通告級別。【提示:很顯然咱們如今的系統通常在內核中都是支持這些參數的,咱們用參數的方式進行調整更具備樸實性,它還不依賴於額外的條件,像arptables,也不依賴外在路由配置的設置,反而一般咱們使用的是第三種配置】算法

arp_ignore:定義接受到ARP請求時的相應級別

0:  只要本地配置的有相應地址,就給予響應。(默認)後端

1:  僅迴應目標IP地址是本地的入網地址的arp請求。centos

2:  僅迴應目標IP地址是本地的入網地址,並且源IP和目標IP在同一個子網的arp請   求。緩存

3:  不迴應該網絡界面的arp請求,而只對設置的惟一和鏈接地址作出迴應bash

4-7:保留未使用服務器

8:  不迴應全部的arp請求。

arp_announce:定義將本身地址向外通告是的通告級別;

0:    將本地任何接口上的任何地址向外通告

1:  試圖僅向目標網絡通告與其網絡匹配的地址

2:  僅向與本地接口上地址匹配的網絡進行通告

5.2.三、DR特性

  • 特色1:保證前端路由將目標地址爲VIP報文通通發給Director Server,而不是RS。
  • Director和RS的VIP爲同一個VIP。
  • RS可使用私有地址;也能夠是公網地址,若是使用公網地址,此時能夠經過互聯網對RIP進行直接訪問。
  • RS跟Director Server必須在同一個物理網絡中。
  • 全部的請求報文經由Director Server,但響應報文必須不能進過Director Server。
  • 不支持地址轉換,也不支持端口映射
  • RS能夠是大多數常見的操做系統
  • RS的網關毫不容許指向DIP(由於咱們不容許他通過director)
  • RS上的lo接口配置VIP的IP地址
  • DR模式是市面上用得最廣的。
  • 缺陷:RS和DS必須在同一機房中

 

補充:特色1的解決方法

  1. 在前端路由器作靜態地址路由綁定,將對於VIP的地址僅路由到Director Server。存在問題:用戶未必有路由操做權限,由於有多是運營商提供的,因此這個方法未必實用。
  2. arptables:在arp的層次上實如今ARP解析時作防火牆規則,過濾RS響應ARP請求。這是由iptables提供的。
  3. 修改RS上內核參數(arp_ignore和arp_announce)將RS上的VIP配置在lo接口的別名上,並限制其不能響應對VIP地址解析請求。

5.三、Tunnel模式

5.3.一、Tunnel模式工做原理

  1. 當用戶請求到達Director Server,此時請求的數據報文會先到內核空間的PREROUTING鏈。 此時報文的源IP爲CIP,目標IP爲VIP 。
  2. PREROUTING檢查發現數據包的目標IP是本機,將數據包送至INPUT鏈。
  3. IPVS比對數據包請求的服務是否爲集羣服務,如果,在請求報文的首部再次封裝一層IP報文,封裝源IP爲爲DIP,目標IP爲RIP。而後發至POSTROUTING鏈。 此時源IP爲DIP,目標IP爲RIP。
  4. POSTROUTING鏈根據最新封裝的IP報文,將數據包發至RS(由於在外層封裝多了一層IP首部,因此能夠理解爲此時經過隧道傳輸)。 此時源IP爲DIP,目標IP爲RIP。
  5. RS接收到報文後發現是本身的IP地址,就將報文接收下來,拆除掉最外層的IP後,會發現裏面還有一層IP首部,並且目標是本身的lo接口VIP,那麼此時RS開始處理此請求,處理完成以後,經過lo接口送給eth0網卡,而後向外傳遞。 此時的源IP地址爲VIP,目標IP爲CIP
  6. 響應報文最終送達至客戶端

5.3.二、Tunnel模式特性

  • RIP、VIP、DIP全是公網地址。
  • RS的網關不會也不可能指向DIP
  • 全部的請求報文經由Director Server,但響應報文必須不能進過Director Server
  • 不支持端口映射
  • RS的系統必須支持隧道

6、LVS的調度算法


 

固定調度算法:rr,wrr,dh,sh

動態調度算法:wlc,lc,lblc,lblcr

固定調度算法:即調度器不會去判斷後端服務器的繁忙與否,一如既往得將請求派發下去。

動態調度算法:調度器會去判斷後端服務器的繁忙程度,而後依據調度算法動態得派發請求。

6.一、rr:輪詢(round robin)

這種算法是最簡單的,就是按依次循環的方式將請求調度到不一樣的服務器上,該算法最大的特色就是簡單。輪詢算法假設全部的服務器處理請求的能力都是同樣的,調度器會將全部的請求平均分配給每一個真實服務器,無論後端 RS 配置和處理能力,很是均衡地分發下去。這個調度的缺點是,無論後端服務器的繁忙程度是怎樣的,調度器都會講請求依次發下去。若是A服務器上的請求很快請求完了,而B服務器的請求一直持續着,將會致使B服務器一直很忙,而A很閒,這樣便沒起到均衡的左右。

6.二、wrr:加權輪詢(weight round robin)

這種算法比 rr 的算法多了一個權重的概念,能夠給 RS 設置權重,權重越高,那麼分發的請求數越多,權重的取值範圍 0 – 100。主要是對rr算法的一種優化和補充, LVS 會考慮每臺服務器的性能,並給每臺服務器添加要給權值,若是服務器A的權值爲1,服務器B的權值爲2,則調度到服務器B的請求會是服務器A的2倍。權值越高的服務器,處理的請求越多。

6.三、dh:目標地址散列調度算法 (destination hash)

簡單的說,即將同一類型的請求分配給同一個後端服務器,例如將以 .jgp、.png等結尾的請求轉發到同一個節點。這種算法其實不是爲了真正意義的負載均衡,而是爲了資源的分類管理。這種調度算法主要應用在使用了緩存節點的系統中,提升緩存的命中率。

6.四、sh:源地址散列調度算法(source hash)

即未來自同一個ip的請求發給後端的同一個服務器,若是後端服務器工做正常沒有超負荷的話。這能夠解決session共享的問題,可是這裏有個問題,不少企業、社區、學校都是共用的一個IP,這將致使請求分配的不均衡。

6.五、lc:最少鏈接數(least-connection)

這個算法會根據後端 RS 的鏈接數來決定把請求分發給誰,好比 RS1 鏈接數比 RS2 鏈接數少,那麼請求就優先發給 RS1。這裏問題是沒法作到會話保持,即session共享。

6.六、wlc:加權最少鏈接數(weight least-connection)

這個比最少鏈接數多了一個加權的概念,即在最少鏈接數的基礎上加一個權重值,當鏈接數相近,權重值越大,越優先被分派請求。

6.七、lblc:基於局部性的最少鏈接調度算法(locality-based least-connection)

未來自同一目的地址的請求分配給同一臺RS若是這臺服務器還沒有滿負荷,不然分配給鏈接數最小的RS,並以它爲下一次分配的首先考慮。

6.八、lblcr:基於地址的帶重複最小鏈接數調度 (Locality-Based Least-Connection with Replication)

這個用得少,能夠略過。

7、LVS部署


 

7.一、ipvsadm命令詳解

ipvsadm是ipvs的管理器,須要yum安裝。

基本用法:

ipvsadm COMMAND [protocol] service-address [scheduling-method] [persistence options]

ipvsadm COMMAND [protocol] service-address server-address [packet-forwarding-method] [weight options]

第一條命令用於向LVS系統中添加一個用於負載均衡的virtual server(VS);第二條命令用來修改已經存在的VS的配置,service address用來指定涉及的虛擬服務即虛擬地址,server-address指定涉及的真實地址。

 

命令參數:

-A, --add-service:     爲ipvs虛擬服務器添加一個虛擬服務,即添加一個須要被負載均衡的虛擬地址。虛擬地址須要是ip地址,端口號,協議的形式。

-E, --edit-service:     修改一個虛擬服務。

-D, --delete-service: 刪除一個虛擬服務。

-C, --clear:               清除全部虛擬服務。

-R, --restore:            從標準輸入獲取ipvsadm命令。通常結合下邊的-S使用。

-S, --save:                從標準輸出輸出虛擬服務器的規則。能夠將虛擬服務器的規則保存,在之後經過-R直接讀入,以實現自動化配置。

-a, --add-server:      爲虛擬服務添加一個real server(RS)

-e, --edit-server:      修改RS

-d, --delete-server:  刪除

-L, -l, --list:              列出虛擬服務表中的全部虛擬服務。能夠指定地址。添加-c顯示鏈接表。

-Z, --zero:               將全部數據相關的記錄清零。這些記錄通常用於調度策略。

--set tcp tcpfin udp:修改協議的超時時間。

--start-daemon state:設置虛擬服務器的備服務器,用來實現主備服務器冗餘。(注:該功能只支持ipv4)

--stop-daemon:      中止備服務器。

-h, --help:               幫助。

 

參數:如下參數能夠接在上邊的命令後邊。

-t, --tcp-service service-address: 

指定虛擬服務爲tcp服務。service-address要是host[:port]的形式。端口是0表示任意端口。若是須要將端口設置爲0,還須要加上-p選項(持久鏈接)。

-u, --udp-service service-address:

使用udp服務,其餘同上。

-f, --fwmark-service integer:         

用firewall mark取代虛擬地址來指定要被負載均衡的數據包,能夠經過這個命令實現把不一樣址、端口的虛擬地址整合成一個虛擬服務,可讓虛擬服務器同時截獲處理去往多個不一樣地址的數據包。fwmark能夠經過iptables命令指定。若是用在ipv6須要加上-6。

-s, --scheduler scheduling-method:

指定調度算法。調度算法能夠指定如下8種:rr(輪詢),wrr(權重),lc(最後鏈接),wlc(權重),lblc(本地最後鏈接),lblcr(帶複製的本地最後鏈接),dh(目的地址哈希),sh(源地址哈希),sed(最小指望延遲),nq(永不排隊)

-p, --persistent [timeout]:             

設置持久鏈接,這個模式可使來自客戶的多個請求被送到同一個真實服務器,一般用於ftp或者ssl中。

-M, --netmask netmask:               

指定客戶地址的子網掩碼。用於將同屬一個子網的客戶的請求轉發到相同服務器。

-r, --real-server server-address:  

爲虛擬服務指定數據能夠轉發到的真實服務器的地址。能夠添加端口號。若是沒有指定端口號,則等效於使用虛擬地址的端口號。

[packet-forwarding-method]:

此選項指定某個真實服務器所使用的數據轉發模式。須要對每一個真實服務器分別指定模式。

-g, --gatewaying:              使用網關(即直接路由),此模式是默認模式。

-i, --ipip:                            使用ipip隧道模式。

-m, --masquerading:         使用NAT模式。

-w, --weight weight:                         

設置權重。權重是0~65535的整數。若是將某個真實服務器的權重設置爲0,那麼它不會收到新的鏈接,可是已有鏈接還會繼續維持(這點和直接把某個真實服務器刪除時不一樣的)。

-x, --u-threshold uthreshold:        

設置一個服務器能夠維持的鏈接上限。0~65535。設置爲0表示沒有上限。

-y, --l-threshold lthreshold:           

設置一個服務器的鏈接下限。當服務器的鏈接數低於此值的時候服務器才能夠從新接收鏈接。若是此值未設置,則當服務器的鏈接數連續三次低於uthreshold時服務器才能夠接收到新的鏈接。(PS:筆者覺得此設定多是爲了防止服務器在可否接收鏈接這兩個狀態上頻繁變換)

--mcast-interface interface:         

指定使用備服務器時候的廣播接口。

--syncid syncid:                           

指定syncid,一樣用於主備服務器的同步。

如下選項用於list命令:

-c, --connection:                           

列出當前的IPVS鏈接。

--timeout:                                     

列出超時

--daemon:

--stats:                                         

狀態信息

--rate:                                           

傳輸速率

--thresholds:                               

列出閾值

--persistent-conn:                       

堅持鏈接

--sor:                                           

把列表排序。

--nosort:                                     

不排序

-n, --numeric:                             

不對ip地址進行dns查詢

--exact:                                       

單位

-6:                                               

若是fwmark用的是ipv6地址須要指定此選項。     

其餘注意事項:

  1.  若是使用IPv6地址,須要在地址兩端加上「[]」。例如:ipvsadm -A -t [2001:db8::80]:80 -s rr
  2.  能夠經過設置如下虛擬文件的值來防護DoS攻擊:/proc/sys/net/ipv4/vs/drop_entry /proc/sys/net/ipv4/vs/drop_packet /proc/sys/net/ipv4/vs/secure_tcp
  3. 對於某一目的地址,對應有一個RS子集。對此地址的請求,爲它分配子集中鏈接數最小的RS;若是子集中全部的服務器均已滿負荷,則從集羣中選擇一個鏈接數較小的服務器,將它加入到此子集並分配鏈接;若必定時間內,這個子集未被作任何修改,則將子集中負載最大的節點從子集刪除。

7.二、NAT模式測試

1)測試環境:

Director:         centos 6.8      VIP:192.168.1.111

                                                DIP:192.168.229.133

RealServer1: centos6.8        RIP:192.168.229.132

RealServer2: centos6.8        RIP:192.168.229.134

2)Director配置

安裝ipvsadm:

[root@ShiYanLou LVS]# yum install ipvsadm –y

編輯腳本:/LVS/install.sh

複製代碼
#director設置 nat 防火牆
iptables -t nat -F

#!/bin/bash
VIP=192.168.1.111
DIP=192.168.229.133
RIP1=192.168.229.132
RIP2=192.168.229.134
# director服務器上開啓路由轉發功能:
echo 1 > /proc/sys/net/ipv4/ip_forward
# 關閉 icmp 的重定向
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/eth0/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/eth1/send_redirects
# director設置 ipvsadm
IPVSADM='/sbin/ipvsadm'
$IPVSADM -C
$IPVSADM -A -t $VIP:80 -s rr
$IPVSADM -a -t $VIP:80 -r $RIP1:80 -m
$IPVSADM -a -t $VIP:80 -r $RIP2:80 -m
複製代碼

3)RealServer配置

  1. 配置RealServer1和RealServer2的網關爲DIP。如:
    複製代碼
    vi /etc/sysconfig/network-scripts/ifcfg-eth0
    DEVICE=eth0
    HWADDR=00:0C:29:46:3B:8C
    TYPE=Ethernet
    UUID=e2fa0e51-7240-4ef9-8572-bf82ef8bb6a8
    ONBOOT=yes
    NM_CONTROLLED=yes
    BOOTPROTO=static
    IPADDR=192.168.229.132
    NETMASK=255.255.255.0
    GATEWAY=192.168.229.133                #配置網關爲DIP
    複製代碼
  2. 安裝httpd
    yum –y install httpd
    標記網頁:
    RealServer1:echo 」I am RealServer1 192.168.229.132」>/var/www/html/index.html
    RealServer2:echo 「I am RealServer2 192.168.229.134」>/var/www/html/index.html

4)驗證

屢次訪問http://192.168.1.111

會輪詢獲得「I am RealServer1 192.168.229.132」「I am RealServer2 192.168.229.134」

注意:關閉Director的防火牆iptables,否則訪問不成功。

7.三、DR模式測試

1)測試環境

Director:        centos 6.8        VIP:eth0:0:192.168.229.111

                                                 DIP:eth0:192.168.229.133

RealServer1: centos6.8        RIP:eth0:192.168.229.132

                                                 VIP:lo:0:192.168.229.111

RealServer2: centos6.8        RIP:eth0:192.168.229.134

                                                 VIP:lo:0:192.168.229.111

2)Director配置

腳本以下:

複製代碼
#! /bin/bash
echo 1 > /proc/sys/net/ipv4/ip_forward
ipv=/sbin/ipvsadm
vip=192.168.229.111
rs1=192.168.229.132
rs2=192.168.229.134
ifconfig eth0:0 down
ifconfig eth0:0 $vip broadcast $vip netmask 255.255.255.0 up
route add -host $vip dev eth0:0
$ipv -C
$ipv -A -t $vip:80 -s rr
$ipv -a -t $vip:80 -r $rs1:80 -g
$ipv -a -t $vip:80 -r $rs2:80 –g
複製代碼

3)RealServer配置

腳本以下:

複製代碼
#!/bin/bash
vip=192.168.229.111
ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip lo:0
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
複製代碼

4)驗證

屢次訪問http://192.168.1.111

會輪詢獲得「I am RealServer1 192.168.229.132」  「I am RealServer2 192.168.229.134」

注意:關閉Director的防火牆iptables,否則訪問不成功。

7.四、Tun模式測試

1)測試環境

Director:        centos 6.8        VIP:eth0:0:192.168.299.111

                                                 DIP:eth0:192.168.229.133

RealServer1: centos6.8        RIP:eth0:192.168.229.132

                                                 VIP:tunl0:192.168.229.111

RealServer2: centos6.8        RIP:eth0:192.168.229.134

                                                 VIP:tunl0:192.168.229.111

2)Director配置

腳本以下:

複製代碼
#! /bin/bash
echo 1 > /proc/sys/net/ipv4/ip_forward
ipv=/sbin/ipvsadm
vip=192.168.229.111
rs1=192.168.229.132
rs2=192.168.229.134
ifconfig eth0:0 down
ifconfig eth0:0 $vip broadcast $vip netmask 255.255.255.0 up
route add -host $vip dev eth0:0
iptables -t nat -F
setenforce 0
$ipv -C
$ipv -A -t $vip:80 -s rr
$ipv -a -t $vip:80 -r $rs1:80 -i
$ipv -a -t $vip:80 -r $rs2:80 -i
複製代碼

3)RealServer配置

a、加載ipip模塊

[root@ulife3test LVS]# modprobe ipip

b、配置VIP:

複製代碼
[root@ulife3test LVS]# cd /etc/sysconfig/network-scripts/
[root@ulife3test network-scripts]# cp ifcfg-lo ifcfg-tunl0
[root@ulife3test network-scripts]# vi ifcfg-tunl0
DEVICE=tunl0
IPADDR=192.168.229.111
NETMASK=255.255.255.0
ONBOOT=yes
NAME=tunl0
[root@ulife3test network-scripts]# service network restart
複製代碼

c、關閉arp轉發:

複製代碼
[root@ulife3test network-scripts]# echo '0'>/proc/sys/net/ipv4/ip_forward
[root@ulife3test network-scripts]# vi /etc/sysctl.conf                #加入如下行
net.ipv4.conf.tunl0.arp_ignore = 1
net.ipv4.conf.tunl0.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.tunl0.rp_filter = 0
net.ipv4.conf.all.rp_filter = 0
[root@ulife3test network-scripts]# sysctl -p                           #永久生效
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
net.ipv4.conf.tunl0.arp_ignore = 1
net.ipv4.conf.tunl0.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.tunl0.rp_filter = 0
net.ipv4.conf.all.rp_filter = 0
複製代碼

d、關閉selinux

setenforce 0或者修改/etc/selinux/config 配置文件中SELINUX=disabled而後重啓系統。

4)驗證

屢次訪問http://192.168.1.111

會輪詢獲得「I am RealServer1 192.168.229.132」「I am RealServer2 192.168.229.134」

注意:關閉Director的防火牆iptables,否則訪問不成功。

相關文章
相關標籤/搜索