网管实战:基于LVS的互联网应用架设攻略
(二) 控制器配置:既可以使用脚本也可以更改系统的配置文件 /etc/sysconfig/ipvsadm。在实际应用中,我建议用脚本,这样的话,维护和移植lvs会很方便。下面给出本案使用的lvs/dr脚本:
.VIP1=61.135.55.160,VIP2=61.135.55.161定义2个虚拟ip地址,一个作web服务的虚拟地址,一个做流媒体服务的虚拟地址。
. /etc/rc.d/init.d/functions,执行这个系统脚本,以取得运行其他脚本所需的环境和参数。
.case语句是一个多路选择,本脚本给出3个:start,stop及*,3选1。$1表示脚本带一个参数。
. /sbin/ifconfig eth0:0 $VIP1 broadcast $VIP1 netmask 255.255.255.255 up把web服务所需的ip地址(虚拟地址)绑定在辅助接口eth0:0。在LVS方案中,虚拟ip地址与普通网络接口大大不同,这点需要特别注意。虚拟ip地址的广播地址是它本身,子网掩码是255.255.255.255。为什么要这样呢?因为有若干机器要使用同一个ip地址,用本身做广播地址和把子网掩码设成4个255就不会造成ip地址冲突了,否则lvs将不能正常转发访问请求。
. /sbin/route add -host $VIP1 dev eth0:0添加主机路由,这2条可有可无,较新的linux发行版能正确路由这个主机地址。
. echo "1" >/proc/sys/net/ipv4/ip_forward启用ip转发功能。
. /sbin/ipvsadm –C清空ipvs转发表。
. /sbin/ipvsadm -A -t $VIP1:80 -s wlc -p 120 添加一个虚拟服务,服务协议是tcp(-t);服务类型是web($VIP1:80);-s 表示采用wlc这种调度算法转发数据包(调度算法包括:rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq);-p表示连接的持续时间为120秒,这个会话时间是根据实际情况调整的,如果这个值设置得不合理,用户将得到非常糟糕的访问效果。下面举例简单说明一下:
从上图我们可以看出,随着时间的变化,用户的请求将可能被lvs转发到不同的服务器,而那些需要保持会话的请求将被丢失,导致访问不能进行。
. /sbin/ipvsadm -a -t $VIP1:80 -r $RIP1:80 –g 以直接路由的方式把请求转发到LVS后面的真实服务器。我曾企图把web(80端口)请求转发到真实服务器的其他端口(如8000),但不能如愿。
余下的行参照上面的解释,理解起来应该不是问题,因此不再一一说明。脚本写好后,把它放在目录/usr/local/bin,然后授与执行权限(chmod 700 /usr/local/bin/lvsdr),运行这个脚本,LVS/DR控制器部分就算配置好了。如果脚本不能正常运行,多半情况是脚本书写错误所致,如在windows用写字板写脚本再拷贝到linux,或者写丢了某个“;”等等。不管真实服务器端是否正确设置lvs,LVS/DR控制器都能独个运行。有2个方法检验LVS/DR是否正常运行了:(1)查看内核是否列出ip_vs模块;(2)直接运行ipvsadm –l看输出是否有转发规则。
.RIP1=61.135.55.150到RIP3=61.135.55.152定义3个真实服务器的ip地址。[root@mysql2 ~]# more /usr/local/bin/lvsdr
#!/bin/bash
RIP1=61.135.55.150
RIP2=61.135.55.151
RIP3=61.135.55.152
![]()
VIP1=61.135.55.160
VIP2=61.135.55.161
![]()
/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 $VIP1 broadcast $VIP1 netmask 255.255.255.255 up
/sbin/ifconfig eth0:1 $VIP2 broadcast $VIP2 netmask 255.255.255.255 up
/sbin/route add -host $VIP1 dev eth0:0
/sbin/route add -host $VIP2 dev eth0:1
echo "1" >/proc/sys/net/ipv4/ip_forward
![]()
#Clear IPVS table
/sbin/ipvsadm -C
![]()
#set LVS
#Web Apache
/sbin/ipvsadm -A -t $VIP1:80 -s wlc -p 120
/sbin/ipvsadm -a -t $VIP1:80 -r $RIP1:80 -g
/sbin/ipvsadm -a -t $VIP1:80 -r $RIP2:80 -g
/sbin/ipvsadm -a -t $VIP1:80 -r $RIP3:80 -g
![]()
#Media (mms)
/sbin/ipvsadm -A -t $VIP2:1755 -s rr -p 3600
/sbin/ipvsadm -a -t $VIP2:1755 -r $RIP3:1755 -g
/sbin/ipvsadm -a -t $VIP2:1755 -r $RIP4:1755 -g
/sbin/ipvsadm -A -t $VIP2:554 -s rr -p 3600
/sbin/ipvsadm -a -t $VIP2:554 -r $RIP3:554 –g
/sbin/ipvsadm -a -t $VIP2:554 -r $RIP4:554 –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
/sbin/ifconfig eth0:1 down
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
.VIP1=61.135.55.160,VIP2=61.135.55.161定义2个虚拟ip地址,一个作web服务的虚拟地址,一个做流媒体服务的虚拟地址。
. /etc/rc.d/init.d/functions,执行这个系统脚本,以取得运行其他脚本所需的环境和参数。
.case语句是一个多路选择,本脚本给出3个:start,stop及*,3选1。$1表示脚本带一个参数。
. /sbin/ifconfig eth0:0 $VIP1 broadcast $VIP1 netmask 255.255.255.255 up把web服务所需的ip地址(虚拟地址)绑定在辅助接口eth0:0。在LVS方案中,虚拟ip地址与普通网络接口大大不同,这点需要特别注意。虚拟ip地址的广播地址是它本身,子网掩码是255.255.255.255。为什么要这样呢?因为有若干机器要使用同一个ip地址,用本身做广播地址和把子网掩码设成4个255就不会造成ip地址冲突了,否则lvs将不能正常转发访问请求。
. /sbin/route add -host $VIP1 dev eth0:0添加主机路由,这2条可有可无,较新的linux发行版能正确路由这个主机地址。
. echo "1" >/proc/sys/net/ipv4/ip_forward启用ip转发功能。
. /sbin/ipvsadm –C清空ipvs转发表。
. /sbin/ipvsadm -A -t $VIP1:80 -s wlc -p 120 添加一个虚拟服务,服务协议是tcp(-t);服务类型是web($VIP1:80);-s 表示采用wlc这种调度算法转发数据包(调度算法包括:rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq);-p表示连接的持续时间为120秒,这个会话时间是根据实际情况调整的,如果这个值设置得不合理,用户将得到非常糟糕的访问效果。下面举例简单说明一下:

从上图我们可以看出,随着时间的变化,用户的请求将可能被lvs转发到不同的服务器,而那些需要保持会话的请求将被丢失,导致访问不能进行。
. /sbin/ipvsadm -a -t $VIP1:80 -r $RIP1:80 –g 以直接路由的方式把请求转发到LVS后面的真实服务器。我曾企图把web(80端口)请求转发到真实服务器的其他端口(如8000),但不能如愿。
余下的行参照上面的解释,理解起来应该不是问题,因此不再一一说明。脚本写好后,把它放在目录/usr/local/bin,然后授与执行权限(chmod 700 /usr/local/bin/lvsdr),运行这个脚本,LVS/DR控制器部分就算配置好了。如果脚本不能正常运行,多半情况是脚本书写错误所致,如在windows用写字板写脚本再拷贝到linux,或者写丢了某个“;”等等。不管真实服务器端是否正确设置lvs,LVS/DR控制器都能独个运行。有2个方法检验LVS/DR是否正常运行了:(1)查看内核是否列出ip_vs模块;(2)直接运行ipvsadm –l看输出是否有转发规则。
0
相关文章