你绝对可以在同一个节点上运行一个 master、slave 和 zk 进程。你甚至可以在同一个节点上运行多个主从进程,只要你给它们每个唯一的端口,但这仅对测试集群有用。
通常我们建议在与您的主节点相同的节点上运行 ZK,但如果您有额外的 ZK,您当然可以在从节点上运行它们,或者您认为合适的混合搭配,只要所有主/从/框架节点都可以到达 ZK 节点,所有从节点都可以到达主节点。
对于较小的集群(<10 个节点),在每个主节点上运行一个从进程可能是有意义的,特别是因为备用主节点不会做太多事情。即使是小型集群的活动主服务器也只使用少量的 cpu、内存和网络资源。只需确保调整该从属服务器上的 --resources 以考虑主服务器的资源使用情况。
一旦你的集群变得更大(尤其是 >100 个节点),进出主节点的网络流量以及它的 cpu/内存利用率变得足够重要,以至于你不想在与主节点相同的节点上运行 mesos 从节点。即使在大规模的情况下,将 ZK 与您的 master 放在一起也应该没问题。
您没有特别问,但我还将讨论在哪里运行您的框架调度程序(例如 Spark、Marathon 或 Chronos)。这些可以与任何其他组件位于同一位置,但它们只需要能够到达主节点和 zk 节点,因为与从节点的所有通信都通过主节点进行。一些客户在主节点上运行调度程序,一些在边缘节点上运行它们(因此用户无权访问从属节点),还有一些客户使用像 Marathon 这样的元框架在从属节点上运行其他调度程序作为 Mesos 任务。