Ответ 1
Вы можете запустить мастер, ведомый и zk-процесс на одном и том же node. Вы даже можете запускать несколько основных и подчиненных процессов на одном и том же node, если вы даете им каждый уникальный порт, но это полезно только для тестового кластера.
Обычно мы рекомендуем запускать ZK на тех же узлах, что и ваши мастера, но если у вас есть дополнительные ZK, вы можете запустить их на ведомых устройствах, или смешивать и сопоставлять, как вы считаете нужным, до тех пор, пока все команды master/slave/узлы инфраструктуры могут достигать узлов ZK, и все подчиненные устройства могут достигать мастеров.
Для меньшего кластера (< 10 узлов) может иметь смысл запустить подчиненный процесс для каждого ведущего устройства, тем более, что резервные мастера не будут делать много. Даже активный мастер для небольшого кластера использует только небольшое количество процессоров, памяти и сетевых ресурсов. Просто убедитесь, что вы отредактировали --resources на этом подчиненном устройстве для учета использования основного ресурса.
Как только ваш кластер станет больше (особенно > 100 узлов), сетевой трафик в/из мастера, а также его использование процессора/памяти станет достаточно значительным, чтобы вы не захотели запускать ведомый mesos на том же node как мастер. Должно быть хорошо совместить ZK с вашим мастером даже в больших масштабах.
Вы специально не спросили, но я также обсужу, где можно запускать планировщики фреймворка (например, Spark, Marathon или Chronos). Они могут быть размещены совместно с любыми другими компонентами, но им действительно нужно иметь доступ к узлам master и zk, поскольку вся связь с подчиненными устройствами проходит через мастер. Некоторые клиенты запускают планировщики на основных узлах, некоторые запускают их на граничных узлах (поэтому пользователи не имеют доступа к подчиненным устройствам), а другие используют мета-фреймворки, такие как Marathon, для запуска других планировщиков на ведомых устройствах как задачи Mesos.