LVS Linux Virtual Server 的缩写,作用是实现负载均衡。其原理图大概如下:

它使用一台 Load Balancer 与若干台 Real Server 组成一台 Virtual Server 。当请求到达时首先通过 Load Balancer ,它将根据某种调度算法将请求分发到其中一台 Real Server 上。由于 Load Balancer 只负责调度,其余服务的工作由多台 Real Server 共同完成,这就实现了服务器的集群而又避免了连接入口成为集群的瓶颈。从用户的角度看来整个集群架构就只有一台 Virtual Server ,所有的连接都是与这台 Virtual Server 打交道,连接的 IP 也只有 Virtual Server IP 一个 ( 称为 VIP - Virtual IP) 。至于具体的调度算法与如何对客户机透明转发数据,有兴趣的可以参考: http://www.linuxvirtualserver.org/zh/
LVS 的功能有:指定 VIP Virtual Server 、调度方式与转发方式。而这些内容多数是在 Load Balancer 上设定,因这些功能多在 Load Balancer 上完成。而 Real Server 上也有一定的设置,以解决自身 ip VIP 不一致的问题。
以下是上面提及环境中的 LVS 脚本,由师兄 snake 编写,这里借用一下
#!/bin/sh  
#create in 20070509 by yezi  
# description: start LVS   of  Directorserver  
VIP=192.168.189.100  
RIP1=192.168.189.3  
RIP2=192.168.189.4
  
#RIPn=192.168.0.128~254  
GW=192.168.189.1 
 
. /etc/rc.d/init.d/functions  
  
case "$1" in  
    start)  
         echo " start LVS  of DirectorServer"  
        # set the Virtual  IP Address  
        /sbin/ifconfig eth1:0 $VIP broadcast $VIP netmask 255.255.255.255 up  
        /sbin/route add -host $VIP dev eth1:0  
        #Clear IPVS table  
        /sbin/ipvsadm -C  
       #set LVS  
       /sbin/ipvsadm -A -t $VIP:8080 -s rr  
       /sbin/ipvsadm -a -t $VIP:8080 -r $RIP1:8080 -g  
       /sbin/ipvsadm -a -t $VIP:8080 -r $RIP2:8080 -g    
       #Run LVS  
       /sbin/ipvsadm  
       #end  
       ;;  
     stop)  
         echo "close LVS Directorserver" 
         /sbin/ipvsadm -C  
  /sbin/ifconfig eth1:0 down
       ;;  
     *)  
         echo "Usage: $0 {start|stop}" 
         exit 1  
esac

以上配置中我们使用的VIP192.168.189.100,通过# set the Virtual  IP Address以下两行配置在主Load Balancereth1:0上。再通过#set LVS下三行设置调度算法(rr)与Real Server。以上脚本命名为LvsDR并使用sh LvsDR startsh LvsDR stop的方式判断启动与停止。由于本例中要结合Heartbeat使用,由Heartbeat启动和停止,而Heartbeat就是由命令+参数start/stop来控制服务启停的,为了方便起见还是要写成以上的形式。当然如果你想单独使用就没有必要这样写了。将LvsDR储存在/etc/rc.d/init.d/下,Heartbeat会自动在这个目录下寻找。

测试以上脚本,在Terminal输入 sh LvsDR start 。之后可以输入 /etc/rc.d/init.d/ipvsadm status 查看LVS状态:

此外,亦要在 Real Server 中运行以下脚本
#!/bin/bash
#description : start realserver
VIP=192.168.189.100
/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 -arp
/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
/sbin/sysctl -p
#end
将上面的脚本保存为 realserver /etc/sysctl.conf 中亦要将 net.ipv4.ip_forward 一项改为 1 Real Server 上不用运行 Heartbeat ,故在运行服务器端程序前运行该脚本即可。
至此 LVS 脚本的编写基本完成~~
 
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐