xywuyiba8 发表于 2019-1-5 08:28:24

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

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



[*]负载均衡转发模式包括直接路由模式DR、网络地址转换模式NAT以及隧道模式TUN三种
    在一般的互联网应用环境,选择直接路由模式。

[*]DR利用大多数Internet服务的非对称特点,负载调度器中只负责调度请求,而服务器直接将响应返回给客户,可以极大地提高整个集群系统的吞吐量。从原理上可以知道,DR模式下,负载均衡器的输出和输出流量应该是基本一致的
[*]排错方便迅速。如果通过vip访问不到服务,则可以直接通过访问真实服务器的方式直接定位问题的所在。
[*]当负载均衡器都停止工作时,DR模式易于应急处理。通过修改dns的A记录,把先前主机名对应的vip改成真实服务器的ip地址,使服务迅速恢复起来,从而赢得时间处理负载均衡器的故障。



[*]集群采用三层结构

[*]负载调度器(loadbalancer),它是整个集群对外面的前端机,负责将客户的请求发送到一组服务器上执行,而客户认为服务是来自一个IP地址(我们可称之为虚拟IP地址)上的。它可以是用IP负载均衡技术的负载调度器,也可以是基于内容请求分发的负载调度器,还可以是两者的结合。
[*]服务器池(serverpool),是一组真正执行客户请求的服务器,执行的服务有WEB、MAIL、FTP和DNS等。
[*]共享存储(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集群

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



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


[*]集群架构:负载均衡层+WEB服务层+数据库层
IP配置信息:
   LVS—DR-Master       192.168.56.1rango.sysu
   LVS—DR-Backup      192.168.56.101   vm1.sysu
   LVS-DR-VIP               10.0.0.227      

   WEB1-Realserver   192.168.56.102vm2.sysu
   WEB2-Realserver   192.168.56.103vm3.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

[*]安装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

[*]利用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 –ln
[*]日志:监听日志,查看状态,测试LVS负载均衡及高可用性是否有效
    #tail –n 12 /var/log/message


VI. keepalived的配置
/etc/keepalived/keepalived.conf :

    global_defs {                      ##全局配置部分
    #   notification_email {            ##下面几行均为全局通知配置,可以实现出现问题后报警,但功能有限,因此 注释掉,并采用Nagios监视lvs运行情况
#       admin@toxingwang.com
#   }
#   notification_email_frommaster@toxingwang.com
#   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



  




页: [1]
查看完整版本: 负载均衡之LVS:实现高可用集群(WEB集群)