У нас есть один VPS (Windows 2008 R2 + IIS7.5) с приложением asp.net mvc 3.
Главный вопрос: как справиться с проблемами, когда Windows требуется перезагрузка? (после установки обновлений Windows или чего-либо еще). Цель состоит в том, чтобы сделать сайт 24/7, но сначала можно показать сообщение пользователям. (мы скоро вернемся, что-то вроде app_offline.htm)
Наше приложение использует SQL, а также записывает / читает некоторые файлы (загруженные фотографии, документы), которые не хранятся в SQL.
Что вы порекомендуете?
Я действительно не знаю, какое решение было бы лучшим (и самым простым).
Как правило, для обеспечения высокой доступности вам необходимо иметь более одного сервера. Обычно у вас будет 2 или более серверов за настройкой с балансировкой нагрузки, которая может распределять нагрузку на другой сервер в случае простоя или периода обслуживания.
Очевидно, что SQL и файловое хранилище должны быть расположены на разных внутренних серверах или кластерах. Самая простая настройка HA будет выглядеть примерно так:
A Load Balancer (Possibly redundant)
|
Two Web Servers
| | |
| Clustered SQL Server (Unless a single point of failure is ok)
|
File Servers using DFS-R (Unless a single point of failure is ok)
У нас есть haproxy
балансировщик нагрузки перед нашими веб-серверами. У нас есть сценарий выключения, который отправляет команду экземпляру haproxy, чтобы вывести сервер из пула (это, э-э, отстой, поскольку он использует SSH-клиент .net, который входит в систему haproxy и запускает команду, передающую ее в socat stdio /etc/haproxy/haproxysock
- но работает). Когда сервер возвращается в режим онлайн, он запускает другую команду, которая возвращает сервер в пул.
Это означает, что конечные пользователи никогда не узнают, когда сервер приходит или уходит, так как всегда есть второй веб-сервер, который воспользуется слабиной.
На тот случай, если у нас когда-нибудь случится катастрофический сбой, у нас есть специальное сообщение «Упс, мы скоро вернемся», которое haproxy-серверы, если есть пустой пул или если каждый сервер вышел из строя.
По поводу остального устройства полагаюсь на Брент ответ. DFS-R великолепен (и также хорош для аварийного переключения вне площадки). Мы не занимаемся кластеризацией SQL, но делаем зеркальное отображение SQL, что почти так же хорошо.
Если ресурсы не проблема, и ваша цель - установить время безотказной работы как можно ближе к пять девяток / высокая доступность (HA) пока все еще можно перезагрузить. Я рекомендую использовать решение для виртуализации серверов, включая общее хранилище между вашими хостами. На рисунке ниже я использую iSCSI и VMware с сетью хранения. В сети используется протокол маршрутизатора горячего резервирования (HSRP) (одобрен Cisco, но есть и другие). В этой конфигурации и для вашей ситуации VMotion не является обязательным. SRDF и другая репликация / кластеризация данных обеспечивает полное резервирование на всех уровнях. Рисунок является упрощенным и не иллюстрирует LUN или соображения, если вместо iSCSI использовалась фабрика FC.
Кроме того, как показывает опыт, многие центры обработки данных вкладывают огромное количество времени и ресурсов в технологии, но забывают о правильном распределении энергии. Мощность, легко может испортить день. Учитывайте симметрию резервных источников питания, PDU, панелей и коммерческих источников питания. ИБП тоже критично.
ИМО, самым простым решением было бы взглянуть на Azure, он не только позволяет вам сосредоточиться на разработке, но и имеет отличное время безотказной работы (и они возмещают вам, когда он не работает). SQL находится на другом сервере, и вы можете хранить загруженные файлы в хранилище BLOB-объектов.
Возможно, это не тот маршрут, по которому вы хотите пойти, но я использую его уже около полутора лет и очень доволен :)
Да, и если у вас есть подписка MSDN, Bizspark или сайт Spark, это почти бесплатно (конечно, в зависимости от посещаемости вашего сайта).