Linux下VS/DR+heartbeat+ldirectory 實現高可用負載均衡服務
系統環境CentOS 5.4:
# uname -r
2.6.18-128.el5
IP分配:
client eth0 10.10.10.10
ldrictory eth1 10.10.10.1
eth0 192.168.77.222
realserver1 eth0 192.168.77.221
realserver2 eth0 192.168.77.225
LVS簡介:
開發者:
章文嵩(博士) 個人主頁:http://zh.linuxvirtualserver.org
三種模式:
VS/NAT VS/DR VS/TUN
十種算法:
Fixed echeduling(rr wrr dh sh)===========靜態調度方法
1. 輪叫 Round-robin (RR)
調度器通過"輪叫"調度算法將外部請求按順序輪流分配到集羣中的真實服務器上,它均等地對待每一臺服務器,
而不管服務器上實際的連接數和系統負載。
2. 加權輪叫 Weithted round-robin (WRR)
調度器通過"加權輪叫"調度算法根據真實服務器的不同處理能力來調度訪問請求。這樣可以保證處理能力強的服務器處理更
多的訪問流量。調度器可以自動問詢真實服務器的負載情況,並動態地調整其權值
3. 目標地址散列 Destination hashing (DH)
"目標地址散列"調度算法根據請求的目標IP地址,作爲散列鍵(Hash Key)從靜態分配的散列表找出對應的服務器,若該服務器
是可用的且未超載,將請求發送到該服務器,否則返回空。
4. 源地址散列 Source hash (SH)
"源地址散列"調度算法根據請求的源IP地址,作爲散列鍵(Hash Key)從靜態分配的散列表找出對應的服務器,若該服務器是可
用的且未超載,將請求發送到該服務器,否則返回空。
Dynamic Scheduling (lc wlc sed nq lblc lblcr)======================動態調度方法
其算法是:活動鏈接數x256+非活動鏈接數 將client請求分給數值小的服務器。
1. 最少鏈接 Least-connect (LC)
調度器通過"最少連接"調度算法動態地將網絡請求調度到已建立的鏈接數最少的服務器上。如果集羣系統的真實服務器具有相近
的系統性能,採用"最小連接"調度算法可以較好地均衡負載。
2. 加權最少鏈接 Weighted least-connection (WLC) (Default)
在集羣系統中的服務器性能差異較大的情況下,調度器採用"加權最少鏈接"調度算法優化負載均衡性能,具有較高權值的服務器
將承受較大比例的活動連接負載。調度器可以自動問詢真實服務器的負載情況,並動態地調整其權值。
3. 最短期望連接Shortest Expected delay(SED)
對wlc的改進,在wlc算法的基礎上給權重值加一,主要用來針對某個服務器活動鏈接數值爲0情況
4. 從不排隊Never Quene(NQ)
基於SED算法的改進,不排隊
5. 基於局部性的最少鏈接locality-based least-connection (LBLC)
基於局部的最少連接
6. 帶複製的基於局部性最少鏈接 Locality-Based Least Connectionswith Replication (LBLCR)
三種IP負載均衡技術的優缺點比較:
雜項 VS/NAT VS/TUN VS/DR
服務器操作系統 任意 支持隧道 多數(支持Non-arp )
服務器網絡 私有網絡 局域網/廣域網 局域網
服務器數目(100M網絡) 10-20 100 多(100)
服務器網關 負載均衡器 自己的路由 自己的路由
效率 一般 高 最高
查看ip_vs模塊:
檢測系統是否已經加載lvs模塊,默認在2.6.*以上的版本中已經加載了lvs模塊。
可以用modprobe -l命令查看,如果沒有的話需對內核打補丁,或者升級內核到2.6.18以上
# modprobe -l | grep ip_vs
/lib/modules/2.6.18-128.el5/kernel/net/ipv4/ipvs/ip_vs.ko
/lib/modules/2.6.18-128.el5/kernel/net/ipv4/ipvs/ip_vs_dh.ko
/lib/modules/2.6.18-128.el5/kernel/net/ipv4/ipvs/ip_vs_ftp.ko
/lib/modules/2.6.18-128.el5/kernel/net/ipv4/ipvs/ip_vs_lblc.ko
/lib/modules/2.6.18-128.el5/kernel/net/ipv4/ipvs/ip_vs_lblcr.ko
/lib/modules/2.6.18-128.el5/kernel/net/ipv4/ipvs/ip_vs_lc.ko
/lib/modules/2.6.18-128.el5/kernel/net/ipv4/ipvs/ip_vs_nq.ko
/lib/modules/2.6.18-128.el5/kernel/net/ipv4/ipvs/ip_vs_rr.ko
/lib/modules/2.6.18-128.el5/kernel/net/ipv4/ipvs/ip_vs_sed.ko
/lib/modules/2.6.18-128.el5/kernel/net/ipv4/ipvs/ip_vs_sh.ko
/lib/modules/2.6.18-128.el5/kernel/net/ipv4/ipvs/ip_vs_wlc.ko
/lib/modules/2.6.18-128.el5/kernel/net/ipv4/ipvs/ip_vs_wrr.ko
我們額外還需要下載ipvs管理工具ipvsadm
http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.25.tar.gz
安裝ipvsadm
## ln -sv /usr/src/kernels/2.6.18-128.el5-i686/ /usr/src/linux =====一定要做,不然報錯,
詳細請看README
# tar -zxvf ipvsadm-1.25.tar.gz
# make && make install
NAT模式:
架構圖:
directory配置:
[root@node1 ~]# service iptables stop ========================保險期間realserver,ldirectory防火牆均需關閉,
因爲iptables和ipvsadm公用netfilter,會衝突
Flushing firewall rules: [ OK ]
Setting chains to policy ACCEPT: mangle [ OK ]
Unloading iptables modules: [ OK ]
# echo 1 > /proc/sys/net/ipv4/ip_forward
# ipvsadm -C
# ipvsadm -A -t 10.10.10.1:80 -s wrr
# ipvsadm -a -t 10.10.10.1:80 -r 192.168.77.221:80 -w 1 -m
# ipvsadm -a -t 10.10.10.1:80 -r 192.168.77.225:80 -w 3 -m -m表示nat模式一定要加,默認是DR模式
# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.10.10.1:80 wrr
-> 192.168.77.225:80 Masq 3 0 0
-> 192.168.77.221:80 Masq 1 0 0 Masq 會是route
realserver配置:
1.安裝web服務,保證web正常訪問
2.realserver需將網關指向directory即可
測試:
在client上 http://10.10.10.1 測試
DR模式:
這裏我們將HA和HL放到一塊來做,即:VS/DR+heartbeat高可用負載均衡的實現
架構圖:
開始之前我們需要提到幾個概念和注意的問題:
1.arp隱藏
2.爲什麼網上所有的VS/DR配置文檔中,rip vip dip都是在一個網段中(我暫時沒有找到,那位找到的請一定給我個網址,ths)
++++++++++++++++++++++++++++++++++++++++++++++++++++
1.arp隱藏的原理
在LVS的DR模式下,有一個必須要處理的問題就是real server上的ARP響應問題。其實,這個問題不只是LVS,其他的L4 Switch方案比如Foundry的ServerIron,也需要設置real server上的ARP響應。因爲這是這種方案的結構決定的。
根據LVS官方說明,在LVS 的DR模式下,前端的director接收到用戶請求以後,director根據後端real server的負載情況,動態地選擇一臺real server,不修改也不封裝IP報文,而是將數據幀的MAC地址改爲選出的real server的MAC地址,再將修改後的數據幀在與服務器組的局域網上發送。因爲數據幀的MAC地址是選出的real server,所以被選出來的那臺real server肯定可以收到這個數據幀,從中可以獲得該IP報文。當服務器發現報文的目標地址VIP是在本地的網絡設備上,服務器處理這個報文,然後根據路由表將響應報文直接返回給客戶,客戶認爲得到正常的服務,而不會知道是哪一臺服務器處理的。
VS/DR負載調度器也只處於從客戶到服務器的半連接中,按照半連接的TCP有限狀態機進行狀態遷移。
從上邊的LVS DR工作原理可以看到一個客戶端計算機發送一個ARP廣播到LVS-DR集羣,因爲Director和集羣節點(真實服務器1)都是連接到相同的網絡上的,它們都會接收到ARP廣播“是誰的VIP1?”,這個時候我們希望的是隻有前端的director來對用戶進行響應,其他real server不應該響應用戶直接的ARP包。(參考下邊兩幅引用51cto網站的圖)
因此必須對real server進行一定的處理,使其不響應VIP接口上的ARP請求。在2.6系列的內核中,採用的方式是設置arp_announce和arp_ignore這兩個內核參數。
arp_ignore=1,系統只回答目的IP爲是本地IP的包。也就是對廣播包不做響應。
arp_announce=2,系統忽略IP包的源地址(source address),而根據目標主機(target host),選擇本地地址。
而且凡是能收到對VIP ARP廣播報文的網口,都需要設置。設置的方法是修改/etc/sysctl.conf文件
永久的:
net.ipv4.ip_forward = 1
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
或
臨時:
echo 1 > /proc/sys/net/ipv4/cconf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/cconf/lo/arp_announce
echo 1 > /proc/sys/net/ipv4/cconf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/cconf/lall/arp_announce
參數的具體含義:
arp_announce : INTEGER
默認爲0
對網絡接口上本地IP地址發出的ARP迴應作出相應級別的限制:
確定不同程度的限制,宣佈對來自本地源IP地址發出Arp請求的接口
0 - (默認) 在任意網絡接口上的任何本地地址
1 -儘量避免不在該網絡接口子網段的本地地址. 當發起ARP請求的源IP地址是被設置應該經由路由達到此網絡接口的時候很有用.此時會檢查來訪IP是否爲所有接口上的子網段內ip之一.如果改來訪IP 不屬於各個網絡接口上的子網段內,那麼將採用級別2的方式來進行處理.
2 - 對查詢目標使用最適當的本地地址.在此模式下將忽略這個IP數據包的源地址並嘗試選擇與能與該地址通信的本地地址.首要是選擇所有的網絡接口的子網中外出訪問子網中包含該目標IP地址的本地地址. 如果沒有合適的地址被發現,將選擇當前的發送網絡接口或其他的有可能接受到該ARP迴應的網絡接口來進行發送
all/ 和{interface}/ 下兩者同時比較,取較大一個值生效.
提高約束級別有益於從指定的目標接受應答,而降低級別可以給予更多的arp查詢者以反饋信息(關於arp代理這一段我普遍翻譯地不好,去啃一下tcp/ip bible的卷一,然後再翻譯吧)
arp_ignore : INTEGER
默認爲0
定義對目標地址爲本地IP的ARP詢問不同的應答模式
0 - (默認值): 迴應任何網絡接口上對任何本地IP地址的arp查詢請求(比如eth0=192.168.0.1/24,eth1=10.1.1.1/24,那麼即使 eth0收到來自10.1.1.2這樣地址發起的對10.1.1.1 的arp查詢也會迴應--而原本這個請求該是出現在eth1上,也該有eth1迴應的)
1 - 只回答目標IP地址是來訪網絡接口本地地址的ARP查詢請求(比如eth0=192.168.0.1/24,eth1=10.1.1.1/24,那麼即使 eth0收到來自10.1.1.2這樣地址發起的對192.168.0.1的查詢會回答,而對10.1.1.1 的arp查詢不會迴應)
2 -只回答目標IP地址是來訪網絡接口本地地址的ARP查詢請求,且來訪IP必須在該網絡接口的子網段內(比如 eth0=192.168.0.1/24,eth1=10.1.1.1/24,eth1收到來自10.1.1.2這樣地址發起的對192.168.0.1 的查詢不會回答,而對192.168.0.2發起的對192.168.0.1的arp查詢會迴應)
3 - 不迴應該網絡界面的arp請求,而只對設置的唯一和連接地址做出迴應(do not reply for local addresses configured with scope host,only resolutions for global and link addresses are replied 翻譯地似乎不好,這個我的去問問人)
4-7 - 保留未使用
8 -不迴應所有(本地地址)的arp查詢
all/ 和{interface}/ 下兩者同時比較,取較大一個值生效.
2.rip vip dip都是在一個網段中,其實沒有必要,因爲linux內核默認是不轉發源IP是自己的包,我們需要打forward_shared補丁包,
遺憾的是我沒有堅持下來,呵呵,帶日後有時間了再殺他一回。呵呵
參考文章:
http://www.cnblogs.com/ljkeke/archive/2009/02/17/1392693.html
可以在調度器上使用DR方式,真實服務器使用私有地址並在邏輯設備上配置虛擬IP地址,用調度器作網關訪問公網。
但是,linux內核發行版基本上不支持 share_forward和rp_filter選項,它不會轉發源IP是自已的包,所以要打
forward_shared補丁和使用那兩個選項來實現包的轉發。
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
directory配置: 兩臺配置基本一樣
安裝heartbeat:
http://www.ultramonkey.org/download/heartbeat/2.1.3/heartbeat-2.1.3.tar.gz
http://hg.linux-ha.org/heartbeat-STABLE_3_0/archive/STABLE-3.0.3.tar.bz2 這個貌似很新,但是我一直沒有下載成功過
http://down.51cto.com/download.php?do=attachment&aid=107685&k=c8469a3d5830e56e6cd13060a0ed7816&t=1281434320
我用的是第三個鏈接(解壓縮後是八個包),因爲第一個是源代碼包,中間編譯過程會因爲系統的不同出現不同的需求和錯誤,
很是麻煩。如果鏈接失敗的話,可以給我留言,我郵件給諸位
# ls
heartbeat-2.1.4-9.el5.i386.rpm heartbeat-pils-2.1.4-10.el5.i386.rpm
heartbeat-devel-2.1.4-9.el5.i386.rpm heartbeat-stonith-2.1.4-10.el5.i386.rpm
heartbeat-gui-2.1.4-9.el5.i386.rpm libnet-1.1.4-3.el5.i386.rpm
heartbeat-ldirectord-2.1.4-9.el5.i386.rpm perl-MailTools-1.77-1.el5.noarch.rpm
# yum localinstall ./*.rpm
# rpm -qa | grep heartbeat
heartbeat-2.1.4-9.el5
heartbeat-devel-2.1.4-9.el5
heartbeat-ldirectord-2.1.4-9.el5
heartbeat-pils-2.1.4-10.el5
heartbeat-gui-2.1.4-9.el5
heartbeat-stonith-2.1.4-10.el5
# pwd
/etc/ha.d ==================主目錄
# ls
apphbd.cf COPYING.LGPL GettingStarted.txt hb_report.html README startstop
authkeys DirectoryMap.txt ha.cf hb_report.txt Requirements.html
AUTHORS faqntips.html HardwareGuide.html heartbeat_api.html Requirements.txt
ChangeLog faqntips.txt HardwareGuide.txt heartbeat_api.txt rsync.html
COPYING GettingStarted.html haresources logd.cf rsync.txt
# cp /usr/share/doc/heartbeat-2.1.4/authkeys ha.cf haresources /etc/ha.d/
# service heartbeat start
#echo -ne "auth1\n1 sha1" >> authkeys
#dd if=/dev/urandom bs=512 count=1 | openssl md5 >> authkeys
1+0 records in
1+0 records out
512 bytes (512 B) copied, 0.000372942 seconds, 1.4 MB/s
我們可以看到裏面新增了兩行
#vim /etc/ha.d/authkeys
auth1
1 sha1 9e43d13a84f2b9ea486516d709e748b5
# vim ha.cf =============開啓如下行,具體含義如下
debugfile /var/log/ha-debug
logfacility local0
keepalive 2
deadtime 30
warntime 10
initdead 120
udpport 694
bcast eth1
auto_failback on
node node1.example.com
node node2.example.com
# vim haresources ===========聲明主節點和虛擬ip地址
node1.example.com 192.168.77.250 httpd
#chmod 600 Authkeys
配置ha.cf
這個配置文件告訴heartbeat 使用的是什麼介質和如何配置它們。ha.cf 包含你將到的所有的選項,內容如下:
serial /dev/ttyS0
使用串口heartbeat - 如果你不使用串口heartbeat, 你必須選擇其它的介質,比如以太網bcast (ethernet) heartbeat。如果你使用其它串口heartbeat,修改/dev/ttyS0 爲其它的串口設備。
watchdog /dev/watchdog
可選項:watchdog功能提供 了一種方法能讓系統在出現故障無法提供"heartbeat"時,仍然具有最小的功能,能在出現故障1分鐘後重啓該機器。這個功能可以幫助服務器在確實停 止心跳後能夠重新恢復心跳。如果你想使用該特性,你必須在內核中裝入"softdog" 內核模塊用來生成實際的設備文件。想要達到這個目的, 首先輸入 "insmod softdog" 加載模塊。然後,輸入"grep misc /proc/devices" 注意顯示的數字 (should be 10).然後, 輸入"cat /proc/misc | grep watchdog" 注意輸出顯示出的數字(should be 130)。現在你可以生成設備文件使用如下命令:"mknod /dev/watchdog c 10 130" 。
bcast eth1
指定使用的廣播heartbeat 的網絡接口eth1(修改爲eth0, eth2, 或你所使用的接口)
keepalive 2
設置心跳間隔時間爲2兩秒。
warntime 10
在日誌中發出最後心跳"late heartbeat" 前的警告時間設定。
deadtime 30
在30秒後明確該節點的死亡。
initdead 120
在一些配置中,節點重啓後需要花一些時間啓動網絡。這個時間與"deadtime"不同,要單獨對待。 至少是標準死亡時間的兩倍。
hopfudge 1
可選項: 用於環狀拓撲結構,在集羣中總共跳躍節點的數量。
baud 19200
串口波特率的設定(bps).
udpport 694
bcast和ucast通訊使用的端口號694 。這是缺省值,官方IANA 使用標準端口號。
nice_failback on
可選項:對那些熟悉Tru64 Unix, 心跳活動就像是"favored member"模式。主節點獲取所有資源直到它宕機,同時備份節點啓用。一旦主節點重新開始工作, 它將從備份節點重新獲取所有資源。這個選項用來防止主節點失效後重新又獲得集羣資源。
node linuxha1.linux-ha.org
強制選項:通過`uname -n`命令顯示出的集羣中的機器名。
node linuxha2.linux-ha.org
強制選項:通過`uname -n`命令顯示出的集羣中的機器名。
respawnuseridcmd
可選項:列出可以被spawned 和監控的命令。例如:To spawn ccm 後臺進程,可以增加如下內容:
respawn hacluster /usr/lib/heartbeat/ccm
通知heartbeat 重新以可信任userid身份運行(在我們的例子中是hacluster) 同時監視該進程的"健康"狀況,如果進程死掉,重啓它。例如ipfail, 內容如下:
respawn hacluster /usr/lib/heartbeat/ipfail
NOTE: 如果進程以退出代碼100死掉, 這個進程將不會respawned。
pingping1.linux-ha.orgping2.linux-ha.org ....
可選項:指定ping 的節點。 這些節點不是集羣中的節點。它們用來檢測網絡的連接性,以便運行一些像ipfail的模塊。
2.6.5.2. 配置 haresources
一旦你配置好了ha.cf文件,下面就需要設置haresources文件,這個文件指定集羣所提供的服務以及誰是缺省的主節點。注意,該配置文件在所有節點應該是相同的。
在我們的例子中,我們的HA集羣提供的是負載均衡服務(LVS)和服務監控服務(Ldirectord)。這裏集羣的IP(虛擬)地址是必須配置的,不要在haresources文件以外的地方配置該IP地址。所以我們應該添加如下一行:
linuxha1 IPaddr::192.168.7.110/24/192.168.7.255 ipvsadm ldirectord::www ldirectord::mail
::前的表示服務腳本名稱(IPaddr),你可以在目錄/etc/ha.d/resource.d下找到一個腳本名叫 Ipaddr,後面的表示輸入的參數。
Heartbeat 會在下面的路徑搜索同名的啓動腳本:
/etc/ha.d/resource.d
/etc/rc.d/init.d
這裏的服務腳本的使用是符合Init標準語法,所以你可以在這裏通過Heartbeat方便地運行、停止/etc/rc.d/init.d下標準的服務後臺進程。
2.6.5.3. 配置 Authkeys
配置加密認證算法,有三種算法:CRC, md5,sha1。你會問我們應該用哪種呢?
如果你的heartbeat 運行在一個安全的網絡,例如CAT5交叉線,你可以用CRC,從資源開銷上來說,這是最節省開銷的。如果網絡是不可靠的,而且你也不是一個網絡安全癡狂者 或者你十分關心CPU資源的最小開銷,就用md5,最後如果你關心的是安全而不是CPU資源的開銷,那麼建議你使用sha1,你將會得到最佳的安全度,很難被***所破解。
格式如下:auth <number><number> <authmethod> [<authkey>]
例: /etc/ha.d/authkeys
使用sha1
auth 1
1 sha1 key-for-sha1-any-text-you-want
使用md5
auth 1
1 sha1 key-for-md5-any-text-you-want
使用CRC
auth 2
2 crc
設置調度算法:
# ipvsadm -C
# ipvsadm -A -t 192.168.77.250:80 -s wrr
# ipvsadm -a -t 192.168.77.250:80 -r 192.168.77.221:80 -w 1 -g
# ipvsadm -a -t 192.168.77.250:80 -r 192.168.77.225:80 -w 3 -g
# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.77.250:80 wrr
-> 192.168.77.225:80 Route 3 0 0
-> 192.168.77.221:80 Route 1 0 0
這裏需要注意的是:
1.一定確保每個ldirectoty的hosts文件中都有其他directory的名稱解析,(或者建DNS服務一也可,強烈的不建議哈)
不然ldirectory會找不到其他的ldriectory調度器
2.Nat模式需要開啓ip_forward=1路由功能,而在DR模式中是不需要開啓IP_forward功能的,除非是因爲有特別要求
# hostname
node1.example.com 另外一臺爲node2.example.com
# cat /etc/hosts ====================兩臺directory hosts文件中需聲明,並作相應配置
192.168.0.1 node1.example.com node1
192.168.77.222 node1.example.com node1
192.168.0.2 node2.example.com node2
192.168.77.220 node2.example.com node2
realserver配置:
#service httpd stop ============證實web服務是由heartbeat控制的,而非realserver自身了
# echo 1 > /proc/sys/net/ipv4/cconf/lo/arp_ignore
# echo 2 > /proc/sys/net/ipv4/cconf/lo/arp_announce
# echo 1 > /proc/sys/net/ipv4/cconf/all/arp_ignore
# echo 2 > /proc/sys/net/ipv4/cconf/lall/arp_announce
# ifconfig lo:0 192.168.77.250 broadcast 192.168.77.250 netmask 255.255.255.255 up
# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.77.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
0.0.0.0 192.168.77.222 0.0.0.0 UG 0 0 0 eth0
# route add -host 192.168.77.250 dev lo:0
# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.77.250 0.0.0.0 255.255.255.255 UH 0 0 0 lo
192.168.77.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
0.0.0.0 192.168.77.222 0.0.0.0 UG 0 0 0 eth0
測試:
1.在client測試 http://192.168.77.250 會輪顯兩臺realserver的web內容(建議將兩臺web的內容設置不一樣,以便於區別)
2.關掉master directory,網頁依然可以正常訪問,在輔助directory上執行
#ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.77.250:80 wrr
-> 192.168.77.225:80 Route 3 0 0
-> 192.168.77.221:80 Route 1 0 0
# ifconfig
eth0 Link encap:Ethernet HWaddr 00:0C:29:FF:42:84
inet addr:192.168.77.220 Bcast:192.168.77.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:feff:4284/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:140116 errors:0 dropped:0 overruns:0 frame:0
TX packets:23633 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:18547910 (17.6 MiB) TX bytes:2062186 (1.9 MiB)
Interrupt:67 Base address:0x2000
eth0:0 Link encap:Ethernet HWaddr 00:0C:29:FF:42:84
inet addr:192.168.77.250 Bcast:192.168.77.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
Interrupt:67 Base address:0x2000
eth1 Link encap:Ethernet HWaddr 00:0C:29:FF:42:8E
inet addr:192.168.7.220 Bcast:192.168.7.255 Mask:255.255.255.0
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:70991 errors:0 dropped:0 overruns:0 frame:0
TX packets:10549 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:10854575 (10.3 MiB) TX bytes:2693378 (2.5 MiB)
Interrupt:75 Base address:0x2080
我們會發現虛擬IP地址192.168.77.250:80會自動添加過來