【问题标题】:Prevent deployment to entry node, only deploy to other nodes防止部署到入口节点,只部署到其他节点
【发布时间】:2014-11-11 03:52:54
【问题描述】:

我有一个默认 3 档的免费 OpenShift 帐户。为此,我使用 OpenShift Web 控制台安装了 WildFly 8.1 映像。我将最小和最大缩放设置为 3。

现在发生的是 OpenShift 将创建 3 个 JBoss WildFly 实例:

  • 入口节点上的一个(也运行 HAProxy)
  • 辅助节点上的一个
  • 一个在另一个辅助节点上

奇怪的是入口节点上的 JBoss WildFly 实例在负载均衡器配置 (haproxy.conf) 中默认禁用。但是,每当我在相关的 git 存储库中提交时,OpenShift 仍在向其部署战争档案。

这里的额外问题是,由于最大用户进程数非常少(通过 ulimit -u 为 250),入口节点上的这个 JBoss WildFly 实例甚至无法启动。在启动期间,JBoss WildFly 会抛出随机的“java.lang.OutOfMemoryError:无法创建新的本地线程”(不,内存很好,这是操作系统进程限制)。

因此,部署过程将挂起。

总结一下:

  • 在入口节点上创建了一个 JBoss WildFly 实例,但在负载均衡器中被禁用
  • 默认配置下的 JBoss WildFly 无法在入口节点上启动,即使是一场琐碎的战争也不行。
  • 部署进程尝试部署到入口节点上的 JBoss WildFly,尽管它在负载平衡器中被禁用

现在我的问题:

如何修改部署程序进程(包括gear start 命令)以不尝试部署到入口节点上的 JBoss WildFly 实例?

【问题讨论】:

    标签: jboss openshift wildfly-8


    【解决方案1】:

    当应用从 2 档扩展到 3 档时,HAproxy 会停止将流量路由到头饰上的应用,并将其路由到其他两个档。这可确保 HAproxy 获得尽可能多的 CPU,因为您头饰上的应用程序(HAproxy 正在运行的地方)不再为请求提供服务。

    您看到的内存不足消息可能不是实际的内存不足问题,而是与 ulimit https://bugzilla.redhat.com/show_bug.cgi?id=1090092 相关的错误。

    【讨论】:

    • 感谢您的回答,但我已经知道这不是真正的 OOM,请参阅我的问题中的这一部分:'不,内存很好,这是操作系统进程限制)。 ;)
    • “一旦这样做,它就会禁止其他任何东西以该档位运行,以便 HAproxy 获得所有资源。” - 很明显,这正在发生,但如果你直接进入 3 档(固定;分钟3, max 3), 为什么 JBoss 实例还在那里?如果它被禁用,为什么它会启动并被部署到?无论如何,它现在正在占用资源,即使没有流量被路由到它:(
    • 所以你是对的,它并没有完全获得所有资源。基本上,当一个应用程序从 2 档扩展到 3 档时,HAProxy 将停止将流量路由到您的 head gear 上的应用程序并开始将其路由到其他 2 档。这可以确保您的 head gear 上的应用程序不会使用太多的 CPU是 HAProxy 最需要的(HAproxy 的内存使用量非常小)。我会修改我的答案以反映这一点。
    • 感谢修改,但仍然不明白保持应用程序运行的逻辑,但不将流量路由到它。当您从 3 档开始时,这更加奇怪。那么头戴设备上的应用一开始就没有看到任何流量。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-09
    • 2020-07-02
    • 1970-01-01
    • 2018-10-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多