1、健康检查方式html
keepalived对后端realserver的健康检查方式主要有如下几种web
TCP_CHECK:工做在第4层,keepalived向后端服务器发起一个tcp链接请求,若是后端服务器没有响应或超时,那么这个后端将从服务器池中移除。 HTTP_GET:工做在第5层,向指定的URL执行http请求,将获得的结果用md5加密并与指定的md5值比较看是否匹配,不匹配则从服务器池中移除;此外还能够指定http返回码来判断检测是否成功。HTTP_GET能够指定多个URL用于检测,这个一台服务器有多个虚拟主机的状况下比较好用。 SSL_GET:跟上面的HTTP_GET类似,不一样的只是用SSL链接 MISC_CHECK:用脚原本检测,脚本若是带有参数,需将脚本和参数放入双引号内。脚本的返回值需为: 0) 检测成功 1) 检测失败,将从服务器池中移除 2-255)检测成功;若是有设置misc_dynamic,权重自动调整为 退出码-2,如退出码为200,权重自动调整为198=200-2。 SMTP_CHECK:用来检测邮件服务的smtp的
2、相关配置:后端
delay_loop 隔多长时间作一次健康检测,单位为秒 connect_timeout 链接超时时间,单位为秒 nb_get_retry 检测失败后的重试次数,若是达到重试次数仍然失败,将后端从服务器池中移除。 delay_before_retry 失败重试的间隔时间,单位为秒
3、示例bash
1)HTTP_GET服务器
HTTP_GET { url { path /index.html digest 5b6d74f1453e20c09d6a20d909779ad7 } ## status_code 200 connect_port 80 connect_timeout 3 nb_get_retry 3 delay_before_retry 7 }
##digest的值用genhash生成,genhash由keepalived自带,通常位于安装目录中的bin目录,生成方法:网络
#./genhash -s realserverIP -p port -u url 如 #./genhash -s 192.168.1.100 -p 80 -u /index.html
2)TCP_CHECKtcp
TCP_CHECK { connect_port 80 connect_timeout 6 nb_get_retry 3 delay_before_retry 3 }
3)MISC_CHECKide
MISC_CHECK { misc_path "/opt/mytools/check_web.sh web1" #脚本名,需全路径 misc_timeout 30 #脚本执行的超时时间 misc_dynamic #动态调整服务器权重 }
--------------------------------------------------------华丽神奇的分割线--------------------------------------------------------oop
以上转自:http://blog.chinaunix.net/uid-10480699-id-5179873.htmlpost
--------------------------------------------------------华丽神奇的分割线--------------------------------------------------------
keepalived具备很强大、灵活的后端检测方式,其具备HTTP_GET|SSL_GET|TCP_CHECK|SMTP_CHECK|MISC_CHECK 几种健康检测方式 ,在分别介绍各类检测方式以前,先纠正一个常见的理论问题 。在百度百科 及 keepalived官方老文档(田逸提交的)中,对keepalived的描述是其具备三、四、7层交换及健康检测功能。不过根据官网对当前版本的介绍和这有些出入 。
网上一些文档的介绍以下:
layer 3层检测:进行ICMP ping包检测,确认主机是否存活,若是异常,则会该主机从服务器集群中剔除;
layer 4层检测:进行端口检测,例如80、3306等,端口不通时,将服务器从集群中剔除;
layer 7层检测:这个就是基于应用的了,如http返回码是否为200,确认主机是否正常。
固然,上面这些对keepalived的描述不能说不对,只能说不许确 。对于当前的最近版原本说,管网上关于checkers 的描述以下:
This is one of the main Keepalived functionnality. Checkers are in charge of realserver healthchecking.
A checker test if realserver is alive, this test end on a binary decision :
remove or add realserver from/into the LVS topology. The internal checker design is realtime networking software,
it use a fully multi-threaded FSM design (Finite State Machine).
This checker stack provide LVS topology manipulation accoring to layer4 to layer5/7 test results.
Its run in an independent process monitored by parent process
上面的描述很清楚,是layer4 to layer5/7 ,并不包含上面所谓的三层交换检测 。不过也并不能说网上这些说法是不许确的,由于三层相较于layer5/7这些,属于低层级的基本功能,基于MISC_CHECK 进行ICMP ping 三层网络检测彻底是不存在问题的 。不过仅仅经过ping确认一个服务是否正常,显然也过低端了。---(本人有“洁癖” ,以上为对比官网描述和当下网上资料后的一点心得)
1、HTTP及SSL GET检测
这里有几个要点:
一、二者都有两种检测方式,一种是简单的基于返回码确认;另外一种是基于确认后端页面内容hash值,确认先后是否发生变化(是否是感受有点高端,还有简单的防止页面被篡改的做用,固然,动态页面显然不行);
二、二者都是处理简单的GET请求,基于post返回值确认是否正常,这种方法显然不适用 ,不过POST方式是能够经过MISC_CHECK方式进行支持检测的;
三、二者配置语法上相同,只不过类型名不一样而已 。同属于大的web请求范畴,只不过一个走的HTTP协议,一个走的HTTPS协议;
基于状态码的检测
配置以下:
real_server 192.168.2.188 80 { weight 1 HTTP_GET { url { path /index.html status_code 200 #http://192.168.2.188/index.html的返回状态码 } connect_timeout 3 nb_get_retry 3 delay_before_retry 3 }
基于genhash的检测
配置以下:
real_server 192.168.2.188 80 { weight 1 HTTP_GET { url { path /index.html digest bfaa334fdd71444e45eca3b7a1679a4a #http://192.168.2.188/index.html的digest值 } connect_timeout 3 nb_get_retry 3 delay_before_retry 3 }
安装完keepalived包,系统中会多出一个命令genhash,经过该命令能够获取页面的hash串,以下是我更改某个页面先后的digest值:
[root@lvs-dr ~]# genhash -s 192.168.122.10 -p 80 -u /index.html MD5SUM = 6df8d89daedcbb90e3f0c1d1f82cbcf6 [root@lvs-dr ~]# genhash -s 192.168.122.10 -p 80 -u /index.html MD5SUM = e6368a07d59e3922d2f428b2acd27090
也能够参考官方给出的文档(包安装后,会有该文件生成)。
2、TCP_CHECK 检测
配置以下:
real_server 192.168.2.100 80 { weight 100 TCP_CHECK { connect_timeout 3 #链接超时时间 nb_get_retry 3 #重连次数 delay_before_retry 3 #重连间隔 connect_port 80 } }
这个在安装包附带的文档中也有示例 。并且其还能够配合HTTP_GET和SSL_GET一块儿用,以下:
real_server 192.168.201.100 443 { weight 1 SSL_GET { url { path / digest ff20ad2481f97b1754ef3e12ecd3a9cc } connect_port 444 connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } }
以上配置也是安装包中的示例 。
3、SMTP检测
SMTP这个顾名思义,主要用于邮件系统SMTP协议的检测,具体以下示例:
SMTP_CHECK { connect_timeout 10 retry 2 delay_before_retry 5 helo_name foo.bar.com host { connect_ip 172.16.1.11 } host { connect_ip 192.168.155.10 } }
这里也能够指定链接的端口(默认确定是25啊),监听的地址 ,更多也能够参看帮助文档 。
4、MISC_CHECK检测
这个是经过调用外部配置名脚本进行检测确认后端主机是否正常的方法 。
MISC_CHECK { misc_path <STRING>|<QUOTED-STRING># 外部程序或者脚本路径 misc_timeout <INT># 执行脚本的超时时间 misc_dynamic #若是设置了misc_dynamic,healthchecker程序的退出状态码会用来动态调整服务器的权重(weight). #返回0:健康检查OK,权重不被修改 #返回1:健康检查失败,权重设为0 #返回2-255:健康检查OK,权重设置为:退出状态码-2,好比返回255,那么weight=255-2=253 }
对应的脚本后面是支持传参的,两个示例以下:
#不传参配置
real_server 192.168.200.6 1358 { weight 1 MISC_CHECK { misc_path /usr/local/bin/script.sh } }
#传参配置
real_server 192.168.200.6 1358 { weight 1 MISC_CHECK { misc_path "/usr/local/bin/script.sh arg1 arg2" } }
--------------------------------------------------------华丽神奇的分割线--------------------------------------------------------
以上转自:http://www.361way.com/keepalived-health-check/5218.html
--------------------------------------------------------华丽神奇的分割线--------------------------------------------------------