LVS原理詳解以及部署
一、LVS簡介
linux virtual server簡稱LVS,是章文嵩博士1998年發起的一個開源項目。官網:http://www.linuxvirtualserver.org。Internet的快速增長使多媒體網絡服務器面對的訪問數量快速增加,服務器需要具備提供大量並發訪問服務的能力,因此對於大負載的服務器來講, CPU、I/O處理能力很快會成為瓶頸。由於單臺服務器的性能總是有限的,簡單的提高硬件性能並不能真正解決這個問題。為此,必須采用多服務器和負載均衡技術才能滿足大量並發訪問的需要。Linux 虛擬服務器(Linux Virtual Servers,LVS) 使用負載均衡技術將多臺服務器組成一個虛擬服務器。它為適應快速增長的網絡訪問需求提供了一個負載能力易於擴展,而價格低廉的解決方案。lvs已經集成到linux 2.6版本以上的內核中。lvs的負載能力特別強,優化空間特別大,lvs的變種DPVS據說是lvs性能的幾倍,由愛奇藝開發,並廣泛用於愛奇藝IDC。其他負載均衡服務器還有nginx,haproxy,F5,Netscale。
二、LVS基本原理
1)當用戶向負載均衡調度器(Director Server)發起請求,調度器將請求發往至內核空間。
2)PREROUTING鏈首先會接收到用戶請求,判斷目標IP確定是本機IP,將數據包發往INPUT鏈。
3)IPVS是工作在INPUT鏈上的,當用戶請求到達INPUT時,IPVS會將用戶請求和自己已定義好的集群服務進行比對,如果用戶請求的就是定義的集群服務,那麽此時IPVS會強行修改數據包裏的目標IP地址及端口,並將新的數據包發往POSTROUTING鏈。
4)POSTROUTING鏈接收數據包後發現目標IP地址剛好是自己的後端服務器,那麽此時通過選路,將數據包最終發送給後端的服務器。
三、LVS組成
LVS 由2部分程序組成,包括 ipvs 和 ipvsadm。
1、IPVS(ip virtual server):一段代碼工作在內核空間,叫IPVS,是真正生效實現調度的代碼。IPVS的總體結構主要由IP包處理、負載均衡算法、系統配置與管理三個模塊及虛擬服務器與真實服務器鏈表組成。
2、ipvsadm:另外一段是工作在用戶空間,叫ipvsadm,即IPVS管理器,負責為ipvs內核框架編寫規則,定義誰是集群服務,而誰是後端真實的服務器(Real Server)。
四、LVS技術術語
l DS:Director Server。指的是前端負載均衡器節點。
l RS:Real Server。後端真實的工作服務器。
l VIP:Virtual IP,向外部直接面向用戶請求,作為用戶請求的目標的IP地址。
l DIP:Director Server IP,主要用於和內部主機通訊的IP地址。
l RIP:Real Server IP,後端服務器的IP地址。
l CIP:Client IP,訪問客戶端的IP地址。
五、LVS工作模式和原理
5.1、NAT模式
5.1.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.2、NAT特性
l RIP最好是內網IP
l RS的網關必須指向DIP。
l DIP和RIP必須在同一個網段內。
l 請求和回應的報文都必須經過director,director容易成為瓶頸。
l nat支持端口轉發。
5.2、DR模式
5.2.1、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.2、配置DR有三種方式:
第一種方式:
在路由器上明顯說明vip對應的地址一定是Director上的MAC,只要綁定,以後再跟vip通信也不用再請求了,這個綁定是靜態的,所以它也不會失效,也不會再次發起請求,但是有個前提,我們的路由設備必須有操作權限能夠綁定MAC地址,萬一這個路由器是運行商操作的,我們沒法操作怎麽辦?第一種方式固然很簡便,但未必可行。
第二種方式:
在給別主機上(例如:紅帽)它們引進的有一種程序arptables,它有點類似於iptables,它肯定是基於arp或基於MAC做訪問控制的,很顯然我們只需要在每一個real server上定義arptables規則,如果用戶arp廣播請求的目標地址是本機的vip則不予相應,或者說相應的報文不讓出去,很顯然網關(gateway)是接受不到的,也就是director相應的報文才能到達gateway,這個也行。第二種方式我們可以基於arptables。
第三種方式:
在相對較新的版本中新增了兩個內核參數(kernelparameter),第一個是arp_ignore定義接受到ARP請求時的相應級別;第二個是arp_announce定義將自己地址向外通告時的通告級別。【提示:很顯然我們現在的系統一般在內核中都是支持這些參數的,我們用參數的方式進行調整更具有樸實性,它還不依賴於額外的條件,像arptables,也不依賴外在路由配置的設置,反而通常我們使用的是第三種配置】
arp_ignore:定義接受到ARP請求時的相應級別
0: 只要本地配置的有相應地址,就給予響應。(默認)
1: 僅回應目標IP地址是本地的入網地址的arp請求。
2: 僅回應目標IP地址是本地的入網地址,而且源IP和目標IP在同一個子網的arp請 求。
3: 不回應該網絡界面的arp請求,而只對設置的唯一和連接地址做出回應
4-7:保留未使用
8: 不回應所有的arp請求。
arp_announce:定義將自己地址向外通告是的通告級別;
0: 將本地任何接口上的任何地址向外通告
1: 試圖僅向目標網絡通告與其網絡匹配的地址
2: 僅向與本地接口上地址匹配的網絡進行通告
5.2.3、DR特性
l 特點1:保證前端路由將目標地址為VIP報文統統發給Director Server,而不是RS。
l Director和RS的VIP為同一個VIP。
l RS可以使用私有地址;也可以是公網地址,如果使用公網地址,此時可以通過互聯網對RIP進行直接訪問。
l RS跟Director Server必須在同一個物理網絡中。
l 所有的請求報文經由Director Server,但響應報文必須不能進過Director Server。
l 不支持地址轉換,也不支持端口映射
l RS可以是大多數常見的操作系統
l RS的網關絕不允許指向DIP(因為我們不允許他經過director)
l RS上的lo接口配置VIP的IP地址
l DR模式是市面上用得最廣的。
l 缺陷:RS和DS必須在同一機房中
補充:特點1的解決方法
l 在前端路由器做靜態地址路由綁定,將對於VIP的地址僅路由到Director Server。
l 存在問題:用戶未必有路由操作權限,因為有可能是運營商提供的,所以這個方法未必實用。
l arptables:在arp的層次上實現在ARP解析時做防火墻規則,過濾RS響應ARP請求。這是由iptables提供的。
l 修改RS上內核參數(arp_ignore和arp_announce)將RS上的VIP配置在lo接口的別名上,並限制其不能響應對VIP地址解析請求。
5.3、Tunnel模式
5.3.1、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.2、Tunnel模式特性
l RIP、VIP、DIP全是公網地址。
l RS的網關不會也不可能指向DIP
l 所有的請求報文經由Director Server,但響應報文必須不能進過Director Server
l 不支持端口映射
l RS的系統必須支持隧道
六、LVS的調度算法
固定調度算法:rr,wrr,dh,sh
動態調度算法:wlc,lc,lblc,lblcr
固定調度算法:即調度器不會去判斷後端服務器的繁忙與否,一如既往得將請求派發下去。
動態調度算法:調度器會去判斷後端服務器的繁忙程度,然後依據調度算法動態得派發請求。
6.1、rr:輪詢(round robin)
這種算法是最簡單的,就是按依次循環的方式將請求調度到不同的服務器上,該算法最大的特點就是簡單。輪詢算法假設所有的服務器處理請求的能力都是一樣的,調度器會將所有的請求平均分配給每個真實服務器,不管後端 RS 配置和處理能力,非常均衡地分發下去。這個調度的缺點是,不管後端服務器的繁忙程度是怎樣的,調度器都會講請求依次發下去。如果A服務器上的請求很快請求完了,而B服務器的請求一直持續著,將會導致B服務器一直很忙,而A很閑,這樣便沒起到均衡的左右。
6.2、wrr:加權輪詢(weight round robin)
這種算法比 rr 的算法多了一個權重的概念,可以給 RS 設置權重,權重越高,那麽分發的請求數越多,權重的取值範圍 0 – 100。主要是對rr算法的一種優化和補充, LVS 會考慮每臺服務器的性能,並給每臺服務器添加要給權值,如果服務器A的權值為1,服務器B的權值為2,則調度到服務器B的請求會是服務器A的2倍。權值越高的服務器,處理的請求越多。
6.3、dh:目標地址散列調度算法 (destination hash)
簡單的說,即將同一類型的請求分配給同一個後端服務器,例如將以 .jgp、.png等結尾的請求轉發到同一個節點。這種算法其實不是為了真正意義的負載均衡,而是為了資源的分類管理。這種調度算法主要應用在使用了緩存節點的系統中,提高緩存的命中率。
6.4、sh:源地址散列調度算法(source hash)
即將來自同一個ip的請求發給後端的同一個服務器,如果後端服務器工作正常沒有超負荷的話。這可以解決session共享的問題,但是這裏有個問題,很多企業、社區、學校都是共用的一個IP,這將導致請求分配的不均衡。
6.5、lc:最少連接數(least-connection)
這個算法會根據後端 RS 的連接數來決定把請求分發給誰,比如 RS1 連接數比 RS2 連接數少,那麽請求就優先發給 RS1。這裏問題是無法做到會話保持,即session共享。
6.6、wlc:加權最少連接數(weight least-connection)
這個比最少連接數多了一個加權的概念,即在最少連接數的基礎上加一個權重值,當連接數相近,權重值越大,越優先被分派請求。
6.7、lblc:基於局部性的最少連接調度算法(locality-based least-connection)
將來自同一目的地址的請求分配給同一臺RS如果這臺服務器尚未滿負荷,否則分配給連接數最小的RS,並以它為下一次分配的首先考慮。
6.8、lblcr:基於地址的帶重復最小連接數調度 (Locality-Based Least-Connection with Replication)
這個用得少,可以略過。
七、LVS部署
7.1、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
對於某一目的地址,對應有一個RS子集。對此地址的請求,為它分配子集中連接數最小的RS;如果子集中所有的服務器均已滿負荷,則從集群中選擇一個連接數較小的 服務器,將它加入到此子集並分配連接;若一定時間內,這個子集未被做任何修改,則將子集中負載最大的節點從子集刪除。
7.2、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
#iptables -t nat -X
#iptables -t nat -A POSTROUTING -s 192.168.229.0/24 -j MASQUERADE
#!/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.3、DR模式測試
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: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.4、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
error: "net.bridge.bridge-nf-call-ip6tables" is an unknown key
error: "net.bridge.bridge-nf-call-iptables" is an unknown key
error: "net.bridge.bridge-nf-call-arptables" is an unknown key
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
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,不然訪問不成功。
註:大部分內容摘自網絡,補充了我個人的實驗和理解。
LVS原理詳解以及部署