2014年1月16日 星期四

[研究] LVS-DR 1.2.1 負載平衡安裝 (CentOS 6.5 x64)

[研究] 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

1 則留言:

  1. 你好想請教你一些LVS的問題 請問有其他的聯絡方式嗎?

    回覆刪除