zoukankan      html  css  js  c++  java
  • 青蛙学Linux—使用LVS实现负载均衡集群

    从Linux的2.4内核开始,LVS的主要模块IPVS已经集成在了Linux的内核中,无需再另外安装。但是要使用IPVS的功能,则需要其他软件的配合。常见的有IPVS管理软件ipvsadmKeepalived

    1、ipvsadm

    ipvsadm是IPVS的一个管理工具,用于对IPVS进行配置和管理。ipvsadm可以在LVS的官网下载到源码包和RPM包,但由于LVS官网已很久没有更新,所以这里推荐使用YUM安装ipvsadm,这样可以获取到ipvsadm的新版本。

    使用以下命令安装ipvsadm:

    yum install ipvsadm

    ipvsadm常用参数:

    • -A:添加一条新的虚拟服务规则
    • -E:编辑一条虚拟服务规则
    • -D:删除一条虚拟服务规则
    • -C:清除所以的虚拟服务规则
    • -R:恢复虚拟服务规则
    • -a:在一个虚拟服务中添加一个新的真实服务器(Real Server)
    • -e:编辑某个真实服务器
    • -d:删除某个真实服务器
    • -L|-l:显示内核中的虚拟服务规则
    • -n:以数字形式显示IP端口
    • -c:显示IPVS中目前存在的连接,可以用于分析调度情况
    • -Z:将转发消息的统计清零
    • -p:配置持久化时间
    • --set tcp|tcpfin|udp:配置tcp|tcpfin|udp的超时时间
    • -t|-u:基于TPC|UDP协议的虚拟服务规则
    • -g|-m|-i:对应三种负载均衡实现机制DR|NAT|TUN
    • -w:配置真实服务器的权重
    • -s:配置负载均衡算法
    • --timeout:显示配置的tcp|tcpfin|udp的超时时间
    • --stats:显示历史转发消息统计(累加值)
    • --rate:显示转发速率信息(瞬时值)

    使用ipvsadm仅能实现负载均衡,无法对后端的Real Server进行健康监测,这样当后端的Real Server出现故障时,ipvsadm无法将其从服务器组中撤下,导致转发到该Real Server的请求就失败。

    2、Keepalived+LVS实现负载均衡集群

    Keepalived属于LVS的扩展项目,起初是为了解决前端LB无法对后端RS进行健康监测而开发的。Keepalived对后端的RS进行健康监测,在RS发生故障时自动将其剔除,并在其恢复正常后重新将其加入集群。而Keepalived在引入VRRP之后也可用于高可用集群,这样,Keepalived+LVS就可以实现前端LB的高可用和后端RS的负载均衡。

    注意:Keepalived实际上是通过ipvsadm来管理和配置IPVS的,所以要使用Keepalived支持LVS必须安装ipvsadm

    Keepalived对于LVS的支持是在配置文件中的LVS配置段中实现的。LVS配置段以virtual_server做为开始标识,分为virtual_server段、real_server段和健康监测段。

    2.1、virtual_server段配置

    virtual_server用于配置VIP、负载均衡算法、负载均衡机制等。常用配置如下:

    virtual_server VIP 端口 {
        delay_loop 时间
        lb_algo 算法
        lb_kind 负载均衡实现机制
        persistence_timeout 时间
        persistence_granularity 子网掩码
        protocol 协议
        ha_suspend
        sorry_server IP 端口
        ...
    }
    • virtual_server:虚拟服务器的开始,后跟VIP和端口
    • delay_loop:定义健康检查的时间间隔,单位为秒
    • lb_algo:定义负载均衡调度算法,值为rr|wrr|dh|sh|lc|wlc|sed|nq|lblc|lblcr
    • lb_kind:定义负载均衡实现的机制,值为DR|NAT|TUN
    • persistence_timeout:会话保持最大无响应超时时间,单位秒。定义该项后,用户的请求在定义的时间内会发送给同一个RS;当用户在定义的时间内一直没有进行操作,则下一次请求将会被发送到一个新的RS上。适用于动态网页session共享的环境
    • persistence_granularity:配合persistence_timeout使用,通过子网掩码来定义会话保持对一个IP生效还是对一组IP生效。默认值为255.255.255.255,表示单个客户端分配到一个RS上;255.255.255.0表示客户端IP所在的整个网段的请求都会分配给同一台RS
    • protocol:定义转发协议类型,有TCP和UDP两种可选
    • ha_suspend:在LB节点状态从Master切换到Backup时,不启用对RS节点的健康检查
    • sorry_server:备用节点,当所有的后端RS失效后启用该备用节点

    2.2、real_server段配置

    real_server段位于virtual_server段内,用于配置后端RS。常用配置如下:

    real_server IP 端口 {
        weight 数值
        inhibit_on_failure
        notify_up  脚本
        notify_down 脚本
    }
    • real_server:real_server段开始的标识,后跟RS的真实IP地址和端口
    • weight:定义RS的权重
    • inhibit_on_failure:在检测到RS节点故障之后将weight值改为0,而不是从IPVS中删除
    • notify_up:在检测到RS节点服务处于UP状态后执行的脚本
    • notify_down:在检测到RS节点服务处于DOWN状态后执行的脚本

    2.3、健康检测段配置

    Keepalived对于后端RS的健康检查支持多种方式,常见的有HTTP_GET、SSL_GET、TCP_CHECK、MISC_CHECK。健康检查段位于real_server段内。

    2.3.1、TCP_CHECK

    TCP_CHECK通过TCP协议连接后端RS的指定端口来判断后端RS是否正常。常用配置如下:

    TCP_CHECK {
        connect_port 端口
        connect_timeout 时间 
        nb_get_retry|retry 次数
        delay_before_retry 时间 
    }
    • connect_port:定义进行健康检查时连接的后端RS端口,如果没有定义,则使用real_server段指定的端口
    • connect_timeout:无响应超时时间,单位秒
    • nb_get_retry|retry:重试次数。在Keepalived 2.x版本之前使用nb_get_retry,2.x版本之后使用retry
    • delay_before_retry:重试间隔时间,单位秒
    2.3.2、HTTP_GET|SSL_GET

    通过对指定URL计算摘要信息来检查后端RS是否正常。常用配置如下:

    HTTP_GET|SSL_GET {
        url {         
            path URI
            digest URL摘要信息
            status_code HTTP状态码 
        }
        bindto IP地址
        connect_port 端口	
        connect_timeout 时间
        nb_get_retry|retry 次数
        delay_before_retry 时间
    } 
    • url:定义HTTP|SSL检查时的URL信息,可以指定多个
    • path:定义检查的详细URL路径
    • digest:URL的摘要信息,摘要信息可通过genhash工具获取。例如,获取192.168.0.80上index.html的摘要信息
      genhash -s 192.168.0.80 -p 80 -u /index.html
    • status_code:定义HTTP检查返回正常状态码的类型,一般是200
    • bindto:定义通过哪台服务器发送请求对后端RS进行健康检查
    2.3.3、MISC_CHECK

    MISC_CHECK健康检查方式可以通过执行一个外部程序或脚本来判断后端RS是否正常。常用配置如下:

    MISC_CHECK {
        misc_path 脚本
        misc_timeout 时间
        misc_dynamic
    }
    • misc_path:指定一个外部程序或脚本
    • misc_timeout:定义执行脚本的超时时间
    • misc_dynamic:动态调整RS节点的权重,前面加!表示不启用。在启用该功能后,Keepalived会根据返回码来动态调整RS节点的权重。如果返回码为0,表示健康检查正常,节点权重不变;如果返回码为1,表示健康检查失败,Keepalived将调整节点权重为0;如果返回码为2-255之间的任意值,表示健康检查正常,但Keepalived将会调整节点权重为返回码-2
  • 相关阅读:
    C/C++多文件之间的变量定义
    PKU POJ 2186 Popular Cows 强连通分量
    重载函数
    ZOJ 2763 Prison Break
    201357 训练赛总结
    hdu 4467 Graph 构造
    201356 训练赛总结
    201353 NEERC 2012, Eastern subregional contest
    2013512 CF 183 总结
    一道动态规划
  • 原文地址:https://www.cnblogs.com/yu2006070-01/p/10396258.html
Copyright © 2011-2022 走看看