从Linux的2.4内核开始,LVS的主要模块IPVS已经集成在了Linux的内核中,无需再另外安装。可是要使用IPVS的功能,则须要其余软件的配合。常见的有IPVS管理软件ipvsadm和Keepalived。html
一、ipvsadm
ipvsadm是IPVS的一个管理工具,用于对IPVS进行配置和管理。ipvsadm能够在LVS的官网下载到源码包和RPM包,但因为LVS官网已好久没有更新,因此这里推荐使用YUM安装ipvsadm,这样能够获取到ipvsadm的新版本。前端
使用如下命令安装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必须安装ipvsadm。session
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