Назад | Перейти на главную страницу

Как установить, чтобы менеджер группы экземпляров создавал экземпляры не одновременно?

Мне нужно, чтобы менеджер группы экземпляров создал несколько экземпляров, а затем разрешил каждому экземпляру запустить сценарий запуска. Но я надеюсь, что создание этого экземпляра имеет некоторый порядок или интервалы. Причина в том, что несколько узлов одновременно запускают один и тот же сценарий запуска. Это приведет к некоторым конфликтам. И только один узел может присоединиться к моему распределенному кластеру. Я подумал добавить случайный сон в свой сценарий запуска, чтобы другой экземпляр мог запускать сценарий запуска с другой меткой времени. Но для нашей инфра это слишком взломано и непредсказуемо.

Я также попытался изменить целевой размер instance_group_manager в моем локальном стартовом скрипте, например, установите этот target_size от 1 до n. Но это займет слишком много времени, чтобы уничтожить и создать один экземпляр, и каждый раз он будет обновлять новый ip для каждого экземпляра. Это позволит моему главному узлу действительно запутать IP узлов данных.

Итак, знает ли кто-нибудь, как настроить зависимость в instance_group_manager для создания нескольких экземпляров, особенно с использованием terraform?

Возможно, это более тяжелое решение. Но может иметь смысл в более крупном кластере.

Вы можете использовать механизм блокировки, управляемый внешним хранилищем. Consul приходит на ум как программа, встроенная в их клиент: https://www.consul.io/docs/commands/lock.html.

Это также потребует от вас начальной загрузки Consul Agent в клиентском режиме на экземпляре как части вашего скрипта.

Затем, если ваш загрузочный скрипт сделал что-то вроде:

mybinary register

Вместо этого вы можете сделать:

consul lock mykeyprefix mybinary register

Это заставит ваш скрипт получить блокировку перед продолжением. Как только процесс завершится, другой получит блокировку и продолжит.