负载均衡之LVS:实现高可用集群(WEB集群)

LVS(Linux VirtualServer)是一个建立在一系列真实服务器上的高可扩展、高可用性的服务器,工作于四层网络,即基于IP加端口的模式。LVS的负载均衡器工作在Linux系统上。作为一个非常优秀的负载均衡解决方案,LVS可用来搭建高可拓展和高可用的网络服务,例如web、cache、ftp、mail、media和VoIP服务等。以下为LVS集群体系结构:

wKiom1MefUDy9q6-AAGnP3FVhBk834.jpg


  • 负载均衡转发模式包括直接路由模式DR、网络地址转换模式NAT以及隧道模式TUN三种

   在一般的互联网应用环境,选择直接路由模式。

  1. DR利用大多数Internet服务的非对称特点,负载调度器中只负责调度请求,而服务器直接将响应返回给客户,可以极大地提高整个集群系统的吞吐量。从原理上可以知道,DR模式下,负载均衡器的输出和输出流量应该是基本一致的

  2. 排错方便迅速。如果通过vip访问不到服务,则可以直接通过访问真实服务器的方式直接定位问题的所在。

  3. 当负载均衡器都停止工作时,DR模式易于应急处理。通过修改dns的A记录,把先前主机名对应的vip改成真实服务器的ip地址,使服务迅速恢复起来,从而赢得时间处理负载均衡器的故障。


  • 集群采用三层结构

  1. 负载调度器(loadbalancer),它是整个集群对外面的前端机,负责将客户的请求发送到一组服务器上执行,而客户认为服务是来自一个IP地址(我们可称之为虚拟IP地址)上的。它可以是用IP负载均衡技术的负载调度器,也可以是基于内容请求分发的负载调度器,还可以是两者的结合。

  2. 服务器池(serverpool),是一组真正执行客户请求的服务器,执行的服务有WEB、MAIL、FTP和DNS等。

  3. 共享存储(sharedstorage),它为服务器池提供一个共享的存储区,这样很容易使得服务器池拥有相同的内容,提供相同的服务。


  • IP负载均衡技术

    在IP负载均衡技术中,需要服务器池拥有相同的内容提供相同的服务。当客户请求到达时,调度器只根据负载情况从服务器池中选出一个服务器,将该请求转发到选出的服务器,并记录这个调度;当这个请求的其他报文到达,也会被转发到前面选出的服务器。


  • 基于内容请求的分发技术

    服务器可以提供不同的服务,当客户请求到达时,调度器可根据请求的内容和服务器的情况选择服务器执行请求。因为所有的操作都是在操作系统核心空间中将完成的,它的调度开销很小,所以它具有很高的吞吐率。


  • 负载调度策略和算法

   IP负载均衡软件IPVS在内核中所实现的各种连接调度算法:

   轮轮叫调度(Round-RobinScheduling)

   加权轮叫调度(WeightedRound-Robin Scheduling)

   最小连接调度(Least-ConnectionScheduling)

   加权最小连接调度(WeightedLeast-Connection Scheduling)

   基于局部性的最少链接(Locality-BasedLeast Connections Scheduling)

   带复制的基于局部性最少链接(Locality-    BasedLeast Connections with Replication Scheduling)

   目标地址散列调度(DestinationHashing Scheduling)

   源地址散列调度(SourceHashing Scheduling)

   最短预期延时调度(ShortestExpected Delay Scheduling)

   叫调度(Round-RobinScheduling)

   加权轮叫调度(WeightedRound-Robin Scheduling)

   最小连接调度(Least-ConnectionScheduling)

   加权最小连接调度(WeightedLeast-Connection Scheduling)

   基于局部性的最少链接(Locality-BasedLeast Connections Scheduling)

   带复制的基于局部性最少链接(Locality-BasedLeast Connections with Replication Scheduling)

   目标地址散列调度(DestinationHashing Scheduling)

   源地址散列调度(SourceHashing Scheduling)

   最短预期延时调度(ShortestExpected Delay Scheduling)

   不排队调度(NeverQueue Scheduling)


  • 后端存储

    采用容错的分布式文件系统,如AFS、GFS、Coda和Intermezzo等。访问分布式文件系统就像访问本地文件系统一样。同时,分布式文件系统提供良好的伸缩性和可用性。使用分布式锁管理器(DistributedLock Manager)来解决应用程序的访问冲突问题。


  • LVS可应用的解决方案

    可拓展的Web和媒体服务(如Real公司的LLVS可伸缩Web和媒体集群)、可拓展的Cache服务、可伸缩邮件服务(在前端是一个采用IP负载均衡技术的负载调度器;在第二层是服务器池,有LDAP(Light-weightDirectory AccessProtocol)服务器和一组邮件服务器。第三层是数据存储,通过分布式文件系统来存储用户的邮件。集群中结点间是通过高速网络相连的)、地理分布LVS集群等。


  • LVS+Keepalived实现高可用集群(Web服务)―使用VS/DR负载均衡技术构建可拓展的Web集群

  1. Keepalived

    用作RealServer的健康状态检查以及LoadBalance主机和BackUP主机之间failover的实现。Keepalived是一个基于VRRP协议来实现的WEB服务高可用方案,可以利用其来避免单点故障。一个WEB服务至少会有2台服务器运行Keepalived,一台为主服务器(MASTER),一台为备份服务器(BACKUP),但是对外表现为一个虚拟IP,主服务器会发送特定的消息给备份服务器,当备份服务器收不到这个消息的时候,即主服务器宕机的时候,备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性。


  2. VRRP

    VirtualRouter Redundancy Protocol,能够动态分配可用的IP路由给参与的主机。在VRRP协议中,有两组重要的概念:VRRP路由器和虚拟路由器,主控路由器和备份路由器。VRRP路由器是指运行VRRP的路由器,是物理实体,虚拟路由器是指VRRP协议创建的,是逻辑概念。一组VRRP路由器协同工作,共同构成一台虚拟路由器。该虚拟路由器对外表现为一个具有唯一固定IP地址和MAC地址的逻辑路由器。处于同一个VRRP组中的路由器具有两种互斥的角色:主控路由器和备份路由器,一个VRRP组中有且只有一台处于主控角色的路由器,可以有一个或者多个处于备份角色的路由器。VRRP协议使用选择策略从路由器组中选出一台作为主控,负责ARP相应和转发IP数据包,组中的其它路由器作为备份的角色处于待命状态。当由于某种原因主控路由器发生故障时,备份路由器能在几秒钟的时延后升级为主路由器。由于此切换非常迅速而且不用改变IP地址和MAC地址,故对终端使用者系统是透明的。


  3. 集群架构:负载均衡层+WEB服务层+数据库层

    IP配置信息:

        LVS―DR-Master       192.168.56.1  rango.sysu

        LVS―DR-Backup      192.168.56.101   vm1.sysu

        LVS-DR-VIP               10.0.0.227      

        WEB1-Realserver     192.168.56.102  vm2.sysu

        WEB2-Realserver     192.168.56.103  vm3.sysu

        GateWay                  192.168.56.254

        VIP:虚拟IP需要事先从IDC处获得,并将其绑定到Master的eth0上:

        ifconfig eth0:0 10.0.0.227 broadcast 10.0.0.227 netmask 255.255.255.255 up


  4. 安装LVS和Keepalived

    在Master和Backup上分别编译安装ipvsadmin、keepalived

    ps:安装前准备:lsmod |grep ip_vs;

    ln -s /usr/src/kernels/{uname -r}/ /usr/src/linux;

    yum install libnl* popt*

    安装ipvsadmin:

    #tar zxvf ipvsadm-1.26.tar.gz

    #cd ipvsadm-1.26

    #make && make install

    #find / -name ipvsadm  # 查看ipvsadm的位置


    安装keepalived:

    #tar zxvf keepalived-1.2.9.tar.gz

    #cd keepalived-1.2.9

    #./configure  && make && make install

    #find / -name keepalived  #查看keepalived位置


    做成系统启动服务方便管理:

    #cp /usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/

    #cp /usr/local/etc/sysconfig/keepalived/etc/sysconfig/

    #mkdir /etc/keepalived

    #cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/

    #cp /usr/local/sbin/keepalived/usr/sbin/

    #service keepalived start|stop


  5. 利用Keepalvied实现负载均衡和和高可用性

  • 在主负载均衡服务器上配置keepalived.conf

  • 在Backup服务器上配置keepalived.conf

  • 集群所有机器开启路由转发:

    vim /etc/sysctl.conf:net.ipv4.ip_forward = 1

     sysctl -p

  • 在Realserver上设置网关:

    /etc/sysconfig/network-scripts/ifcfg-eth0:

     GATEWAY=192.168.56.254

  • RealServer的启动脚本:lvs_rs.sh

   #!/bin/bash

   #description: start realserver

   VIP=10.0.0.227

   . /etc/rc.d/init.d/functions


   case "$1" in

           start)

               echo "start LVS ofRealServer"

               /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

               ;;

           stop)

               /sbin/ifconfig lo:0down

               /sbin/route del $VIP >/dev/null 2>&1

               echo "close LVSDirectorserver"

               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 "Usage: $0{start|stop}"

               exit 1

   esac

   exit 0

   启动:chmod +x lvs_rs.sh; lvs_rs.sh start

  • 启动:分别在MASTER、BACKUP上执行service keepalived start启动keepalived就可实现负载均衡及高可用集群了

   service keepalived start

  • 查看lvs服务是否正常:#watch ipvsadm �Cln

  • 日志:监听日志,查看状态,测试LVS负载均衡及高可用性是否有效

   #tail �Cn 12 /var/log/message


 VI. keepalived的配置

/etc/keepalived/keepalived.conf :

   global_defs {                      ##全局配置部分

   #   notification_email {            ##下面几行均为全局通知配置,可以实现出现问题后报警,但功能有限,因此 注释掉,并采用Nagios监视lvs运行情况

#       [email protected]

#   }

#   [email protected]

#   smtp_server smtp.exmail.qq.com

#   smtp_connect_timeout 30


   router_id LVS_MASTER       ##设置lvs的id,在一个网络内应该是唯一的

}


vrrp_instance VI_1 {           ##设置vrrp组,唯一且同一LVS服务器组要相同

   state MASTER               ##备份LVS服务器设置为BACKUP

   interface p5p1             ##设置对外服务的接口

   virtual_router_id 51       ##设置虚拟路由标识

   mcast_src_ip 192.168.56.1 #备机此处为192.168.56.101

   priority 100               #设置优先级,数值越大,优先级越高,backup设置为99,这样就能实现当master宕机后自动将backup变为master,而当原master恢复正常时,则现在的master再次变为backup。

   advert_int 1            ##设置同步时间间隔

   authentication {        ##设置验证类型和密码,master和backup一定要设置一样

   auth_type PASS

   auth_pass 1111

   }


   virtual_ipaddress {         ##设置VIP,可以多个,每个占一行

   10.0.0.227

   }

}


virtual_server 10.0.0.227 80 {

   delay_loop 6           ##健康检查时间间隔,单位s

   lb_algo wrr            ##负载均衡调度算法设置为加权轮叫

   lb_kind DR              ##负载均衡转发规则

   nat_mask 255.255.255.0  ##网络掩码,DR模式要保障真实服务器和lvs在同一网段

   persistence_timeout 60   ##会话保持时间,单位s

   protocol TCP                          ##协议

   real_server 192.168.56.102 80 {     ##真实服务器配置,80表示端口

   weight 3                             ##权重

TCP_CHECK {                      ##服务器检测方式设置

   connect_timeout 5    ##连接超时时间

   nb_get_retry 3

   delay_before_retry 3

   connect_port 80

       }

   }

    real_server 192.168.56.103 80 {

   weight 3

   TCP_CHECK {

       connect_timeout 10

       nb_get_retry 3

       delay_before_retry 3

       connect_port 80

       }

   }

}


  • 总结

    LVS是软件型负载均衡集群构架方案中,抗负载能力强,工作于网络4层之上的软件,它仅做分发之用,没有流量的产生。通过其自身完备的双机热备方案,如本文的LVS+Keepalived,或者是LVS+Heartbeat,可以确保集群能够稳定的工作和执行。但LVS软件本身不支持正则处理,不能做动静分离,而基于Nginx/HAProxy+Keepalved的负载均衡方案可以满足以上条件,后续文章将介绍这两种方案的具体实施。

                                                                                                                  ――RangoChen



你可能感兴趣的:(负载均衡,LVS,系统,高可用集群)