免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3603 | 回复: 0
打印 上一主题 下一主题

lvs + keeplived + misc_check 算法问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-03-21 17:55 |只看该作者 |倒序浏览
本帖最后由 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
}

在我的配置中 执行了一个脚本,然后返回权重
  1. #!/bin/bash

  2. function check_url(){
  3.     local TMP=`curl  -o /dev/null -s -w "%{time_total} %{http_code}" "http://$HOST/$URL"`
  4.         check_url_result "$TMP"
  5.         return $?
  6. }

  7. function check_url_result(){
  8.         local output="$1"
  9.         printf "$output" | awk 'BEGIN{weight='$WEIGHT'}{
  10.                                 if($2 != 200 ) tmp_code=1 ;
  11.                                 else if($1>0.2 && $2 == 200) tmp_code=sprint( "%d" ,weight/2+2);
  12.                                 else tmp_code=0;
  13.                                 }END{exit tmp_code}'
  14.         return $?
  15. }

  16. HOST=$1
  17. WEIGHT=$2
  18. if [ -z $3 ];then
  19.         URL="cdnstats"
  20. else
  21.         URL="$3"
  22. fi

  23. check_url $HOST $URL
  24. exit $?
复制代码
keeplived配置是
  1. real_server 10.1.1.5 80 {
  2.         wegith=5
  3. real_server 10.1.1.5 80 {
  4.         wegith=5
  5.         MISC_CHECK {
  6.         misc_path "/tmp/check_real_server_http 10.1.1.5 5"
  7.         misc_dynamic
  8.         }
  9.         }
  10. }
复制代码
其中的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 LocalAddressort Scheduler Flags
  -> RemoteAddressort           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现在看来是有问题了,不知道有木有高手解答下,这里的原理。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP