[研究] LVS-DR 1.2.1 負載平衡安裝 (CentOS 6.5 x64)
2014-01-16
參考 :
LVS (Linux Virtual Server)
http://www.linuxvirtualserver.org/
本篇研究 LVS 之 DR 模式(Direct Routing)的 負載平衡
環境 :
Load Balance(負載平衡器,CentOS 6.5 x64) eth0:192.168.128.103
Virtual IP(虛擬服務器,不是主機): 192.168.128.100
RealServer1(真實服務器,CentOS 6.5 x64):192.168.128.101
RealServer2(真實服務器,CentOS 6.5 x64):192.168.128.102
測試主機 (Windows 7 x64),任選 Load Balance, RealServer1, RealServer2 三台以外的主機進行測試
nameserver: 168.95.1.1
gateway: 192.168.128.2
-----------------------------------------------------------------------
零、關閉 SELinux 和防火牆 (LoadBalance, RealServer1, RealServer2 上)
setenforce 0
getenforce
sed -i -e "s@SELINUX=enforcing@#SELINUX=enforcing@" /etc/selinux/config
sed -i -e "s@SELINUX=permissive@#SELINUX=permissive@" /etc/selinux/config
sed -i -e "/SELINUX=/aSELINUX=disabled" /etc/selinux/config
service iptables stop
chkconfig iptables off
-----------------------------------------------------------------------
一、 首先配置Load Balance:
[root@LoadBalance ~]# yum list | grep ipvsadm
ipvsadm.x86_64 1.26-2.el6 base
[root@LoadBalance ~]#
yum -y install ipvsadm
echo 1 > /proc/sys/net/ipv4/ip_forward
cat /proc/sys/net/ipv4/ip_forward
sed -i -e "s@net.ipv4.ip_forward = 0@net.ipv4.ip_forward = 1@" /etc/sysctl.conf
cat /etc/sysctl.conf | grep net.ipv4.ip_forward
sysctl -p
ipvsadm -A -t 192.168.128.100:80 -s rr
ipvsadm -a -t 192.168.128.100:80 -r 192.168.128.101:80 -g
ipvsadm -a -t 192.168.128.100:80 -r 192.168.128.102:80 -g
ipvsadm --save > /etc/sysconfig/ipvsadm
ifconfig eth0:1 192.168.128.100 netmask 255.255.255.0
echo "DEVICE=eth0:1" >> /etc/sysconfig/network-scripts/ifcfg-eth0:1
echo "ONBOOT=yes" >> /etc/sysconfig/network-scripts/ifcfg-eth0:1
echo "BOOTPROTO=static" >> /etc/sysconfig/network-scripts/ifcfg-eth0:1
echo "IPADDR=192.168.128.100" >> /etc/sysconfig/network-scripts/ifcfg-eth0:1
echo "NETMASK=255.255.255.255" >> /etc/sysconfig/network-scripts/ifcfg-eth0:1
cat /etc/sysconfig/network-scripts/ifcfg-eth0:1
service network restart
sysctl -p
---------------------
PS :
(1) echo 1 > /proc/sys/net/ipv4/ip_forward 要 reboot 後仍有效,必須
# vi /etc/sysctl.conf
net.ipv4.ip_forward = 0 改為 net.ipv4.ip_forward = 1
設定檔要立刻生效可執行 sysctl -p
(2) 執行 ipvsadm 可以顯示目前狀態,ipvsadm -h 可以看說明
(3) ipvsadm 設定要 reboot 後有效,設定要存在 /etc/sysconfig/ipvsadm
(4) ifconfig eth0:1 192.168.128.100 netmask 255.255.255.0 要 reboot 仍有效
新增一個網卡設定
# vi /etc/sysconfig/network-scripts/ifcfg-eth0:1
內容如下:
DEVICE=eth0:1
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.128.100
NETMASK=255.255.255.255
設定檔要立刻生效,可執行 service network restart
但是這會讓 net.ipv4.ip_forward 失效,要再次執行 sysctl -p
-----------------------------------------------------------------------
二、RealServer1, RealServer2(真實服務器)設置
ifconfig eth0:1 192.168.128.100 netmask 255.255.255.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
echo "net.ipv4.conf.lo.arp_ignore = 1" >> /etc/sysctl.conf
echo "net.ipv4.conf.lo.arp_announce = 2" >> /etc/sysctl.conf
echo "net.ipv4.conf.all.arp_ignore = 1" >> /etc/sysctl.conf
echo "net.ipv4.conf.all.arp_announce = 2" >> /etc/sysctl.conf
sysctl -p
service httpd restart
驗證
cat /proc/sys/net/ipv4/conf/lo/arp_ignore
cat /proc/sys/net/ipv4/conf/lo/arp_announce
cat /proc/sys/net/ipv4/conf/all/arp_ignore
cat /proc/sys/net/ipv4/conf/all/arp_announce
---------------------
PS :
(1) arp 相關設定要在 reboot 後生效,必須
# vi /etc/sysctl.conf
增加
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
設定檔要立刻生效可執行 sysctl -p
-----------------------------------------------------------------------
三、首頁設置
RealServer 1 上
echo "RS1" > /var/www/html/index.html
RealServer 2 上
echo "RS2" > /var/www/html/index.html
PS: index.html 內容要不同,才可以看出效果
-----------------------------------------------------------------------
四、測試
在 Windows 7 上用 IE 瀏覽器連上 http://192.168.128.100
應該會先出現 RS1,按下 F5 更新畫面,會出現 RS2,按下 F5 更新畫面,.....
應該輪流出現 RS1 和 RS2
如果沒有輪流顯示 RS1 和 RS2
在 [開始/所有程式/附屬應用程式/命令提示字元] 上按下滑鼠右鍵選 [以系統管理員身分執行]
輸入 arp -d 命令清空 arp cache,如下:
C:\Windows\system32>arp -a 192.168.128.100 <== 顯示 192.168.128.100 目前對應的 實體位址
介面: 192.168.128.1 --- 0x12
網際網路網址 實體位址 類型
192.168.128.100 00-0c-29-6e-40-ab 動態
C:\Windows\system32>arp -d 192.168.128.100 <== 刪除 192.168.128.100 目前對應的 實體位址
C:\Windows\system32>arp -a 192.168.128.100 <== 顯示 192.168.128.100 目前對應的 實體位址
找不到 ARP 項目。 <== 因為刪除了找不到
此時在網頁上按下 F5 更新畫面,顯示應該會從 RS1 變成 RS2 或從 RS2 變成 RS1
arp -d * 雖可以刪除全部 arp cache 內容,但是偶而會出現錯誤訊息,如下:
C:\Windows\system32>arp -d *
C:\Windows\system32>arp -d *
ARP 項目刪除失敗: 參數錯誤。
C:\Windows\system32>arp -d *
或者注意是否設定了 Proxy,拿掉試看看;或把三台的 iptables 關閉試看看
也可以在 Load Balance 主機上看到工作分派情況
每次按下 F5 更新畫面後執行一次 ipvsadm --list
[root@LoadBalance ~]# ipvsadm --list
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.128.100:http rr
-> 192.168.128.101:http Route 1 0 4
-> 192.168.128.102:http Route 1 0 4
[root@LoadBalance ~]# ipvsadm --list
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.128.100:http rr
-> 192.168.128.101:http Route 1 0 4
-> 192.168.128.102:http Route 1 0 5
[root@LoadBalance ~]# ipvsadm --list
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.128.100:http rr
-> 192.168.128.101:http Route 1 0 5
-> 192.168.128.102:http Route 1 0 5
或用 ipvsadm -Lnc 看連線情況 (不會一直保留)
[root@LoadBalance ~]# ipvsadm -Lnc
IPVS connection entries
pro expire state source virtual destination
TCP 14:56 ESTABLISHED 192.168.128.1:3245 192.168.128.100:80 192.168.128.101:80
TCP 14:03 ESTABLISHED 192.168.128.1:3219 192.168.128.100:80 192.168.128.102:80
TCP 13:42 ESTABLISHED 192.168.128.1:3199 192.168.128.100:80 192.168.128.102:80
TCP 14:55 ESTABLISHED 192.168.128.1:3238 192.168.128.100:80 192.168.128.102:80
TCP 14:56 ESTABLISHED 192.168.128.1:3243 192.168.128.100:80 192.168.128.101:80
TCP 13:58 ESTABLISHED 192.168.128.1:3209 192.168.128.100:80 192.168.128.101:80
TCP 13:53 ESTABLISHED 192.168.128.1:3206 192.168.128.100:80 192.168.128.102:80
TCP 13:42 ESTABLISHED 192.168.128.1:3198 192.168.128.100:80 192.168.128.101:80
TCP 14:12 ESTABLISHED 192.168.128.1:3223 192.168.128.100:80 192.168.128.101:80
TCP 14:46 ESTABLISHED 192.168.128.1:3234 192.168.128.100:80 192.168.128.101:80
以上實際測試成功
瀏覽器的測試無法在三台 CentOS 6.5 x64 上測試
在 LoadBalance 上瀏覽 http://192.168.128.100 會無法顯示
在 RealServer1 上瀏覽 http://192.168.128.100 總是顯示 RS1
在 RealServer2 上瀏覽 http://192.168.128.100 總是顯示 RS2
一切測試 OK後,這時候可以去研究開啟和設定防火牆。
(完)
相關
Lvs之NAT、DR、TUN三種模式的應用配置案例
http://lansgg.blog.51cto.com/5675165/1229421
[研究] LVS-DR 1.2.1 安裝 (CentOS 6.5 x64)
http://shaurong.blogspot.com/2014/01/lvs-dr-121-centos-65-x64.html
[研究] 架設 LVS (Direct Routing Mode)(Fedora 7/CentOS 5.4)
http://forum.icst.org.tw/phpbb/viewtopic.php?t=17841
[研究] 架設 LVS (NAT Mode)(Fedora 7)
http://forum.icst.org.tw/phpbb/viewtopic.php?t=17862
你好想請教你一些LVS的問題 請問有其他的聯絡方式嗎?
回覆刪除