我正在为一个流量很大的网站配置一台服务器作为 nginx 服务器。它预计会同时接收来自大量 IP 地址的流量。它预计每秒可获得 500 个请求,连接它的 IP 至少有 2000 万个。
我在之前的服务器中发现的一个问题与 iptables / ipconntrack 有关。我不知道这种行为,很高兴知道我应该调整 ubuntu / debian (32/64) 位机器的哪些参数才能从服务器获得最大性能。我可以在服务器上放入大量 RAM,但关键任务是响应时间。我们理想情况下不希望任何连接挂起 / 超时 / 等待,并希望总体响应时间尽可能短。
答案1
您真的需要 iptables 吗?如果您希望从单个盒子中获得如此高的性能,我建议将其完全删除。如果您仔细配置机器,删除除 nginx 之外的所有服务,配置 SSH 以在非公共接口(VPN、lan 等)上监听,那么您可能可以不用防火墙。这至少可以解决您的一个问题。
您是否尝试在一webserver,还是其中几个?即使是简单的 DNS 循环也能帮助您将负载分散到几台不同的机器上。您肯定也需要多台服务器来提高可靠性。
答案2
这个问题相当广泛。我给你的最佳建议是退后一步,思考如何扩展你的应用程序。你是想扩大(几个大型服务器)还是缩小(很多小型服务器)还是两者兼而有之。一旦你想出了扩展策略,你也可以围绕它设计一个 HA 策略。
我非常怀疑你在网站启动后是否会看到 2000 万的独立访问量(只是为了给你一些启发,这将使它成为至少排名前 200 位的网站)。
制定一个良好的计划来随着您的流量进行扩展,并且不要超出您的服务器能力范围,为峰值留出一些空间,并随着您的流量增长而引入新设备。
我们时不时会收到这些问题。考虑未来是件好事,但不要计划拥有一个能够立即处理 2000 万/6000 万/10000 万独立访问量的基础设施,这样会浪费你的钱,而且基础设施大部分都会闲置。
现在回答您的问题,我们 Stack Overflow(目前)使用 iptable,并且在我们的前端路由器上运行 conntrack 模块,没有任何问题。我建议发布一个新问题,详细说明您在负载下运行 iptables/*conntrack* 时遇到的确切问题。
最后是一些好书
答案3
如果您所做的只是提供相对较小的静态文件,那么每秒 500 个请求确实不算多。另一方面,如果它们很大或很复杂(例如基于会话或依赖于数据库),那么这就是相当大的工作量。
考虑在此解决方案前面建立一个像 Varnish 这样的反向代理,设置为使用 malloc 池作为缓存。经过适当调整的 VCL 可让您在内存中缓冲大部分站点,这意味着 nginx 只需提供少数精选位。另外,请确保在文件系统上设置 noatime。