Иногда мой NodeBalancer выводит узел из вращения, и я хотел бы узнать об этом, чтобы я мог его перезагрузить. Как мне это сделать?
Это фон:
У меня есть два однотипных веб-сайта, на которых работают приложения, интенсивно использующие процессор. Один из веб-сайтов работает на одном VPS, на который загружается около 3000 выполнений в день (каждое из которых занимает от 5 до 50 секунд), а для другого веб-сайта я установил NodeBalancer с 9 узлами под ним. Каждый из них выполняет примерно 40-60% того, что делает один VPS.
Все это работает нормально, практически без сбоев, но примерно раз в неделю узел перестает отвечать на NodeBalancer и выводится из ротации. Обычно это происходит в сочетании с очень высокой загрузкой ЦП. Теперь - этого никогда не происходит на одном VPS (который уже год работает без сбоев и перезагрузок).
Итак, как я уже сказал, на узлах с балансировкой нагрузки у меня действительно возникают сбои (хотя я использую те же сценарии и программное обеспечение на 99%), и я хотел бы узнать, когда узел выведен из вращения, чтобы я мог перезагрузить его и получить он снова работает.
В настоящее время мой обходной путь заключается в том, чтобы воздействовать на письма, которые я получаю от Linode, которые предупреждают меня о высокой загрузке процессора. В некоторых случаях я выполняю перезагрузку вручную, если узел действительно стал неактивным.
После еще нескольких поисков в Интернете оказалось, что есть интерфейс командной строки для Linode, который позволяет выполнять все виды действий на узлах, а также на NodeBalancers.
Это поможет мне автоматически перезапустить вышедший из строя узел, выполнив простую команду, например:
linode restart My-Linode-Label
И это также позволит мне перечислить все узлы, которые обрабатывают трафик на NodeBalancer, выполнив:
linode nodebalancer node-list mynodebalancer 80
Я проверю, действительно ли это дает мне статус на узлах или показывает мне только активные узлы, и обновляю ответ. Похоже, это решение, которое я искал, поскольку оно содержит еще много действий, которые мне, скорее всего, понадобятся в будущем, например, запуск нового узла и т. Д.
Интерфейс командной строки можно найти на github по адресу https://github.com/linode/cli
ОБНОВЛЕНИЕ: этот интерфейс командной строки действительно дает мне статус каждого узла под балансировщиком узлов в виде простого вывода имени, статуса и адреса. Я смогу легко запустить сценарий этого.
Похоже, мне нужно добавить только несколько модулей Perl, и я готов! Не могу поверить, что служба поддержки Linode не знала об этом ...
Немного наивный подход заключался бы в том, чтобы узлы обслуживали страницу example.com/node.html, возвращающую разные результаты для каждого узла (например, номера 1-9). Затем с внешнего компьютера вы постоянно запрашиваете эту страницу (скажем, раз в секунду). Вы должны получить более или менее случайный результат (серию) со всех серверов через определенный интервал времени (скажем, минуту), затем сценарий может проверить после этого, все ли числа присутствуют, и если узел отсутствует, вызовите API Linode чтобы перезапустить его.
Проще, чем это, вы не можете просто проверить сам узел, получает ли он веб-запросы (из netstat, брандмауэра, журналов и т.д., вы даже можете проверить имя хоста балансировщика нагрузки в качестве источника), а если нет, это означает LB вывел его из строя?