http://www.meiguoidc.com

如何优雅的在 Docker 中运行高性能负载均衡器 HAProxy

您可以将 HAProxy 作为 Docker 容器运行吗?是的!这还需要问吗?如今 Docker 无处不在,您会发现许多应用程序都已被 Docker 化;HAProxy 负载均衡器也不例外,但 HAProxy 就是为此而生的。作为在 Linux 上运行的独立服务,将其移植到 Docker 似乎很自然。

为什么要在 Docker 容器内运行负载均衡器?这样做性能会有折扣么?它会引入任何安全问题吗?

在这篇博文中,您将了解为什么要考虑在容器内运行 HAProxy 以及可能产生的后果。然后你会看到如何去做。请注意,我们介绍的是如何运行 HAProxy,而不是 HAProxy Kubernetes Ingress Controller。

HAProxy Technologies 在其命名空间 haproxytech 下构建自己的一组 Docker 镜像。这些会定期更新最新的补丁和安全更新。我将在这篇博文中使用这些镜像。你会在这里找到它们:

我演示的命令是在 Linux 工作站上执行的,如果您在使用 Docker Desktop for Windows 或 Docker Desktop for Mac 时也能正常工作。

您是否希望能够运行 HAProxy 而无需编译、安装依赖项或以其他方式更改您的系统?

Docker 容器带来了可观的好处,其中最主要的是安装和执行的操作较少。Docker 允许您将容器放到主机系统上并立即获得正在运行的服务——无需安装脚本,无需安装 C 库。该服务完全包含在容器中,您需要做的就是启动它,然后将 TCP 端口映射到它。当您部署一个容器时,您可以获得运行完整的应用程序及其运行时环境的能力,而无需将其实际安装到主机系统上。

生命周期管理也变得标准化。启动、停止和删除容器就像调用一行 docker 命令一样简单。这反过来又使部署成为一个可重复和可测试的过程。它还有助于更轻松地进行软件升级。

您希望您的负载均衡器运行速度快,且不会增加环境延迟。那么,问题是,在容器内运行 HAProxy 有什么影响?

在 CPU 开销方面,记住,与虚拟机不同,Docker 不需要在主机操作系统之上的虚拟化层。容器在主机的内核上运行,基本上只是另一个进程,尽管它与主机上运行的其他进程具有更好的隔离性(它使用命名空间来实现这一点)。IBM 研究人员的一项研究发现,使用 Docker 的 CPU 开销可以忽略不计,这应该不足为奇。

网络是另一回事。默认情况下,Docker 允许您通过创建到主机的桥接网络来访问在容器内运行的服务。由于必须在容器的本地网络和主机的桥接网络之间发生的网络地址转换 (NAT),这确实会导致延迟。在之前引用的同一 IBM 研究中,研究人员发现 Docker 的 NAT 将来自客户端的 100 字节请求和来自应用程序的 200 字节响应的延迟从大约 35 微秒增加到 70 微秒。

另一方面,桥接网络很有用,因为它们允许您将容器组隔离到容器网络中,并且仅将其中一些容器暴露给主机,这对于减少主机网络所需的 IP 地址数量非常方便(想想运行数百甚至数千个容器所需的 IP 数量)。如果您有兴趣了解有关 Docker 中网络如何工作的更多信息,可以在 YouTube 上观看 Docker 团队提供的深入探讨。

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。