Я хотел бы поделиться своими мыслями об архитектуре для обработки аварийного переключения между двумя серверами приложений, на которых размещено несколько приложений (веб-сайты на базе .NET, SQL Server) в Швейцарии. Цель состоит в том, чтобы иметь ограниченное время простоя в случае отказа от переключения вторичного сервера (<2 часов), разумные затраты и ограничение вмешательства человека для восстановления.
Примечания:
На этом этапе я планирую использовать следующую настройку:
Nginx (80 евро / месяц - бесплатно в качестве партнера MS)
Основная цель Nginx - позволить нам переключать трафик с IP-адреса сервера A на IP-адрес сервера B в случае сбоя. DNS всех служб приложений будет указывать на IP-адрес Nginx. Поскольку он размещен в Azure, он должен быть избыточным по дизайну, если сам Nginx выйдет из строя. Возможно, это какие-то функции для обеспечения избыточности в Azure для Nginx.
VMWare Essential (~ 600 евро)
В настоящее время у нас есть основная лицензия WMWare, которая позволяет нам запускать до трех хостов ESXi. Сервер A и сервер B будут экземплярами ESXi, зарегистрированными в VSphere. Сервер A будет размещать активную виртуальную машину, содержащую наш сервер приложений.
Veeam Community Edition (бесплатно)
Мы планируем использовать Veeam Community Edition для репликации образа виртуальной машины сервера приложений + журналов транзакций SQL Server с сервера A на сервер B.
Отказ оборудования сервера A / центра обработки данных
Пока что я предполагаю, что в случае отказа оборудования или отказа центра обработки данных на сервере A необходимо выполнить следующую процедуру: 1. Настройте Nginx для страницы обслуживания 2. Восстановите образ виртуальной машины сервера приложений на сервере B с помощью Veeam 3. Восстановите журналы транзакций на сервере B с помощью Veeam 4. Измените конфигурацию Nginx для перенаправления трафика с сервера B на сервер A. 5. Когда сервер A снова станет доступен, повторите процедуру в другом направлении с сервера B на сервер A
Поскольку я не являюсь экспертом по инфраструктуре / WMWare, мне бы хотелось узнать ваше мнение об этой архитектуре или любом предложении, которое поможет нам достичь нашей цели. На этом этапе я спрашиваю себя, каково будет влияние задержки / производительности, если каждый запрос будет перенаправлен с Nginx в центр приложений, даже если оба они находятся очень близко с точки зрения местоположения.
Спасибо за советы!
Жиль
Я бы не назвал это понятие «разумной стоимостью», скорее «избеганием затрат» ...
Предполагая, что вы используете nginx в качестве прокси, запросы туда не перенаправляются, но течь через этот сервер. Это может быстро стать узким местом и задержкой ответа в целом. Кроме того, вы на 100% зависите от облака Azure - это может быть дешево, но собственная инфраструктура, вероятно, может обеспечить лучшую доступность. Дважды проверьте соглашение об уровне обслуживания Azure и мелкий шрифт!
Кроме того, я бы не хотел полагаться на репликацию данных SQL посредством репликации всей виртуальной машины - вам следует рассмотреть возможность (непрерывной) репликации данных на уровне SQL, уменьшая окно потери данных.