31---keepalived功能及使用场景(1)
2017-06-25 12:59
232 查看
2017-06-26 补充描述了sorry_server等的作用
=================
What is keepalived?
现在我们已经知道LVS是一个通过ipvs规则实现一个高效的3、4层负载均衡器/调度器解决方案,但是美中不足的是该调度器并不能检测后端real server的状态,当后端的real server集群中的某台主机宕机后,我们就得通过ipvsadm手动修改ipvs规则来剔除之。是不是感觉很low?没关系,马上出场的keepalive就能很好地解决这个问题。keepalive的功能之一就是帮助我们生成并维护ipvs规则:生成规则的机制和ipvsadm类似,是通过系统调用把规则写到内核,规则是事先写在keepalive.conf这个配置文件中的;维护规则的机制则是通过周期性地探测后端real
server的状态来增删ipvs规则。
====================
How to use keepalived?
现在来看看怎么使用吧(man keepalived.conf介绍的很详细)。keepalived的安装使用yum -y install keepalived就搞定,通过rpm -ql keepalived看下软件包里面都有什么。可以看到其实keepalived就只有一个配置文件,配置文件里面分了几个部分,本次我们只讲其中与real server状态监控相关的部分,其余部分在下一篇博客中介绍。
实验拓扑如下,VMware上构建两个虚拟网络,分别为 192.168.10.0/24 和 192.168.20.0/24
===== director 上配置如下 =====
global_defs { #全局配置,主要配置了邮件通知相关事宜和vrrp相关的一些配置(本文不涉及)
notification_email { #email收件人列表
root@localhost
}
notification_email_from root@localhost #email发件人
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id 6A #仅仅做real server状态检查的话,可删除
vrrp_mcast_group4 224.0.0.19 #vrrp相关的
4000
配置,不使用vrrp的话可删掉
}
virtual_server 192.168.10.131 80 { #定义集群服务,类似于 ipvsadm -A -t 192.168.10.131:80 -s rr -p 10
delay_loop 6 #探测间隔,单位是s。本例中每6s发送一个探测报文
lb_algo rr
lb_kind NAT // 支持 NAT | DR | TUN ---> 复习下上篇讲过的 lvs
persistence_timeout 10 #和ipvsadm中的-p选项一样,即10s内,来自同一台client的访问都被调度到同一台real server上
protocol TCP #仅支持探测后端real server的TCP业务
sorry_server 127.0.0.1 80 #建议调度器上也开启web业务,当后端的real server全部宕机时,可以显示sorry page向访问者说明情况。
real_server 192.168.20.130 80 { #类似于ipvsadm -a -t 192.168.10.131:80 -r 192.168.20.130 -m -w 1 这里的NAT已经在上面指定了
weight 1 #如果状态检测失败的话,权重会被设置为0,也就是从real server中剔除了
HTTP_GET {
url {
path /
status_code 200
}
nb_get_retry 3
delay_before_retry 1
connect_timeout 1
}
}
real_server 192.168.20.131 80 {
weight 1
TCP_CHECK {
connect_timeout 1
}
}
real_server 192.168.20.132 80 {
weight 1
TCP_CHECK {
connect_timeout 1
}
}
}
对后端real server的状态探测粒度是可以指定的,分别是 HTTP_GET|SSL_GET,TCP_CHECK,SMTP_CHECK,MISC_CHECK。我们需要在配置文件中指明探测的粒度和探测的条件,只有当探测条件满足时才认为real server状态是ok的(写在real server下的探测条件是“and”的关系),如果条件不满足,则将weight设置为0,即在real server集群中剔除该主机。
HTTP_GET|SSL_GET
是对HTTP资源的探测。可以探测指定url,然后判断访问该url返回的状态码或摘要(genhash得之),一致则认为通过。
TCP_CHECK
即检查与real server能否建立TCP连接,也就是3次握手是否能成功。若成功则认为检查通过,然后给real server发送 reset 标志位释放real server上的套接字资源。
SMTP_CHECK(用得少,不介绍)
MISC_CHECK
自定义检查项,也就是执行个脚本对real server做下检查啥的,然后根据脚本的返回状态码调整real server在集群中的weight。
补充介绍如下:
real_server ip port {
weight 1
notify_up "/your/script/path script_param" #real server被检测up/down后可执行自定义的脚本,给出脚本路径即可(支持参数)
notify_down "/your/script/path script_param"
inhibit_on_failure //加上这个命令状态为fault的real server虽然weight为0,但是ipvsadm -L -n 依然可以看到,不加该命令则彻底看不到fault的rs
HTTP_GET {
url {
path /
status_code 200
}
url {
path /image/haha.jpg
digest 9b3a0c85a887a256d6939da88aabd8cd //返回页面的摘要
}
nb_get_retry 3 #超时后的重试次数
delay_before_retry 1 #响应超时后等待1s再重试
connect_timeout 1 #等待响应报文的超时时间
}
TCP_CHECK {
bindto x.x.x.x #用哪个IP来做探测报文源IP(可选项,缺省为接口IP)
bind_port yyy #用哪个端口来做探测报文源端口(可选项,缺省为随机)
connect_timeout 1
}
MISC_CHECK {
you can execute your script here
}
}
配置完成后重启 keepalived,在 director 上 ipvsadm -L -n 查看 ipvs 规则,然后 down 掉 real server1,再用 ipvsadm -L -n 查看 ipvs 规则,发现real server1已经被剔除。
恢复real server1 上线,再执行 ipvsadm -L -n 发现real server1 回来了。
下一篇 会讲到 keepalived 的其他作用。
=================
What is keepalived?
现在我们已经知道LVS是一个通过ipvs规则实现一个高效的3、4层负载均衡器/调度器解决方案,但是美中不足的是该调度器并不能检测后端real server的状态,当后端的real server集群中的某台主机宕机后,我们就得通过ipvsadm手动修改ipvs规则来剔除之。是不是感觉很low?没关系,马上出场的keepalive就能很好地解决这个问题。keepalive的功能之一就是帮助我们生成并维护ipvs规则:生成规则的机制和ipvsadm类似,是通过系统调用把规则写到内核,规则是事先写在keepalive.conf这个配置文件中的;维护规则的机制则是通过周期性地探测后端real
server的状态来增删ipvs规则。
====================
How to use keepalived?
现在来看看怎么使用吧(man keepalived.conf介绍的很详细)。keepalived的安装使用yum -y install keepalived就搞定,通过rpm -ql keepalived看下软件包里面都有什么。可以看到其实keepalived就只有一个配置文件,配置文件里面分了几个部分,本次我们只讲其中与real server状态监控相关的部分,其余部分在下一篇博客中介绍。
实验拓扑如下,VMware上构建两个虚拟网络,分别为 192.168.10.0/24 和 192.168.20.0/24
===== director 上配置如下 =====
global_defs { #全局配置,主要配置了邮件通知相关事宜和vrrp相关的一些配置(本文不涉及)
notification_email { #email收件人列表
root@localhost
}
notification_email_from root@localhost #email发件人
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id 6A #仅仅做real server状态检查的话,可删除
vrrp_mcast_group4 224.0.0.19 #vrrp相关的
4000
配置,不使用vrrp的话可删掉
}
virtual_server 192.168.10.131 80 { #定义集群服务,类似于 ipvsadm -A -t 192.168.10.131:80 -s rr -p 10
delay_loop 6 #探测间隔,单位是s。本例中每6s发送一个探测报文
lb_algo rr
lb_kind NAT // 支持 NAT | DR | TUN ---> 复习下上篇讲过的 lvs
persistence_timeout 10 #和ipvsadm中的-p选项一样,即10s内,来自同一台client的访问都被调度到同一台real server上
protocol TCP #仅支持探测后端real server的TCP业务
sorry_server 127.0.0.1 80 #建议调度器上也开启web业务,当后端的real server全部宕机时,可以显示sorry page向访问者说明情况。
real_server 192.168.20.130 80 { #类似于ipvsadm -a -t 192.168.10.131:80 -r 192.168.20.130 -m -w 1 这里的NAT已经在上面指定了
weight 1 #如果状态检测失败的话,权重会被设置为0,也就是从real server中剔除了
HTTP_GET {
url {
path /
status_code 200
}
nb_get_retry 3
delay_before_retry 1
connect_timeout 1
}
}
real_server 192.168.20.131 80 {
weight 1
TCP_CHECK {
connect_timeout 1
}
}
real_server 192.168.20.132 80 {
weight 1
TCP_CHECK {
connect_timeout 1
}
}
}
对后端real server的状态探测粒度是可以指定的,分别是 HTTP_GET|SSL_GET,TCP_CHECK,SMTP_CHECK,MISC_CHECK。我们需要在配置文件中指明探测的粒度和探测的条件,只有当探测条件满足时才认为real server状态是ok的(写在real server下的探测条件是“and”的关系),如果条件不满足,则将weight设置为0,即在real server集群中剔除该主机。
HTTP_GET|SSL_GET
是对HTTP资源的探测。可以探测指定url,然后判断访问该url返回的状态码或摘要(genhash得之),一致则认为通过。
TCP_CHECK
即检查与real server能否建立TCP连接,也就是3次握手是否能成功。若成功则认为检查通过,然后给real server发送 reset 标志位释放real server上的套接字资源。
SMTP_CHECK(用得少,不介绍)
MISC_CHECK
自定义检查项,也就是执行个脚本对real server做下检查啥的,然后根据脚本的返回状态码调整real server在集群中的weight。
补充介绍如下:
real_server ip port {
weight 1
notify_up "/your/script/path script_param" #real server被检测up/down后可执行自定义的脚本,给出脚本路径即可(支持参数)
notify_down "/your/script/path script_param"
inhibit_on_failure //加上这个命令状态为fault的real server虽然weight为0,但是ipvsadm -L -n 依然可以看到,不加该命令则彻底看不到fault的rs
HTTP_GET {
url {
path /
status_code 200
}
url {
path /image/haha.jpg
digest 9b3a0c85a887a256d6939da88aabd8cd //返回页面的摘要
}
nb_get_retry 3 #超时后的重试次数
delay_before_retry 1 #响应超时后等待1s再重试
connect_timeout 1 #等待响应报文的超时时间
}
TCP_CHECK {
bindto x.x.x.x #用哪个IP来做探测报文源IP(可选项,缺省为接口IP)
bind_port yyy #用哪个端口来做探测报文源端口(可选项,缺省为随机)
connect_timeout 1
}
MISC_CHECK {
you can execute your script here
}
}
配置完成后重启 keepalived,在 director 上 ipvsadm -L -n 查看 ipvs 规则,然后 down 掉 real server1,再用 ipvsadm -L -n 查看 ipvs 规则,发现real server1已经被剔除。
恢复real server1 上线,再执行 ipvsadm -L -n 发现real server1 回来了。
下一篇 会讲到 keepalived 的其他作用。
相关文章推荐
- [原创]pg_shard使用场景及功能测试
- Oracle OCP笔记(31)使用闪回功能
- FCKeditor是使用非常广泛的HTML编辑器,本文从 ASP.NET 的使用场景对 FCKeditor 与 FCKeditor.NET 的配置、功能扩展(如自定义文件上传子目录、自定义文件名、上传图片的后期处理等)、以及安全性进行初步的阐述。
- Unity在VR场景内的截屏、并使用UniRx进行上传、下载功能
- 一文详解消息队列的常见功能场景与使用精髓 - 架构
- 如何愉快的使用MQ-详述各种功能场景
- 使用Cocos2d-lua开发植物大战僵尸07-实现开始游戏按钮功能和主场景触摸监听
- 如何愉快的使用MQ-详述各种功能场景
- Elasticsearch的功能、使用场景以及特点
- IBM iNotes脱机功能的一个常用使用场景
- 微信小程序更新6大新功能,扩大使用场景
- 一文详解消息队列的常见功能场景与使用精髓 - 架构
- CSDN Blog 之使用文章功能
- 使用xml绑定实现分页功能
- 使用JAI扩展Java Image的功能
- 使用SQL SERVER 2000的全文检索功能
- 在C#中实现打印功能(C#中PrintDialog,PrintDocument的使用)
- 使用SQL SERVER 2000的全文检索功能
- (转)使用一个下拉框或文本框+列表框的方式实现类似IE地址栏自动完成的功能
- 如何使用WORD的索引功能!