分类: LINUX
2007-12-10 17:55:04
基本术语:
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方式适合所有的RealServer同一网段下,即接在同一个交换机上.
TUNL方式就对于RealServer的位置可以任意了,完全可以跨地域、空间,只要系统支持Tunnel就可以.方便以后扩充的话直接Tunl方式即可.
由此可知,配置集群分以下几种情况:
一、配置基于DR模式Lvs集群
二、配置基于隧道模式Lvs集群
三、配置基于高可用Lvs+heartbeat
四、此种配置方式可以加强LVS的主节点的高安全性前提下(主节点简称DR,备份主节点DRbak),考虑充分利用资源可以将DRbak做为realserver。
集群系统基本构架:
Load Balancer(负载均衡器):
Load Balancer是整个集群系统的前端,负责把客户请求转发到Real Server上。
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,同时也是realserver节点.
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-
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-
# 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 {
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