配置基於DR模式Lvs叢集
基本術語:
Director:前端負載均衡器,執行lvs,目前只能為Linux,針對FreeBSD剛剛出來,效能不是很好。可以針對web、ftp、cache、mms甚至mysql等服務做load balances。RealServer:後端需要負載均衡的伺服器,可以為各類系統,Linux、Solaris、Aix、BSD、Windows都可,甚至Director本身也可以作為RealServer使用.
lvs( Linux Virtual Server),Linux下的負載均衡器,支援LVS-NAT、 LVS-DR、LVS-TUNL三種不同的方式,nat用的不是很多,主要用的是DR、TUNL方式。DR
TUNL方式就對於RealServer的位置可以任意了,完全可以跨地域、空間,只要系統支援Tunnel就可以.方便以後擴充的話直接Tunl方式即可.
由此可知,配置叢集分以下幾種情況:一、配置基於DR模式Lvs叢集二、配置基於隧道模式Lvs叢集三、配置基於高可用Lvs+heartbeat
四、此種配置方式可以加強LVS的主節點的高安全性前提下(主節點簡稱DR,備份主節點DRbak),考慮充分利用資源可以將DRbak做為realserver。集群系統基本構架:
Load Balancer(負載均衡器):
Load Balancer是整個集群系統的前端,負責把客戶請求轉發到
Backup是備份Load Balancer,當Load Balancer不可用時接替它,成為實際的Load Balancer。
Load Balancer通過Ldirectord監測各Real Server的健康狀況。在Real Server不可用時把它從群中剔除,恢復時重新加入。
Server Array(伺服器群):
Server Array是一組執行實際應用服務的機器,比如WEB, Mail, FTP, DNS, Media等等。在實際應用中,Load Balancer和Backup也可以兼任Real Server的角色。以下的測試就是一臺伺服器既擔任了LVSserver,
Shared Storage(共享儲存):
Shared Storage為所有Real Server提供共享儲存空間和一致的資料內容。這一部分在這裡下面將詳述.
LVS的安裝部署
LVS+DR模式的部署一. 準備工作:
1. VMware server
採用vmware GSX server3.2,然後在虛擬機器上安裝了2個CENTOS4.4,安裝CENTOS的原因是它完全是免費的,且可以升級,是穩定的redhat版本.
2. 作業系統:
CENTOS 4.4下載:
到下載 1,2,3,4 張.iso 就可以了。
3. IPVS管理軟體可以到下載原始碼編譯檔案ipvsadm-1.24.tar.gz
也可以直接在下載類似ipvsadm-1.24-6.i386.rpm ,piranha-0.8.2-1.i386.rpm的rpm包進行安裝.
4:地址規劃:
LB真實地址:192.168.60.132
VIP地址(vistual IP,也就是你的URL需要解析到的地址, 或者說是提供對外http 服務的ip)192.168.60.200
Realserver1:192.168.60.132
Realserver2:192.168.60.144
即192.168.60.132是LVSserver,也是realserver.
二. 開始安裝:
1. 安裝 CENT OS 4.4 在vmware中我在選擇安裝包時選擇了 xwindows system, GNOME desktop environment,
KDE K DESKTOP environment, development tools, x software development,
gnome software development, kde software development.
2. 安裝完成後,copy 作業系統. 生成第二個.
3. 三個作業系統的ip 分別為:
(lvs server) 192.168.60.132
255.255.255.0
192.168.60.1 (gw)
(real server) 192.168.60.132
255.255.255.0
192.168.60.1 (gw)
(real server) 192.168.60.144
255.255.255.0
192.168.60.1 (gw)
192.168.60.132既是LVS server,又是real server.
4:在LVSserver上安裝IPVS管理軟體
IPVS安裝主要包括三方面:在Load Banlancer上安裝IPVS核心補丁在Load Banlancer上安裝IPVS管理軟體在Real Server上安裝ARP hidden核心補丁我採用的是rpm安裝方式,其它的realserver節點不用安裝這些東西.
Rpm –ivh ipvsadm-1.24-6.i386.rpm
Rpm –ivh piranha-0.8.2-1.i386.rpm
# ipvsadm --help 如果看到提示幫助就表成功。
5. 進入192.168.60.132 檢查kernel 是否已經包含 ipvs 模組
modprobe -l |grep ipvs
如果看到如下,就可以了,如果沒有還要重編核心,選上ipvs 模組。
/lib/modules/2.6.9-42.EL/kernel/net/ipv4/ipvs/ip_vs_wlc.ko
/lib/modules/2.6.9-42.EL/kernel/net/ipv4/ipvs/ip_vs_dh.ko
/lib/modules/2.6.9-42.EL/kernel/net/ipv4/ipvs/ip_vs_sed.ko
/lib/modules/2.6.9-42.EL/kernel/net/ipv4/ipvs/ip_vs_wrr.ko
/lib/modules/2.6.9-42.EL/kernel/net/ipv4/ipvs/ip_vs_lc.ko
/lib/modules/2.6.9-42.EL/kernel/net/ipv4/ipvs/ip_vs_rr.ko
/lib/modules/2.6.9-42.EL/kernel/net/ipv4/ipvs/ip_vs.ko
/lib/modules/2.6.9-42.EL/kernel/net/ipv4/ipvs/ip_vs_nq.ko
/lib/modules/2.6.9-42.EL/kernel/net/ipv4/ipvs/ip_vs_lblcr.ko
/lib/modules/2.6.9-42.EL/kernel/net/ipv4/ipvs/ip_vs_ftp.ko
/lib/modules/2.6.9-42.EL/kernel/net/ipv4/ipvs/ip_vs_sh.ko
/lib/modules/2.6.9-42.EL/kernel/net/ipv4/ipvs/ip_vs_lblc.ko
6:配置啟動指令碼
LvsServer上的指令碼:
#!/bin/bash
VIP=192.168.60.200
RIP1=192.168.60.132
RIP2=192.168.60.144
GW=192.168.60.1
# set the Virtual IP Address
/sbin/ifconfig eth0:0 $VIP broadcast $VIP netmask 255.255.255.255 up
/sbin/route add -host $VIP dev eth0:0
echo "1" >/proc/sys/net/ipv4/ip_forward
#Clear IPVS table
/sbin/ipvsadm -C
#set LVS
/sbin/ipvsadm -A -t $VIP:80 -s rr
/sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g
/sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g
/sbin/ipvsadm -a -t $VIP:80 -r $RIP3:80 -g
#Run LVS
/sbin/ipvsadm
#end
說明:
echo "1" >/proc/sys/net/ipv4/ip_forward,通過該引數來啟用包轉發功能,從而使系統充當路由器。引數值為1時啟用ip轉發,為0時禁止ip轉發。注意,我們可以在單網絡卡或雙網絡卡的主機上實現ip轉發.
也可以寫成這樣的服務指令碼:
#!/bin/sh
# description: start LVS of Directorserver
VIP=192.168.60.132
RIP1=192.168.60.132
RIP2=192.168.60.144
./etc/rc.d/init.d/functions
case "$1" in
start)
echo " start LVS of DirectorServer"
# set the Virtual IP Address and sysctl parameter
/sbin/ifconfig eth0:0 $VIP broadcast $VIP netmask 255.255.255.255 up
echo "1" >/proc/sys/net/ipv4/ip_forward
#Clear IPVS table
/sbin/ipvsadm -C
#set LVS
/sbin/ipvsadm -A -t $VIP:80 -s rr
/sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g
/sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g
/sbin/ipvsadm -a -t $VIP:80 -r $RIP3:80 -g
#Run LVS
/sbin/ipvsadm
;
stop)
echo "close LVS Directorserver"
echo "0" >/proc/sys/net/ipv4/ip_forward
/sbin/ipvsadm -C
/sbin/ifconfig eth0:0 down
;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
把此檔案放到/etc/init.d/lvsdr
chomd 755 /etc/init.d/lvsdr
service lvsdr start
Realserver上的指令碼:
在192.168.60.132上也配置這個指令碼.
#!/bin/bash
VIP=192.168.25.200
/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
/sbin/route add -host $VIP dev 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
sysctl -p
#end
上面指令碼也可以寫成服務:
vi /etc/init.d/lvsrs
#!/bin/bash
#description : start realserver
VIP=192.168.60.200
./etc/rc.d/init.d/functions
case "$1" in
start)
echo " start LVS of REALServer"
/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
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
;
stop)
/sbin/ifconfig lo:0 down
echo "close LVS Directorserver"
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
然後:
chomd 755 /etc/init.d/lvsrs
service lvsrs start
在RS上必須對VIP忽略ARP響應, 對於2.4以下低版本,在Real Server上要安裝ARP hidden核心補丁,幸運的是,在2.6核心中通過調整核心引數即可忽略ARP廣播迴應。真好!上面指令碼就是實現這些功能.
7:配置lvs檔案
Lvs安裝完畢後,會產生/etc/sysconfig/ha/lvs.cf檔案,編輯此檔案,內容類似如下:
[root@rac1 ~]# more /etc/sysconfig/ha/lvs.cf
serial_no = 18
primary = 192.168.60.132
service = lvs
network = direct
debug_level = NONE
virtual www.gaojf.com {
active = 1
address = 192.168.60.200 eth0:0
port = 80
send = "GET / HTTP/1.0/r/n/r/n"
expect = "HTTP"
use_regex = 0
load_monitor = none
scheduler = rr
protocol = tcp
timeout = 6
reentry = 15
quiesce_server = 0
server RS1 {
address = 192.168.60.132
active = 1
weight = 1
}
server RS2 {
address = 192.168.60.144
active = 1
weight = 1
}
}
編輯完成,然後啟動pulse服務,即啟動lvs服務
Service pulse start