試用IPVS來做負載均衡,使用了1臺雙網卡服務器和2臺單網卡服務器,2個網段。服務器信息如下:

IP配置信息如下:
服務器 | 操作系統 | 網卡 | IP |
調度服務器 | Centos | eth0 | 192.168.18.58 |
eth1 | 192.168.2.90 |
實際服務器 | Centos | eth0 | 192.168.2.71 |
Centos | eth0 | 192.168.2.72 |
1. 首先配置調度服務器:
a) IPVS模塊已經內置到linux2.6.x內核中,可以通過下面的命令查看是否已安裝:
modprobe -l | grep ipvs
看到類似下面的輸出,表示已經安裝了
kernel/net/netfilter/ipvs/ip_vs.ko
kernel/net/netfilter/ipvs/ip_vs_rr.ko
kernel/net/netfilter/ipvs/ip_vs_wrr.ko
kernel/net/netfilter/ipvs/ip_vs_lc.ko
kernel/net/netfilter/ipvs/ip_vs_wlc.ko
kernel/net/netfilter/ipvs/ip_vs_lblc.ko
kernel/net/netfilter/ipvs/ip_vs_lblcr.ko
kernel/net/netfilter/ipvs/ip_vs_dh.ko
kernel/net/netfilter/ipvs/ip_vs_sh.ko
kernel/net/netfilter/ipvs/ip_vs_sed.ko
kernel/net/netfilter/ipvs/ip_vs_nq.ko
kernel/net/netfilter/ipvs/ip_vs_ftp.ko
kernel/net/netfilter/ipvs/ip_vs_pe_sip.ko
b) 安裝IPVS的管理工具ipvsadm:
yum install -y ipvsadm
c) 清除表中所有記錄:
ipvsadm -C
使用下面的命令增加虛擬服務器,采用輪詢調度策略:
ipvsadm -A -t 192.168.18.58:8888 -s rr
使用下面的命令添加實際服務器,并采用NAT方式轉發數據包:
ipvsadm -a -t 192.168.18.58:8888 -r 192.168.2.71:9999 -m
ipvsadm -a -t 192.168.18.58:8888 -r 192.168.2.72:9999 -m
d) 打開數據包轉發:
echo 1 > /proc/sys/net/ipv4/ip_forward
2. 接下來配置2臺實際服務器,分別做以下工作:
a) 在9999端口上啟動一個web服務:
配置好web服務后,當訪問http://192.168.2.71:9999時,頁面返回:This is 192.168.2.71.;當訪問http://192.168.2.72:9999時,頁面返回:This is 192.168.2.72.
b) 設置默認網關指向調度服務器
route del default
route add default gw 192.168.2.90
3. 測試
訪問192.168.18.58:8888,會顯示This is 192.168.2.71或This is 192.168.2.72,多次刷新應該要交替出現71和72,但實際上并沒有這樣,瀏覽器只顯示與第一次相同的內容,也就是ipvsadm每次都選擇了同一臺服務器。這是因為當一個TCP連接的初始SYN報文到達時,IPVS就選擇了一臺服務器,后繼報文會被轉發到相同的服務器。這個TCP連接在ipvsadm中默認有效時間為15分鐘,可以通過下面的命令查看:
ipvsadm -L --timeout
Timeout (tcp tcpfin udp): 900 120 300
現在將有效時間改為1秒來測試,使用下面的命令:
ipvsadm --set 1 120 300
再到瀏覽器中每隔1秒多點擊刷新,就會交替出現71和72,說明輪詢調度正在正常工作。