Теперь это становится немного запутанным, потому что вы говорите:
Я хочу начать myapp_api на 3 узлах, я хочу все приложения (myapp_api + MYAPP) будет работать только на одном узле одновременно ,
и добавить:
Основное приложение (myapp_api) работает, как ожидалось: только в одном узле с аварийного переключения и поглощения. Но по какой-то причине зависимость от myapp всегда начиналась с каждого узла.
В первом абзаце вы говорите, что myapp_api
должен бежать повсюду, на второй цитате, которую вы говорите, он работает по назначению путем загрузки на одном узле за раз.
Я буду здесь считать, что вы хотите, чтобы вся настройка была отказоустойчивой, а не только для приложения верхнего уровня, и я просто запутался в первом абзаце.
Файл конфигурации используется показывает, что происходит:
[{kernel,
[{distributed, [{myapp_api,
1000,
['[email protected]', {'[email protected]', '[email protected]'}]}]},
{sync_nodes_optional, ['[email protected]', '[email protected]']},
{sync_nodes_timeout, 5000}
]}].
Важным является то, что немного myapp_api
имеет узлы ['[email protected]', {'[email protected]', '[email protected]'}]
определены. Этот порядок означает, что он работает на [email protected]
в верхнем приоритете, а затем на других узлах с равным приоритетом, если есть переход на другой ресурс.
Дело в том, что ни одна из зависимостей не распространяется одинаково, и поэтому их можно ожидать повсюду.
Вам нужно только расширить этот файл конфигурации, чтобы заставить его работать. Здесь я сделал это и отступы его, чтобы показать его структура лучше:
[{kernel,
[{distributed, [
{myapp_api, 1000, ['[email protected]', {'[email protected]', '[email protected]'}]},
{myapp, 1000, ['[email protected]', {'[email protected]', '[email protected]'}]},
]},
{sync_nodes_optional, ['[email protected]', '[email protected]']},
{sync_nodes_timeout, 5000}
]}].
Я не проверял это напрямую, но я уверен, что это будет работать.
Если то, что вы хотели было для myapp_api
быть везде, но для myapp
работать в одном месте, вы можете использовать global registration, дать имя публичной стороне процесса myapp
«s, получить myapp_api
называть их. myapp_api
затем иметь возможность маршрутизировать трафик туда, где myapp
будет, если поддерживается с помощью следующей конфигурации:
[{kernel,
[{distributed, [
{myapp, 1000, ['[email protected]', {'[email protected]', '[email protected]'}]},
]},
{sync_nodes_optional, ['[email protected]', '[email protected]']},
{sync_nodes_timeout, 5000}
]}].
(Посмотрите, как myapp
является единственным приложением получить профиль распределения Другие приложения получат работать на всех узлах?)
Да, спасибо, вы все поняли, я хотел, чтобы вся настройка была отказом. И да, добавление myapp в распределенную конфигурацию также работало. Для меня это странно, что я должен был сделать это вручную. – user2461860
Это просто странно, если у вас простые настройки. У вас могут быть неоднородные кластеры, где приложения A и C необходимо запускать на узлах 1,2,3,4, а затем приложение B, которое может работать только на узлах 4 и 5 по соображениям аппаратного или ОС. С различными стратегиями для разных приложений более гибкий подход, подобный приведенному выше, имеет смысл. –