了解HAProxy进程管理器

2020-07-11 06:48:39

HAProxy进程管理器允许您启动由HAProxy管理的外部程序。

并不是所有的东西都直接编译成HAProxy的C代码。有些组件是使用其他编程语言编写的,并与负载均衡器一起运行。这些组件可以包括使用HAProxy的流处理卸载引擎(SPOe)构建的代理-SPOe允许多语言扩展,也就是说使用任何编程语言扩展HAProxy-以及守护进程,如用Go编写的HAProxy数据平面API。您知道HAProxy有一个功能可以让它启动、停止和重新加载这些组件吗?它可以在它自己的主进程下将它们作为工作者托管,将它们的生命周期与它自己的连接起来。在我们开始之前,让我们看看如何将HAProxy配置为服务。

当您使用-W参数启动HAProxy时(如果将其作为Systemd下的服务运行,则使用-Ws),它会启用主-从模式。主-工作进程模式启动一个主进程及其下的一个或多个工作进程,从而可以在多个工作进程之间分配HAProxy的职责,同时公开单个通信端点-主进程-用于与负载平衡器作为一个整体进行交互。例如,您可以向主进程发送重新加载命令,它将重新创建工作进程。这种设计非常适合在像Systemd这样的现代服务管理器下托管HAProxy。

默认情况下,Ubuntu或Debian的系统包将-ws参数添加到Systemd单元文件。启动HAProxy后,检查其状态,您会发现正在运行的进程列表:一个主进程和一个工作进程:

在此模型中,重新加载在体系结构上更简单;更改HAProxy配置,然后使用systemctl reload haproxy触发重新加载。主进程将创建一个新工作进程,向其发送新配置,然后正常关闭旧工作进程。当您观看William Lallemand的演示HAProxy process Management时,您将更多地了解主-工人模型背后的基本原理。William Lallemand是HAProxy的核心工程师之一,他描述了与HAProxy相关的过程管理的历史。

主-工作者模型简化了对HAProxy正在运行的进程的管理,但它也为HAProxy 2.0中引入的一个新功能打开了大门:HAProxy进程管理器。进程管理器允许您配置使用HAProxy启动和停止并由HAProxy主进程控制的外部应用程序。

您可以将应用程序设置为在HAProxy启动时运行,方法是向HAProxy配置中添加一个程序节。我们经常使用它来启动数据平面API,这是用于在运行时配置HAProxy的HTTP RESTful服务。API是在HAProxy外部运行的二进制文件,因此通过使用进程管理器,我们不需要安装Systemd单元文件来控制其生存期。当HAProxy启动时,API也会启动。

下面的示例显示了如何使用进程管理器运行HAProxy数据平面API:

命令指令将程序设置为运行,并且可以接受任意数量的参数,这些参数将被传递给外部程序。在这里,我们不想在每次重新加载HAProxy时停止并重新创建API-API将在不同时间重新加载HAProxy以管理其配置-因此我们包含no option start-on-reload指令。其他应用程序如果每次都重新创建,效果会更好,并且不会使用此指令,例如流处理卸载代理(SPOA),其配置会加载到HAProxy中。

根据需要添加任意数量的程序节。每个都将包含要运行的单个程序。除了将其用于数据平面API之外,它还可以方便地启动SPOA,SPOA用于将负载均衡器数据流式传输到外部应用程序。例如,您可以通过将HAProxy通信量跟踪代理包括在程序段中来启动它,如以下代码片断所示:

有关流量跟踪代理的更多信息,请参阅我们的博客文章HAProxy Traffic Mirroring for Real-World Testing(用于真实世界测试的HAProxy流量镜像)。

启动HAProxy时,添加-S参数以公开主CLI,它是用于与工作进程交互的接口。它使用以下语法:

这与HAProxy运行时API不同,HAProxy运行时API旨在控制HAProxy的动态特性,如条形表和映射文件;这里给出的命令集较少,但与管理工作进程相关。您将通过调用Help命令找到所有可用选项:

HAProxy进程被列为工作进程,程序单独列出。默认情况下,只有一个工作进程,但是您可以通过在配置的全局部分设置nbproc来控制这一点。例如,如果将nbproc设置为3,则将列出三个工作进程。使用nbproc创建多个HAProxy工作器允许您将特定功能(如TLS终止)固定到特定进程,但是在单个进程上启用多个线程可以实现相同的结果,并且更易于管理。在我们的博客文章“HAProxy中的多线程”中了解更多关于多进程和多线程之间的区别。

您可以通过在命令前面加上相对PID来针对单个工作进程执行运行时API命令。例如,使用@1对第一个Worker调用命令:

尽管您不能使用此技术调用针对非HAProxy进程的命令,例如我们的数据平面API程序,但仅查看正在运行的程序列表并知道它们是否按预期启动就非常有用。

多年来,HAProxy派生工作者的方式发生了变化,变得更适合像Systemd这样的现代服务管理器,并为像HAProxy Process Manager这样的特性打开了大门,HAProxy Process Manager允许您运行任意程序。进程管理器使用简单的配置语法,即PROGRAM部分,可用于启动支持HAProxy的任意数量的外部应用程序。它通常用于启动HAProxy数据平面API,但对于运行SPOA(如流量跟踪代理)也很方便。

想要了解类似话题的最新动态吗?订阅这个博客吧!您也可以在Twitter上关注我们,并加入Slake上的对话。

HAProxy Enterprise是业界领先的软件负载均衡器。它支持在任何规模、任何环境中交付现代应用程序,提供最高的性能、可观察性和安全性。在权威专家支持和专业服务的支持下,各组织利用其尖端功能和企业附加组件套件。准备好了解更多信息了吗?联系我们,注册免费试用!