我一直在玩 Mesos 集群,并考虑在我们的生产环境中使用 Mesos 集群。一个我似乎找不到答案的问题:如何正确安排长时间运行且负载不同的应用程序?
Marathon 具有“CPUs”属性,您可以在其中设置特定应用程序的 CPU 分配权重。(我计划运行 Docker 容器)但从我所读到的内容来看,它只是一个权重,而不是我为应用程序设置的保留、分配或限制。如果它是唯一正在运行的东西,它仍然可以使用服务器上 100% 的 CPU。问题在于,对于长时间运行的应用程序,资源需求会随着时间而变化。例如,Web 服务器与流量成正比。再加上 Mesos 将此设置视为“保留”,我在 2 个弊端之间进行选择:将其设置得太低,它可能会在同一主机上启动太多进程,并且所有进程都会受到影响,主机 CPU 会超过 100%。将它设置得太高,CPU 将闲置,因为预留(或 Mesos 认为),但没有什么
你如何解决这个问题?我在 Mesos 和 Marathon 如何处理资源方面遗漏了什么吗?
我正在考虑一种理想的方法:
- 为不同的应用程序指定 CPU 的权重(例如,0.1 到 1 的顺序),这样当事情变得艰难时,更高的优先级会得到更多(就像现在一样)
- 让 Mesos 从站报告“可用 LA”及其状态(例如,如果 10 分钟 LA 为 2,有 8 个 CPU 可用,则报告 6“可用 LA”)
- 将 Marathon 配置为需要从站上的“可用 LA”资源来安排任务(例如,如果可用 LA < 2,则不要在特定主机上启动)
- 当可用 LA 变为 0 时(由于流量涌入,同时一些作业在流入之前在同一台服务器上启动) - 让 Marathon 将作业移动到另一个从站,一个具有更多“可用 LA”的从站
有没有办法实现这一切?
到目前为止,我认为我可以编写一个将在从属设备上运行的自定义隔离器模块,并将这个自定义指标报告给主服务器。然后我可以在资源协商中使用它。这是真的?
如果某个节点超载,我无法找到有关 Marathon 在不同节点上重新安排任务的任何内容。有什么建议么?