5.5. 基于拉取的 REX 传输调整
Satellite 具有用于远程执行的基于拉取的传输模式。此传输模式使用 MQTT 作为其消息传递协议,包括在每个主机上运行的 MQTT 客户端。如需更多信息, 请参阅管理主机中的远程执行的传输模式。
5.5.1. 增加基于拉取的 REX 传输的主机限制 复制链接链接已复制到粘贴板!
您可以调整 mosquitto MQTT 服务器,并增加与之连接的主机数量。
流程
在 Satellite 服务器或 Capsule 服务器上启用基于拉取的远程执行:
# satellite-installer --foreman-proxy-plugin-remote-execution-script-mode pull-mqtt请注意,您的 Satellite 服务器或胶囊服务器只能使用一个传输模式,可以是 SSH 或 MQTT。
创建配置文件以增加 MQTT 服务接受的默认主机数量:
cat >/etc/systemd/system/mosquitto.service.d/limits.conf <<EOF [Service] LimitNOFILE=5000 EOF这个示例将限制设置为允许
mosquitto服务处理 5000 主机。运行以下命令以应用您的更改:
# systemctl daemon-reload # systemctl restart mosquitto.service
5.5.2. 降低基于拉取的 REX 传输的性能影响 复制链接链接已复制到粘贴板!
当使用脚本提供程序为远程执行作业配置基于拉取的传输模式时,胶囊服务器会通过 MQTT 向客户端发送有关新作业的通知。此通知不包括客户端应该执行的实际工作负载。客户端收到有关新远程执行作业的通知后,它会查询胶囊服务器以获取实际工作负载。在作业期间,客户端定期将作业输出发送到胶囊服务器,进一步增加对胶囊服务器的请求数量。
这些对胶囊服务器的请求与 MQTT 协议允许的高并发性一起可能会导致胶囊服务器上的可用连接耗尽。有些请求可能会失败,导致远程执行作业的一些子任务没有响应。这还取决于实际的作业工作负载,因为某些作业会给 Satellite 服务器造成额外的负载,因此当客户端注册到 Satellite 服务器中时,资源也会竞争资源。
要避免这种情况,请使用以下参数配置 Satellite 服务器和 Capsule 服务器:
- MQTT Time To Live - 在考虑作业未发布前,主机获取作业的时间间隔(以秒为单位)
- MQTT Resend Interval - 通知应重新发送到主机的时间间隔(以秒为单位),直到作业被获取或取消
- MQTT Rate Limit - 允许同时运行的作业数量。您可以通过调整速率限制来限制远程执行的并发性,这意味着您要在 Satellite 上放入更多负载。
流程
- 调优 Satellite 服务器上的 MQTT 参数:
# satellite-installer \
--foreman-proxy-plugin-remote-execution-script-mqtt-rate-limit My_MQTT_Rate_Limit \
--foreman-proxy-plugin-remote-execution-script-mqtt-resend-interval My_MQTT_Resend_Interval \
--foreman-proxy-plugin-remote-execution-script-mqtt-ttl My_MQTT_Time_To_Live
胶囊服务器日志位于 /var/log/foreman-proxy/proxy.log 中。胶囊服务器使用 Webrick HTTP 服务器(不包括 httpd 或 Puma),因此无法简单的方法来增加其容量。
根据工作负载、主机数量、可用资源和应用调整,您可能达到 Bug 2244811,这会导致 Capsule 消耗太多内存,最终被终止,从而导致剩余的作业失败。目前还没有通用可用的临时解决方案。