- 论坛徽章:
- 0
|
本帖最后由 ajdujqu 于 2013-03-21 17:57 编辑
我使用了 lvs + keeplived 组建了我集群系统,以前一直使用tcp_check,现在准备换成misc_check用于动态调整权重,现在有个问题。
在我的rs经历一次reboot后,lvs没有恢复其权重,而是把权重变成了0,这里问题末知了
我查到misc检查方式的大约是这样的一种情况。
MISC_CHECK 检查方式,执行一个程序
MISC_CHECK
{ misc_path <STRING> | <QUOTED_STRING> # 注:外部程序或者脚本的路径
misc_timeout <INT > #注:脚本执行的超时时间
misc_dynamic #如果设置了misc_dynamic,healthchecker程序的退出代码会动态调整服务器的权重
#返回0:健康检查OK,权重不被修改
#返回1:健康检查失败,权重设0
#返回2-255:监控检查OK,权重设置为: 退出状态-2,比如返回255,那么权重weigh=255-2=253
}
在我的配置中 执行了一个脚本,然后返回权重- #!/bin/bash
- function check_url(){
- local TMP=`curl -o /dev/null -s -w "%{time_total} %{http_code}" "http://$HOST/$URL"`
- check_url_result "$TMP"
- return $?
- }
- function check_url_result(){
- local output="$1"
- printf "$output" | awk 'BEGIN{weight='$WEIGHT'}{
- if($2 != 200 ) tmp_code=1 ;
- else if($1>0.2 && $2 == 200) tmp_code=sprint( "%d" ,weight/2+2);
- else tmp_code=0;
- }END{exit tmp_code}'
- return $?
- }
- HOST=$1
- WEIGHT=$2
- if [ -z $3 ];then
- URL="cdnstats"
- else
- URL="$3"
- fi
- check_url $HOST $URL
- exit $?
复制代码 keeplived配置是- real_server 10.1.1.5 80 {
- wegith=5
- real_server 10.1.1.5 80 {
- wegith=5
- MISC_CHECK {
- misc_path "/tmp/check_real_server_http 10.1.1.5 5"
- misc_dynamic
- }
- }
- }
复制代码 其中的lvs日志如下:
Mar 21 17:51:36 c20d001 Keepalived_healthcheckers[9884]: Misc check to [10.1.1.5] for [/tmp/check_real_server_http 10.1.1.5 2] failed.
Mar 21 17:51:36 c20d001 Keepalived_healthcheckers[9884]: Removing service [10.1.1.5]:80 from VS [10.1.1.101]:80
Mar 21 17:52:00 c20d001 Keepalived_healthcheckers[9884]: Misc check to [10.1.1.5] for [/tmp/check_real_server_http 10.1.1.5 2] success.
Mar 21 17:52:00 c20d001 Keepalived_healthcheckers[9884]: Adding service [10.1.1.5]:80 to VS [10.1.1.101]:80
可是ipvsadm -ln
IP Virtual Server version 1.2.1 (size=1048576)
Prot LocalAddress ort Scheduler Flags
-> RemoteAddress ort Forward Weight ActiveConn InActConn
TCP 10.1.1.101:80 wrr persistent 60
-> 10.1.1.5:80 Route 0 0 0
在reload后,也是如此。
只有restart后 才能看到 有权重的
这个misc_check现在看来是有问题了,不知道有木有高手解答下,这里的原理。 |
|