-->
用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传给脚本的第三个参数是realserver的IP地址。
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"
也许你对这篇文章感兴趣:

发表评论