服务器 频道

网管实战:基于LVS的互联网应用架设攻略

    (二) 控制器配置:既可以使用脚本也可以更改系统的配置文件 /etc/sysconfig/ipvsadm。在实际应用中,我建议用脚本,这样的话,维护和移植lvs会很方便。下面给出本案使用的lvs/dr脚本:
[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
    .RIP1=61.135.55.150到RIP3=61.135.55.152定义3个真实服务器的ip地址。
    .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
相关文章