使用ldirectord检测squid服务的存活

| 暂无评论 | 暂无引用通告

-->

用lvs搭建squid集群过程中,需要检测realserver的squid服务存活,如果使用ldirectord检测http服务的方式,将不能从squid中获取检测页面,应为检测http服务时访问检测页的地址是http://realserver_ip/test.html而不是http://realserver_domain/test.html,在使用squid的时候,访问地址中必须是域名。这样,我们需要手动定制一个脚本来检测squid是否存活。

 

先看一下ldirectord的检测类型:

checktype = connect|external|negotiate|off|on|ping|checktimeout

Connect测试能否建立一个tcp/ip连接

external使用外部脚本检测

Ping使用icmp检测

negotiate发送一个请求,批配接收到的字串

其他的几个自己看手册吧man ldirectord


通常情况下使用negotiate,这里我们使用外部脚本检测。

定义外部脚本的位置:

checkcommand="/etc/ha.d/resource.d/squid.sh"

这个脚本将接收到四个参数:

* virtual server ip/firewall mark

* virtual server port

* real server ip

* real server port

Default: /bin/true

 

脚本的内容如下:

 

#!/bin/sh

LD_CONF="/etc/ha.d/ldirectord.cf.squid"

HOST=$(grep "$3" $LD_CONF |sed -e "s/.*=//" -e "s/->.*$//")

PORT=$4

CONTENT=$(/usr/bin/curl http://$HOST:$PORT/test.html 2>/dev/null)

if [ "$CONTENT" = "live" ];

then

        /bin/true

else

        /bin/false

fi

 

这里需要根据本地的环境定制

http://$HOST:$PORT/test.html

 

变量LD_CONF

test.html中的内容这里是打印live

 

/etc/ha.d/ldirectord.cf.squid中的real应以下面的形式配置

squid1.supersun.biz->192.168.3.21

用于查询IP对应的域名因为ldirectord传给脚本的第三个参数是realserverIP地址。

 

checktimeout=20

checkinterval=5

autoreload=yes

quiescent=no

virtual=192.168.3.11:80

        real=squid1.supersun.biz->192.168.3.21:80 gate 1

        real=squid2.supersun.biz->192.168.3.22:80 gate 1

        real=squid3.supersun.biz->192.168.3.23:80 gate 1

        checkport=80

        protocol=tcp

        scheduler=wrr

        checktype=external

        checkcommand="/etc/ha.d/resource.d/squid.sh"


也许你对这篇文章感兴趣:

集群:使用HA+IVS搭建高用性负载均衡集群


暂无引用通告

发送引用通告网址: http://supersun.info/mt/mt-tb.cgi/899
如果您想引用这篇日记到您的Blog,请复制上面的链接,放置到您发表文章时的相应界面中。

发表评论

最新资源

  • IMG_1437.JPG
  • line.png
  • bar.png
  • perl_calander.jpg

关于此日记

此日记由 supersun 发表于 2008年11月13日 13:31

此Blog上的上一篇日记从防火墙转发内网FTP服务

此Blog上的下一篇日记用screen管理远程会话

首页归档页可以看到最新的日记和所有日记。