• 青蛙学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
  • 相关阅读:
    sed 搜索并替换
    error: call of overloaded ‘sqrt(double&)’ is ambiguous
    C++数组读入MATLAB数据
    Ubuntu 18.04 安装 Octave 5.1
    Ubuntu 18.04 安装 CUDA 9.0
    LSTM 神经网络输入输出层
    tf.nn.rnn_cell.MultiRNNCell
    w = tf.Variable(<initial-value>, name=<optional-name>)
    linux下修改环境变量
    linux内核编程学习——草稿
  • 原文地址:https://www.cnblogs.com/yu2006070-01/p/10396258.html
Copyright © 2020-2023  润新知