这是我正在尝试完成的设置
因此,我想要实现的目标是:用户访问 10.0.0.1,然后将其传递给管理请求的负载均衡器。然后我希望 varnish 能够真正处理该请求。
这是我的 ha.cf 文件:
debug 3
debugfile /var/log/ha-debug
logfile /var/log/ha-log
bcast eth0
keepalive 2
warntime 5
deadtime 15
initdead 30
udpport 694
udp eth0
auto_failback yes
node loadb1
node loadb2
*这与 loadb2 相同。此外,我还启用了调试功能以进行测试。当产品准备就绪时,它将被删除。
这是 haresources
loadb1 IPaddr::10.0.11.200/32 varnishd
*同样,在 loadb2 上也是一样(我也尝试过让心跳不管理除 IP 之外的任何东西;所以 haresources 末尾没有“varnishd”)
我的清漆配置如下:
backend server1 {
.host = "10.5.0.111";
.probe = {
.url = "/";
.interval = 5s;
.timeout = 1 s;
.window = 5;
.threshold = 3;
}
}
backend server2 {
.host = "10.5.0.112";
.probe = {
.url = "/";
.interval = 5s;
.timeout = 1 s;
.window = 5;
.threshold = 3;
}
}
director example_director random {
{
.backend = server1;
.weight = 2;
}
{
.backend = server2;
.weight = 1;
}
}
sub vcl_recv {
if (req.http.host ~ "^(www.)?bps101.net$") {
set req.backend = example_director;
}
}
我的心跳工作正常。ip 10.0.0.1 完全可 ping 通。但当我在浏览器中访问 10.0.0.1 时,我得到一个连接重置。(端口 80 上没有任何监听)。我知道 varnish 配置有效。我知道心跳配置有效。我只是无法让它们一起工作。有人有什么建议或想法吗?我将不胜感激任何人能提供的任何建议、指导等。谢谢。
答案1
您可以在 resources.d 下制作自己的脚本,以便 heartbeat 可以管理 varnish 守护进程。
一个简单的解决方案是
#!/bin/bash
case $1 in
start)
/etc/init.d/varnish start
;;
stop)
/etc/init.d/varnish stop
;;
status)
;;
esac
答案2
好的,基础知识:
- 你能在其中一台 Varnish 机器上看到 10.0.0.1 的 IP 地址吗?(
ip ad show
) - Varnish 是否正确监听了 80 端口和所有 IP 地址?(
netstat -tanp
)
如果这两个是正确的,那么就会发生一些更奇怪的事情:) 我使用了与您类似的解决方案,我曾在这个答案,您可以使用同样的东西,并且只使用 1 个 ip 来实现您想要的相同效果。
答案3
是的。问题似乎是我的 heartbeat haresources 配置中不能有“varnishd”。无论出于什么原因,heartbeat 都讨厌这个。所以 heartbeat 不能完全管理 varnish。但我有一个 cronjob 正在运行一个脚本来查看 varnish 是否正在运行。如果没有,请重新启动它。