我需要一个具有主动健康检查功能的 Web 负载均衡器。
该前端机器应处理 https 证书、少量缓存,最重要的是,只有当后端服务器健康时才代理它们。
我尝试过 nginx,但不幸的是,我发现 nginx 开源仅支持被动健康检查,因此我几乎没有其他选择。
- 尝试使用其中一个分支进行 nginx 主动健康检查,但不受支持并且可能难以安装。
- 开发一个自定义 bash 脚本,设置在 cron 计划中,以检查更改 nginx 配置的服务器的运行状况并重新加载实例。
- 安装支持主动健康检查的 HAProxy 并从 nginx 级联配置它。因此 nginx 将处理证书和缓存并代理到本地 HAProxy,然后 HAProxy 将仅处理健康检查的平衡。
我对所有解决方案都没有什么疑问。最后一个似乎是最可靠的,但在同一台机器上安装 2 个 Web 服务器是个好主意吗?这会产生很大的开销吗?
我预计这台机器每秒将处理数百个请求,该机器是 Ubuntu 22 服务器,具有 2GB Ram 和 1 个核心。
答案1
我不会太担心在同一台服务器上有多个 Web 服务器/代理。它们之间通过 localhost 的连接将非常快。在我看来,HAProxy 绝对是最好的答案,它确实支持缓存:
https://www.haproxy.com/documentation/haproxy-configuration-tutorials/network-performance/caching/
但是,这是一个用于小文件的超快速内存缓存,而不是通用的 SQUID 类型缓存。原因很简单,较大的通用缓存会占用大量资源。为什么不使用 HAProxy 后面集群中的多台服务器来获得所需的性能?毕竟,这是负载均衡器的目的。因此,我建议您使用 HAProxy 进行终止 + 有限缓存 + 动态健康检查(基于代理)和负载均衡。或者完全跳过缓存。
Ps. 虽然这是赤裸裸的广告,但如果你需要的话,我们已经开源了 HAProxy 的 Windows 反馈代理:
跨平台 Linux 二进制文件将在几周后发布。届时我将在同一博客中更新相关信息。
答案2
OpenResty 是 Nginx + Lua 的封装器(最新版 1 或最新版 2),由于其强大的支持模块可以满足大多数企业的需求,因此开箱即用,具有强大的网络 I/O 功能。OpenResty 包含一个最近维护的 Lua 模块,该模块使用 OpenSource Nginx 执行主动健康检查: https://github.com/openresty/lua-resty-upstream-healthcheck
从安装说明中:
“如果您使用的是 OpenResty 1.9.3.2 或更高版本,那么您应该已经默认安装了此库(及其所有依赖项)(这也是使用此库的推荐方式)...”
因此不存在“不支持和难以安装”的问题。我还强调 OpenResty 不会叉Nginx,但是包装它与其他功能相结合,形成一个开箱即用的强大解决方案源。
自 2014 年以来,我在生产环境中(碰巧是 Debian)几乎只使用 OpenResty,自 2012 年以来专门使用 Nginx,所以我承认我有偏见,因为我喜欢用它完成的工作......但实际上我并不反对 HAProxy,而是喜欢 Nginx 及其灵活性,可以组合或(本机)合并监控和 BI 等操作以及缓存和负载平衡等解决方案......还有更多。