Один сервер упал — второй подхватил. Всё работает, никто не заметил сбоя. Рассказали, как настроить отказоустойчивый кластер между двумя серверами.
Введение
Иногда сервер может упасть без предупреждения. Перебои в электричестве, сбой в дата-центре, ошибка обновления — причин хватает. И если на нём был DNS, база или общий ресурс, всё встаёт. Чтобы таких историй не было, нужна страховка. В Windows Server этим занимается Failover-кластер. В материале рассказали, как собрать Failover-кластер между двумя VPS без выделенного хранилища, сложных сетевых схем и корпоративных бюджетов.
Что нужно для кластера между двумя VPS
Понадобятся два VPS с установленной Windows Server одной версии. Подходят редакции Standard и Datacenter начиная с 2016 года. Роль Failover Clustering должна быть доступна для установки.
На обоих серверах требуется статический внутренний IP-адрес. VPS должны видеть друг друга по локальной или VPN-сети. Обмен данными должен быть стабильным, с минимальными задержками. Без этого кластер не сможет проверять состояние узлов и будет постоянно выдавать ошибки.
Желательно использовать общий диск. Если хранилище недоступно, допускается настройка без него, например, с перемещаемыми ролями или синхронизацией данных через приложения. Поддержка Cluster Shared Volumes и Storage Spaces Direct зависит от провайдера и конфигурации VPS.
Потребуется учётная запись с правами администратора на обоих серверах. Лучше, если оба узла входят в один домен — это упростит подключение и взаимодействие между компонентами. При работе вне домена придётся вручную прописывать доверие между узлами и следить за правами доступа.
Если нет желания возиться с сетью и вручную прокладывать VPN, можно сразу выбрать VPS у провайдера, где поддерживаются приватные подсети или включённый iSCSI. В AdminVPS такие опции доступны на старте — удобно, если нужно быстро развернуть лабораторию или протестировать кластер в бою.
Имя для будущего кластера должно быть уникальным. Перед началом настройки необходимо убедиться, что оно не используется в сети и не конфликтует с другими записями в DNS.
Памятка: что потребуется для создания отказоустойчивого кластера
Компонент | Требования и рекомендации |
---|---|
ОС и редакция | Windows Server 2016 или новее, редакция Standard или Datacenter |
Роль Failover Clustering | Должна быть доступна для установки на обеих VPS |
Сеть | Статические внутренние IP-адреса; стабильное соединение через локальную сеть или VPN |
Общий диск (желательно) | Cluster Shared Volumes или iSCSI; допускается настройка без него с синхронизацией данных |
Доменная структура | Оба узла желательно включить в один домен; иначе потребуется ручная настройка доверия |
Учётная запись | Администраторская учётка на обоих VPS |
Провайдер и инфраструктура | Желательно VPS с поддержкой приватных подсетей или включённым iSCSI (например, AdminVPS) |
Имя кластера | Уникальное, не конфликтующее в сети и DNS |
Подготовка сети и подключение общих хранилищ
У каждого сервера должен быть статический внутренний IP. Если провайдер поддерживает частную подсеть, подключите оба VPS к ней. Если нет, подойдёт VPN. Главное, чтобы узлы могли пинговать друг друга и держали стабильное соединение без обрывов.
На файрволе откройте порты для кластерной связи:
- 3343 — для heartbeat,
- 135, 445, 138 — для управления и сетевого доступа,
- диапазоны RPC (49152–65535).
Если есть общее хранилище, настройте iSCSI. Подключите оба сервера к одному таргету. В интерфейсе «iSCSI-инициатор» введите IP хранилища и нажмите «Быстрое подключение». После этого выберите нужный таргет и подключите его.
Или выполните через PowerShell:
New-IscsiTargetPortal -TargetPortal 192.168.10.10
Connect-IscsiTarget -NodeAddress "iqn.2023-01.local.storage:disk01" -IsPersistent $true
На одном из серверов инициализируйте диск, создайте раздел, но не форматируйте его. После этого отключите том, чтобы кластер не ругался на конфликт монтирования. На втором сервере диск должен быть виден, но оставаться в офлайне.
Проверьте доступность диска:
Get-Disk | Where-Object IsOffline -eq $false
Если общего хранилища нет, используйте кластер с ролью, работающей без дисков. Например, можно поднять SQL Server с синхронизацией Always On или файловый сервер с DFS.
Установка компонентов и ролей Windows Server
Прежде чем собирать кластер, нужно подготовить систему. Без установленной роли кластеризации Windows просто не даст создать нужную структуру. Этот шаг стандартный, но его лучше пройти сразу и на обоих узлах, чтобы не возвращаться к нему в середине настройки.
На каждом сервере установите роль кластеризации. Через интерфейс это делается в диспетчере серверов: «Управление» → «Добавить роли и компоненты» → «Компоненты» → «Кластеризация отказоустойчивости».
Проще через PowerShell:
Install-WindowsFeature -Name Failover-Clustering -IncludeManagementTools
Убедитесь, что установка прошла успешно:
Get-WindowsFeature -Name Failover-Clustering
Если используется iSCSI, проверьте, что службы iSCSI Initiator Service запущены и диск виден. На всякий случай перезагрузите оба сервера, это помогает избежать глюков при создании кластера.
Проверьте, готовы ли оба узла к созданию кластера:
Test-Cluster -Node ИмяПервогоСервера,ИмяВторогоСервера
В отчёте проверьте наличие ошибок и предупреждений. Если кластер создаётся без общего диска, можно игнорировать сообщение о нехватке кворум-диска.
Создание и первичная настройка кластера
Когда всё нужное установлено и сеть с хранилищем готовы, можно переходить к самому важному — созданию кластера. Здесь задаются имя кластера, IP-адрес и список серверов, между которыми будут переключаться роли при сбоях. Это точка входа, от которой зависит, заработает ли всё дальше.
Когда компоненты установлены, запустите «Управление кластером отказоустойчивости» (cluadmin.msc). В меню справа выберите «Создать кластер». Добавьте оба узла по имени или IP, задайте имя для кластера и выберите IP-адрес, который будет использоваться как точка входа. Этот IP должен быть свободен в сети, иначе конфигурация не завершится.
Если общий диск подключён, выберите его в процессе создания. Если нет, то снимите галочку с автоматического добавления хранилища. Это пригодится, если кластер будет работать с перемещаемыми ролями или синхронизацией на уровне приложений.
Альтернатива — создание кластера через PowerShell:
New-Cluster -Name ClusterName -Node vps1,vps2 -StaticAddress 192.168.10.100
Где:
- ClusterName — уникальное имя для кластера, не занятое в сети;
- vps1, vps2 — имена обоих серверов, участвующих в кластере;
- 192.168.10.100 — свободный IP-адрес, который будет использоваться как точка входа кластера.
После завершения проверьте статус:
Get-Cluster
Если используется кластер без общего диска, включите принудительный режим кворума:
(Get-Cluster).DatabaseReadWriteMode = 1
Проверьте, что оба узла активны и видны. В интерфейсе они должны отображаться как «в сети», статус ресурсов — «работает».
Для кластера без домена выполните дополнительную настройку доверия между машинами. Убедитесь, что часовые пояса и синхронизация времени настроены одинаково, иначе кластер может нестабильно определять активность узлов.
Добавление сервисов высокой доступности
Пустой кластер — это просто оболочка. Чтобы он начал выполнять свою задачу, в него нужно добавить роли. Это может быть SQL Server, файловый ресурс или DNS, всё зависит от цели. После этого кластер сможет переключать нужные сервисы между узлами автоматически.
Откройте «Управление кластером отказоустойчивости» и выберите пункт «Настроить роль». Это и есть точка, где добавляются службы, которые будут автоматически переключаться между узлами при сбое.
Для SQL Server выберите пункт «Служба SQL Server», если используется традиционная установка, или настройте Always On в самой базе. Перед этим убедитесь, что SQL установлен на обоих узлах, использует один и тот же путь к данным и запущен с одинаковыми правами. После добавления SQL будет автоматически запускаться на активном узле и переключаться при отказе.
Для файлового сервера выберите «Файловый сервер» и укажите общий ресурс. Добавьте путь к папке, где будут лежать файлы, настройте доступ и права. Кластер сам будет переносить этот ресурс между узлами, если один из них выйдет из строя.
Если нужна отказоустойчивость DNS, выберите «Службу DNS». Укажите IP-адрес и убедитесь, что DNS-сервер установлен и настроен на обоих VPS. После добавления роль будет работать через кластер, и клиенты продолжат обращаться по тому же адресу, даже если активный узел сменится.
Через PowerShell роли добавляются так:
Add-ClusterGenericServiceRole -Name "ИмяСервиса" -ServiceName "Имя_службы"
Или для файлового ресурса:
Add-ClusterFileServerRole -Name "FailoverFileShare" -StaticAddress 192.168.10.101 -Path "E:\Share"
Где:
- "FailoverFileShare" — имя роли файлового сервера в кластере, можно задать любое;
- 192.168.10.101 — свободный IP-адрес из той же подсети, по которому будет доступен ресурс;
- "E:\Share" — путь к папке, расшаренной для совместного доступа, она должна существовать на обоих узлах.
После добавления убедитесь, что службы работают, и вручную переведите роль на второй узел. Так можно проверить, как кластер отрабатывает переключение.
Проверка работы и базовое тестирование
Настройка — это ещё полдела. Важно убедиться, что при сбое одного из серверов кластер действительно берёт управление на себя, а сервисы продолжают работать. Этот этап помогает проверить надёжность конфигурации и понять, где ещё могут быть слабые места.
После настройки кластера и добавления ролей нужно убедиться, что всё работает так, как задумано. Для начала переключите роль вручную на второй узел.
Откройте «Управление кластером отказоустойчивости», выберите нужную роль, нажмите правой кнопкой мыши и выберите «Переместить» → «Выбрать узел». Назначьте второй сервер и убедитесь, что служба стартует без ошибок.
Если используется файловый ресурс, откройте его по сети и попробуйте создать файл. Затем снова переместите роль. Файл должен остаться на месте, а доступ к ресурсу быть без разрывов.
Чтобы сымитировать отказ, отключите сетевой адаптер на активном узле или перезагрузите его. Кластер должен автоматически переключить роль на другой сервер. В журналах событий будет запись о перемещении, а клиент продолжит работу с минимальной задержкой.
Для SQL Server можно выполнить простой запрос, а затем перевести роль. После переключения запрос должен работать на втором узле без потери данных.
Проверить состояние всех компонентов поможет команда:
Get-ClusterGroup | Format-Table Name, State, OwnerNode
Если всё на месте, роли работают, и переключения проходят без сбоев, кластер готов к эксплуатации.
Заключение
Failover-кластер на базе Windows Server работает и на VPS — главное правильно подготовить окружение и не пытаться настроить его вслепую. Даже с минимальными ресурсами можно добиться отказоустойчивости для SQL, файлового ресурса или DNS.
Эта схема не заменяет полнофункциональную инфраструктуру с SAN и десятками узлов, но отлично подойдёт для проектов, которым важна доступность. Такой кластер реально развернуть своими руками, без дорогого железа и без сложных решений.
Если всё собрано и проверено, остаётся только следить за работой узлов и быть уверенным, что при сбое сервис не встанет. А это, по сути, и есть цель всей настройки.
Читайте в блоге:
- Кластеризация MongoDB: как развернуть реплики на нескольких серверах
- Как настроить кластер Kubernetes на нескольких VPS для запуска масштабируемых приложений
- Интеграция WordPress с Nginx и MariaDB на Ubuntu 24.04: от базы данных до SSL