我正在尝试设置一个双节点 squid 代理集群。它将是一个普通代理(既不是反向代理,也不是透明代理)。
我正在使用 LVS(内核 2.6.32、ipvsadm v.1.2.1、隧道)进行负载平衡,使用 ldirectord(v. 1.0.3)进行 HA,使用 squid(v.3.1.7)作为代理服务器。
该集群在大多数站点上都运行正常,但在登录 Google 帐户、通过 OpenID 登录 serverfault.com 等方面会遇到问题。似乎问题出现在具有某种重定向的站点上,尽管在其他站点上 301 编码重定向工作正常。当我直接通过每个代理节点工作时,一切都正常。我尝试了 LVS 中的不同类型的作业调度算法,但没有帮助。在集群中只保留一个节点也不能解决问题。Squid 的 access.log 和 cache.log 也是“干净的”,没有出现错误,只是正常活动。
有人遇到过这样的问题吗?有人有这种类型的工作集群吗(与 IPVS 平衡)?有什么故障排除方法吗?
以下是配置文件的一些部分: ldirectord.cf:
# Virtual Server for HTTP_PROXY
virtual=10.128.0.109:8080
fallback=127.0.0.1:80
real=10.128.1.43:8080 ipip 30
real=10.128.0.106:8080 ipip 40
service=http_proxy
request="http://www.google.com/index.html"
receive="Google Search"
scheduler=wlc
#persistent=600
protocol=tcp
checktype=negotiate
squid.conf:
http_port 10.128.0.106:8080 # "real" IP of the node
http_port 10.128.0.109:8080 # "Virtual" IP of the cluster on tunl0 interface
http_port 127.0.0.1:8080
cache_mem 300 MB
cache_dir ufs /opt/squid/var/cache 500 16 256
cache_effective_user squid
cache_effective_group squid
visible_hostname AQUA-node
cachemgr_passwd SquidCM all
access_log /opt/squid/var/logs/access.log
logfile_rotate 5
# ICQ connect (experimental)
acl ICQ_ADDR dst 64.12.0.0/16 205.188.0.0/16
acl ICQ_PORT port 5190 443
acl CONNECT method CONNECT
acl ICQ_PROTO proto HTTPS
acl ICQ_DOMAIN dstdomain .icq.com .aol.com .aim.com
always_direct allow ICQ_DOMAIN ICQ_PORT CONNECT
always_direct allow ICQ_ADDR ICQ_PORT CONNECT
acl allnet_temp src 10.0.0.0/8
http_access allow allnet_temp
http_access deny all
如果需要任何其他信息,请告诉我。
答案1
尝试使用 lblc、lblcr 或 sh 调度程序。lblcr 最适合缓存代理。由于循环连接平衡而导致的问题。
有人有这种类型的工作集群吗(与 IPVS 平衡)?有什么故障排除的想法吗?
我有两个 http-proxy 集群(集群中有 10-12 个代理)。使用 LVS(lblcr、ipip 隧道、squid 2.7 透明)
答案2
问题解决了。
我已经使用 pv-ops 构建了 vanila 内核 2.6.35-7(因为负载均衡器是半虚拟机,所以需要),LVS 开始按需要工作。这可能是 Xenlinux 内核的回归,也可能只是旧版本的错误。其他软件组件的版本没有变化。
PS 感谢 bindbn 提供的调度程序选择技巧。