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

как восстановить после сбоя веб-сервера или обратного прокси

В моем центре обработки данных есть следующая установка.

Глобальный LB -> HA-прокси (2 экземпляра на разных серверах через VRRP, завершение HTTPS, действует как обратный прокси) ---> Nginx (2 экземпляра на разных серверах, балансировка нагрузки с помощью HA-прокси в циклическом режиме, действует как обратный прокси и балансировка нагрузки между tomcat) ---> tomcat (2 экземпляра, нагрузка балансируется каждым Nginx)

Сценарий такой:

Глобальный балансировщик нагрузки получает 100 запросов HTTPS в секунду. Он пересылает эти 100 запросов на прокси-сервер высокой доступности. HA-прокси выполняет завершение HTTPS и балансирует нагрузку 50 HTTP-запросов в секунду на каждый nginx. Каждый Nginx пересылает 25 запросов в секунду двум экземплярам tomcat.

Мой вопрос состоит из трех частей, касающихся запросов в полете:

  1. Восстановление после сбоя Nginx: в приведенном выше сценарии nginx, действующий как обратный прокси, выполняет запросы с балансировкой нагрузки к двум серверам Tomcat. Скажем, машина, на которой выйдет из строя nginx, приведет к отказу 50 запросов? Поскольку два сервера tomcat могут пересылать ответ только на nginx, но этот nginx не работает.
  2. Восстановление после сбоя HAProxy: HAProxy, который прервал 100 соединений https, умирает. Пассивный HAProxy станет активным, но https-соединения не будут перенесены на новый активный HAProxy. что происходит в этом случае? приведет ли это к потере всех 100 запросов
  3. Восстановление после сбоя tomcat: если сбой tomcat с 25 запросами в секунду, будут ли эти 25 запросов переданы второму экземпляру tomcat?

Есть ли способ настроить стек так, чтобы сбой в точках 1 и 2 не приводил к сбою запросов?

Во всех случаях соединения, сбалансированные в течение периода тайм-аута, будут потеряны (обратите внимание, что количество потерянных соединений будет варьироваться в зависимости от того, в какой момент в течение периода проверки действительно произошел сбой)

Ожидается, что браузер (или ваше клиентское приложение) восстановит https и / или повторит разорванные соединения. (не забывайте, что соединения могут быть прерваны в любой момент между клиентом и сервером, или даже когда пользователь закрывает браузер / ПК)

В целом это должно быть прозрачно для пользователя, но приложение веб-сервера должно избегать повторения одной и той же транзакции при повторном запросе данного URL, что тривиально, например, путем передачи уникального идентификатора tranaction. В любом случае это хорошая практика.

Самый разумный способ сделать это - сообщить вашему приложению о стеке и позволить ему обрабатывать любые сбои.