Обслуживание сервера nginx с нулевым временем простоя
Я управляю несколькими серверами и ради вопроса рассмотрим эти три:
- Сервер nginx: он только запускает nginx и обслуживает статические файлы, ответы из дискового кэша или передает запросы на сервер API
- Сервер API: он возвращает данные и подключается к серверу базы данных
- сервер базы данных: он содержит базу данных, Redis и некоторые другие вещи
Эта настройка позволяет нам выполнять техническое обслуживание с нулевым временем простоя. Это также относится и к обновлениям. Если мы хотим добавить больше памяти на сервер базы данных, мы просто раскручиваем новый экземпляр, физически клонируем базу данных и уничтожаем старый сервер.
Примерно то же самое можно сделать с сервером API. Однако рано или поздно нам потребуется обновить сервер nginx. Как мы можем сделать это без простоя, если обновления требуют остановки? Экземпляр nginx должен иметь фиксированный IP-адрес для доступа из внешнего мира.
1 ответ
Одна из возможностей - установить второй сервер nginx и настроить поддержку активности на обоих из них.
Каждый сервер имеет свой уникальный IP-адрес. Кроме того, keepalived позволяет вам определять плавающий IP-адрес, который используется обоими серверами. Этот плавающий адрес активен только на одном сервере в любое время. При отключении поддержки активности на активном сервере плавающий IP-адрес становится активным на другом сервере автоматически. То же самое происходит, если сервер выключен или по какой-либо причине происходит сбой.
Это позволяет выполнять обслуживание веб-серверов, не прерывая работу службы.
Просто сосредоточьтесь на VRRP-части keepalived и не позволяйте себе отвлекаться на балансировку нагрузки и другие необычные функции, так как они вам, вероятно, не понадобятся на данный момент. Возможно, вам также понадобится скрипт уведомления, который вызывается при добавлении или удалении плавающего IP-адреса, чтобы вы могли перезагрузить nginx, чтобы убедиться, что он прослушивает новый IP-адрес.