来自 Xenu.net 大师的 Apache 和防火墙性能优化技巧
哪里有 山达基批评者,哪里就有法律威胁。 谷歌在颇具争议的《数字千年版权法案》下将 Xenu.net 从其索引中删除,以及之后承诺公开 DMCA 删除通知,引发了一场公关风暴,风暴过后,“Operation Clambake”,Xenu.net,位于 谷歌搜索 “山达基” 一词 的结果的顶部。
我们询问了该网站的网站管理员 Andreas Heldal-Lund,以及他们长期遭受苦难的 ISP Xtended Internet 的 Paul Wouters,这个受欢迎的网站是如何处理负载的。
LJ: 你们在什么硬件上运行 Linux?
Paul: 主要服务器运行在 Intel ISP 盒子上(1150s 和 2150s)。 XS4ALL 的负载均衡服务器是一台 Penguin 2U 服务器。
LJ: Andreas,开发对搜索引擎友好的网站的秘诀是什么?
Andreas:我已经很多年不需要关注对搜索引擎友好了。 Xenu.net 现在排在首位,主要是因为该邪教的攻击引起了如此多的关注。
LJ: 你们是如何获得如此多的外部链接的?
Andreas: 基本上与上述原因相同。 很少有人像网络上的这个邪教那样不受欢迎。 每次该邪教试图关闭我的网站时,他们就会把更多的注意力转移到我身上。
LJ: 你的网站有很多一般信息。 考虑参与山达基的人应该先读什么?
Andreas: 除了基本介绍信息,我建议这两本书
LJ: 你的 Linux 服务器能处理流量吗?
Paul: 现在没有任何问题。 服务器的流量低于 80KB/秒。 在被 slashdotted 两次以及该网站出现在 华盛顿时报 和 CNN 上之后,我们遇到了一些问题。 当时,我们遇到了一些 Linux 和 Apache 问题,我们需要解决这些问题(可以在 http://www.xenu.net/news/ 的图表中看到)。 3 月 22 日下午 1 点左右,我们注意到带宽的增加下降了。 然后,我们发现主服务器上已达到 128 个 Apache 子进程的硬编码限制。 我们用 512 重新编译了 Apache,下午 6 点左右再次达到这个限制。 然后我们选择了 1024 并重启。 只有重启 Apache 导致了你在晚上 7 点看到的统计数据下降。 此时,我们还添加了两个服务器,并使用 DNS 轮询来尝试进行负载均衡。 回头看,我们可能应该使用我们准备好的 Linux 虚拟服务器设置,但我们没有足够的信心来部署它。 在主服务器上运行另一个 Apache 进程没有奏效,以太网卡 (EEPRO 100) 开始报错 (eth0: card out of resources),我们很快放弃了这个想法。
在高峰期,晚上 8 点,我们在 Linux 防火墙上遇到了性能问题。 这些问题直到峰值过后才得到解决。 我们优化了所有 TCP 套接字选项(基于阿姆斯特丹 NIKHEF 研究所的人员的实验结果),这可以通过 Linux /proc 接口完成,并且我们向防火墙添加了更多内存(套接字选项消耗 大量 内存)。
这是我们当前在 Linux 防火墙上使用的套接字选项
RWIN_MIN="4096" RWIN_MAX="25165824" # NB: we have to force the default value to be equal to the max # in order to have larger buffer assigned by the kernel # RWIN_DEFAULT="87380" RWIN_DEFAULT="25165824" WWIN_MIN="4096" WWIN_DEFAULT="65536" WWIN_MAX="25165824" echo -n "Configuring socket parameters" echo "$RWIN_MIN $RWIN_DEFAULT $RWIN_MAX" > /proc/sys/net/ipv4/tcp_rmem echo "$WWIN_MIN $WWIN_DEFAULT $WWIN_MAX" > /proc/sys/net/ipv4/tcp_wmem echo $RWIN_MAX > /proc/sys/net/core/rmem_max echo $RWIN_DEFAULT > /proc/sys/net/core/rmem_default echo $WWIN_MAX > /proc/sys/net/core/wmem_max echo $WWIN_DEFAULT > /proc/sys/net/core/wmem_default echo "." # Having the ip_conntrack module loaded, even when not using it, # will severely hamper and burden the firewall. If one REALLY has to # run this, at least make sure it has enough connection bufferS: echo 32768 > /proc/sys/net/ipv4/ip_conntrack_max
Don Marti 是 Linux Journal 的技术编辑。
电子邮件: dmarti@ssc.com