青蛙学Linux—使用LVS实现负载均衡集群

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

一、ipvsadm

ipvsadm是IPVS的一个管理工具,用于对IPVS进行配置和管理。ipvsadm能够在LVS的官网下载到源码包和RPM包,但因为LVS官网已好久没有更新,因此这里推荐使用YUM安装ipvsadm,这样能够获取到ipvsadm的新版本。前端

使用如下命令安装ipvsadm:算法

yum install ipvsadm

ipvsadm经常使用参数:shell

  • -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的请求就失败。后端

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

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

注意:Keepalived其实是经过ipvsadm来管理和配置IPVS的,因此要使用Keepalived支持LVS必须安装ipvsadmsession

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

2.一、virtual_server段配置

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

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.二、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.三、健康检测段配置

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

2.3.一、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.二、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.三、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
相关文章
相关标签/搜索