zoukankan      html  css  js  c++  java
  • LVS详细介绍以及遇到的坑

    LVS详细介绍以及遇到的坑

    一,概述

    本文介绍了我搭建LVS集群的步骤,并且在使用LVS(Linux Virtual Server)过程中遇到的问题和坑,

    二,LVS简单介绍

    大家都知道,LVS中文意思就是linux虚拟服务器,是一个虚拟的服务器集群系统,可以在Unix/Linux平台下实现负载均衡集群功能,  该项目是章文嵩博士组织成立,是中国国内最早出现的自由软件项目之一。

    LVS项目的特点:有实现三种IP负载均衡技术和八种连接调度算法的IPVS软件。在IPVS内部实现上,采用了高效的Hash函数和垃圾回收机制,能正确处理所调度报文相 关的ICMP消息(有些商品化的系统反而不能)。虚拟服务的设置数目没有限制,每个虚拟服务有自己的服务器集。它支持持久的虚拟服务(如HTTP Cookie和HTTPS等需要该功能的支持),并提供详尽的统计数据,如连接的处理速率和报文的流量等。针对大规模拒绝服务(Deny of Service)攻击,实现了三种防卫策略。有基于内容请求分发的应用层交换软件KTCPVS,它也是在Linux内核中实现。有相关的集群管理软件对资源进行监测,能及时将故障屏蔽,实现系统的高可用性。主、从调度器能周期性地进行状态同步,从而实现更高的可用性。

    LVS项目的目标:使用集群技术和Linux操作系统实现一个高性能、高可用的服务器,它具有很好的可伸缩性(Scalability)、可靠性(Reliability)和可管理性(Manageability)。

    在LVS框架中,提供了含有三种IP负载均衡技术的IP虚拟服务器软件IPVS,基于内容请求分发的内核Layer-7交换机KTCPVS和集群管理软件这些功能组件,如下截图(网络截图)

    我们这次只是讲解第一种技术:IP虚拟服务器软件IPVS。

    相关参考资料:

    LVS官网:

    http://www.linuxvirtualserver.org/index.html

    相关中文资料:

    • LVS项目介绍

      http://www.linuxvirtualserver.org/zh/lvs1.html

    • LVS集群的体系结构

      http://www.linuxvirtualserver.org/zh/lvs2.html

    • LVS集群中的IP负载均衡技术

      http://www.linuxvirtualserver.org/zh/lvs3.html

    • LVS集群的负载调度

      http://www.linuxvirtualserver.org/zh/lvs4.html

    三,IP虚拟服务器软件IPVS

    再调度的实现技术中,IP负载均衡技术是效率最高的。在已有的IP负载均衡技术中有通过网络地址转换(Network Address Translation)将一组服务器构成一个高性能的、高可用的虚拟服务器,我们称之为VS/NAT技术(Virtual Server via Network Address Translation),大多数的商品化的负载均衡调度器产品都是使用此方法,如:cisco的LoadDirector、F5的Big/IP和Alteon的ACEDirector。在分析VS/NAT的缺点和网络服务的非对称性的基础上,我们提供通过IP隧道实现虚拟服务器的方法VS/TUN(Virtual Server via IP Tunneling),和通过直接路由实现虚拟服务器的方法VS/DR(Virtual Server via Routing )。总之IPVS软件实现了这三种IP负载均衡技术,他们大致原理如下:

     1,Virtual Server via Network Address Translation (VS/NAT)

    通过网络地址转换,调度器重写请求报文的目标地址,根据预设的调度算法,将请求分派给后端的真实服务器;真实服务器的响应报文通过调度器时,报文的源地址被重写,再返回给客户,完成整个负载调度过程。

    2,Virtual Server via IP Tunneling (VS/TUN)

    采用NAT技术时,由于请求和和响应报文都必须经过调度器地址重写,当客户请求越来越多时,调度器的处理能力将成为瓶颈。为了解决这个问题,调度器把请求报文通过IP隧道转发至真实服务器,而真实服务器将响应直接返回给客户,所以调度器只处理请求报文。由于一般网络服务应答比请求报文大许多,采用VS/TUN技术后,集群系统的最大吞吐量可以提高10倍。

    3,Virtual Server via Direct Routing(VS/DR)

    VS/DR通过改写请求报文的MAC地址,将请求发送到真实服务器,而真实服务器将响应直接返回给客户。同VS/TUN技术一样,VS/DR技术可以极大地提高集群系统的伸缩性。这种方法没有IP隧道的开销,对集群中的真实服务器也没有必须支持IP隧道协议的要求,但是要求调度器与真实服务器都有一块网卡连在同一物理网段上。

    针对不同的网络服务需求和服务器配置,IPVS调度器实现了如下八种负载调度方法:

    1,轮叫(Round Robin)

    调度器通过“轮叫”调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等对待每一台服务器,而不管服务器上实际的连接数和系统负载。

    2,加权轮叫(Weighted Round Robin)

    调度器通过“加权轮叫”调度算法根据真实服务器的不同处理能力来调度访问请求。这样可以保证处理能力强的服务器处理更多的访问流量。调度器可以自动问询真实服务器的负载情况,并动态调整其权值。

    3,最少链接(Least Connections)

    调度器通过“最少链接”调度算法动态地将网络请求调度到已建立的连接数最少的服务器上。如果集群系统的真实服务器具有相近的系统性能,采用“最小链接”调度算法可以较好地均衡负载。

    4,加权最少链接(Weighted Least Connections)

    在集群系统中的服务器性能差异较大的情况下,调度器采用"加权最少链接"调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。

    5,基于局部性的最少链接(Locality-Based Least Connections)

    "基于局部性的最少链接" 调度算法是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。该算法根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器 是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用"最少链接"的原则选出一个可用的服务 器,将请求发送到该服务器。

    6,带复制的基于局部性最少链接(Locality-Based Least Connections with Replication)

    "带复制的基于局部性最少链接"调度算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。它与LBLC算法的不同之处是它要维护从一个 目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。该算法根据请求的目标IP地址找出该目标IP地址对应的服务 器组,按"最小连接"原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器,若服务器超载;则按"最小连接"原则从这个集群中选出一 台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的 程度。

    7,目标地址散列(Destination Hashing)

    "目标地址散列"调度算法根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。

     8、源地址散列(Source Hashing)

    "源地址散列"调度算法根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。

    四,LVS与KEEPALIVE的关系

    1,lvs可以处理负载均衡,但当其中一台RealServer发生故障的时候,并不能实时检测并剔除掉发生故障的RealServer,也不能当RealServer恢复正常后自动添加到lvs集群中。

    2,keepalived用于容灾,当集群中的节点发生故障的时候,会自动转移业务到可用的节点,但不不能将请求分配到集群中空闲的节点。

    3,lvs可以和有容灾功能的模块结合,组成高可用系统。例如:lvs + heartbeat, lvs + keepalived等。keepalived可以和有负载均衡功能的模块结合,组成高可用系统。例如keepalived + lvs, keepalived + haproxy等。

    4,lvs单独运行,有负载均衡的作用。keepalived单独运行,有容灾的作用。这两个模块,都可以单独运行或者同其他模块结合,组成高可用系统。

    5,查看系统的lvs模块:lsmod|grep ip_vs

    五,LVS集群搭建步骤

    环境和软件介绍:

    软件:

    ipvsadm-1.26-4.el6.x86_64.rpm

    keepalived-1.2.13-5.el6_6.x86_64.rpm

    主从地址分配环境:

    192.168.10.100    #VIP

    192.168.10.11    #主DR

    192.168.10.12    #从DR

    192.168.10.201    #RS1

    192.168.10.202    #RS2

    注解:2台DR服务器安装了ipvsadm 和keepalive ,并且192.168.10.11是主;RS是两台mysql 并且配置了主主的服务器端口3306。

    修改内核参数抑制ARP响应

    /etc/sysctl.conf
    
    net.ipv4.conf.all.arp_ignore = 1
    
    net.ipv4.conf.all.arp_announce = 2
    
    net.ipv4.conf.lo.arp_ignore = 1
    
    net.ipv4.conf.lo.arp_announce = 2
    

      主要参数开启路由转发:net.ipv4.ip_forward=1

    第一步骤安装lVS

    在2台DR服务器执行如下安装命令:rpm -ivh ipvsadm-1.26-4.el6.x86_64.rpm 

    检查是否安装成功: rpm -qa |grep ipvsadm

    配置启动文件,在目录/etc/init.d/中添加文件lvs:

    #!/bin/bash
    #
    # lvsdrrs init script to hide loopback interfaces on LVS-DR
    # Real servers. Modify this script to suit
    # your needs. You at least need to set the correct VIP address(es).
    #
    # Script to start LVS DR real server.
    #
    # chkconfig: 2345 20 80
    # description: LVS DR real server
    #
    # You must set the VIP address to use here:
    VIP=192.168.10.100
    case "$1" in
    start)
           # Start LVS-DR real server on this machine.
            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/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
    ;;
    stop)
            # Stop LVS-DR real server loopback device(s).
            /sbin/ifconfig lo:0 down
    ;;
    status)
            # Status of LVS-DR real server.
            islothere=`/sbin/ifconfig lo:0 | grep $VIP`
            isrothere=`netstat -rn | grep "lo" | grep $VIP`
            if [ ! "$islothere" -o ! "$isrothere" ];then
                # Either the route or the lo:0 device
                # not found.
                echo "LVS-DR real server Stopped."
            else
                echo "LVS-DR Running."
            fi
    ;;
    *)
            # Invalid entry.
            echo "$0: Usage: $0 {start|status|stop}"
            exit 1
    ;;
    esac
    

      

     执行命令:service lvs start

    查看是否配置成功:ifconfig

    在lo:0中查看到确实有配置的VIP,说明配置成功:

    第三步骤安装KEEPALIVED

    在2台DR服务器分别安装keepalived软件,并且配置主从

    安装命名如下:rpm -ivh keepalived-1.2.13-5.el6_6.x86_64.rpm 

    修改配置文件,目录文件:/etc/keepalived/keepalived.conf

    global_defs {
       router_id rhel1009171 // hostname
    }
    
    vrrp_instance VI_1 {
        state MASTER   
        interface eth0
        virtual_router_id 51
        priority 100
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass guoshou
        }
        virtual_ipaddress {
          192.168.10.100
        }
    }
    
    
    virtual_server 192.168.10.100 3306 {
        delay_loop 6
        lb_algo rr
        lb_kind DR
        nat_mask 255.255.255.0
        persistence_timeout 0
        protocol TCP
    
        real_server 192.168.10.201 3306 {
            weight 1
             TCP_CHECK {
                connect_port 3306
                connect_timeout 3
                nb_get_retry 3
                delay_before_retry 3
             }
        }
     
        real_server 192.168.10.202 3306 {
            weight 1
             TCP_CHECK {
                connect_port 3306
                connect_timeout 3
                nb_get_retry 3
                delay_before_retry 3
            }
        }
    
    }
    

      在配置state MASTER 指定主从配置MASTER代表主,BACKUP代表从:

    第三步命令验证

    ipvsadm参数说明:(更多参照 man ipvsadm)

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    六、在搭建和使用过程遇到的坑

     使用arp命令检查,如果没有物理网卡,说明网络层有问题。

  • 相关阅读:
    129. Sum Root to Leaf Numbers
    113. Path Sum II
    114. Flatten Binary Tree to Linked List
    112. Path Sum
    100. Same Tree
    300. Longest Increasing Subsequence
    72. Edit Distance
    自定义js标签库
    JS 实现Table相同行的单元格自动合并示例代码
    mysql 高版本only_full_group_by 错误
  • 原文地址:https://www.cnblogs.com/boanxin/p/10050828.html
Copyright © 2011-2022 走看看