Содержание
Представьте: вы утром заходите на сайт, а он не отвечает. База данных — недоступна. Файловый сервер — молчит. Причин может быть масса: сбой в центре обработки данных, обновление, которое пошло не так, или просто перебои с питанием. И если всё критически важное висит на одном сервере — вы уже в зоне риска.
Но что, если бы у вас был второй сервер, который мгновенно включается в работу при падении первого? Это не фантастика — это Failover-кластер в Windows Server. И сегодня мы разберём, как собрать его между двумя VPS — без дорогостоящего оборудования, без сложных сетевых схем и без необходимости быть системным архитектором уровня Microsoft.
Эта статья — подробнейшее руководство по созданию отказоустойчивого кластера на базе Windows Server 2016/2019/2022. Мы пройдём все этапы: от подготовки инфраструктуры до тестирования переключения ролей. Каждый шаг будет сопровождаться пояснениями, примерами и командами PowerShell. Готовьтесь — это будет глубокий погружение в мир высокой доступности.
Что такое Failover-кластер и зачем он нужен?
Прежде чем погружаться в технические детали, давайте разберёмся: что такое Failover-кластер и зачем он вообще нужен?
Failover-кластер — это технология Microsoft, позволяющая объединить несколько серверов (узлов) в единую группу, которая обеспечивает автоматическое переключение нагрузки при выходе одного из узлов из строя. Если первый сервер упал — второй мгновенно берёт на себя его функции, и пользователи даже не замечают сбоя.
Такой подход используется для защиты критически важных служб: SQL Server, файловых серверов, DNS, DHCP, Hyper-V и других. В корпоративной среде кластеры строятся на мощных серверах с общим хранилищем (SAN), но сегодня мы покажем, что аналогичную архитектуру можно воссоздать и на виртуальных серверах — VPS.
Да, это не будет полноценный Enterprise-кластер, но для средних проектов, тестовых сред или даже небольших бизнесов — это отличное решение, которое снижает риск простоя до минимума.
Требования к инфраструктуре: что нужно, чтобы начать?
Перед тем как начать настройку, важно понимать, какие компоненты и условия необходимы. Это не просто "два VPS и Windows" — есть нюансы, которые могут свести на нет все усилия, если проигнорировать их на старте.
Операционная система и редакция
Для создания Failover-кластера требуется Windows Server 2016 или новее. Подойдут редакции:
- Standard — поддерживает кластеризацию, но с ограничениями по количеству виртуальных машин (если используется Hyper-V);
- Datacenter — полная поддержка всех функций, включая Storage Spaces Direct и Live Migration.
Оба VPS должны быть на одной версии и редакции Windows Server. Смешивать, например, 2019 Standard и 2022 Datacenter — нельзя.
Сетевая конфигурация
Кластер требует стабильной и быстрой связи между узлами. Для этого:
- Каждый VPS должен иметь статический внутренний IP-адрес;
- Узлы должны видеть друг друга по сети (ping должен проходить без потерь);
- Желательно использовать приватную сеть (private network), если провайдер её поддерживает (например, Hetzner, OVH, AdminVPS);
- Если приватной сети нет — можно настроить VPN (например, WireGuard или OpenVPN) между серверами.
Общее хранилище (не обязательно, но желательно)
Классический кластер требует общего диска (например, iSCSI-таргета), чтобы хранить данные, общие для обоих узлов. Однако в среде VPS это не всегда доступно.
Варианты:
- iSCSI-таргет — если провайдер предоставляет блочное хранилище;
- Cluster Shared Volumes (CSV) — требует поддержки от VPS;
- Storage Spaces Direct — только в Datacenter-редакции и с SSD-дисками;
- Без общего диска — возможен, но с ограничениями (роли без дисков, синхронизация на уровне приложений).
Если общего хранилища нет, кластер можно настроить в режиме Node Majority или Cloud Witness (например, с Azure Blob Storage).
Доменная среда
Лучше всего, если оба VPS входят в один домен Active Directory. Это упрощает управление правами, аутентификацией и доверием между узлами.
Но если домена нет (например, в облаке), можно настроить кластер в рабочей группе, но с рядом ограничений:
- Нужно вручную настроить локальные учётные записи с одинаковыми именами и паролями на обоих серверах;
- Требуется включить согласие на удалённое управление (WinRM);
- Рекомендуется синхронизировать время с помощью W32Time.
Порты и брандмауэр
Failover-кластер использует несколько портов для связи. Их нужно открыть на обоих серверах:
Порт | Назначение |
---|---|
3343 | Heartbeat (проверка состояния узлов) |
135 | RPC (удалённый вызов процедур) |
445 | SMB (обмен файлами и данными) |
137–138 | NetBIOS (именование и разрешение имён) |
49152–65535 | Динамические порты RPC |
Открыть порты можно через брандмауэр Windows:
netsh advfirewall firewall add rule name="Failover Cluster" dir=in action=allow protocol=TCP localport=3343 netsh advfirewall firewall add rule name="RPC" dir=in action=allow protocol=TCP localport=135 netsh advfirewall firewall add rule name="SMB" dir=in action=allow protocol=TCP localport=445 netsh advfirewall firewall add rule name="RPC Dynamic" dir=in action=allow protocol=TCP localport=49152-65535
Имя кластера
Кластер должен иметь уникальное имя NetBIOS и DNS. Перед созданием убедитесь, что:
- Имя не занято в сети;
- Нет конфликта с именами серверов или других устройств;
- Если используется домен — имя должно быть доступно для регистрации в DNS.
Подготовка инфраструктуры: сеть и хранилище
Теперь, когда требования ясны, переходим к подготовке. Этот этап — фундамент всего кластера. Если здесь допустить ошибку, кластер либо не создастся, либо будет нестабилен.
Настройка статических IP и приватной сети
Зайдите на каждый VPS и назначьте статический IP в приватной подсети. Например:
- VPS1: 192.168.10.10
- VPS2: 192.168.10.11
Настройка через PowerShell:
Set-NetIPInterface -InterfaceAlias "Ethernet" -Dhcp Disabled New-NetIPAddress -InterfaceAlias "Ethernet" -IPAddress 192.168.10.10 -PrefixLength 24 -DefaultGateway 192.168.10.1 Set-DnsClientServerAddress -InterfaceAlias "Ethernet" -ServerAddresses 8.8.8.8 Проверьте связь: ping 192.168.10.11
Настройка iSCSI (если используется общее хранилище)
Если провайдер предоставляет iSCSI-таргет, подключим его к обоим серверам.
На обоих VPS включите службу iSCSI:
Start-Service msiscsi Set-Service msiscsi -StartupType Automatic
Добавьте портал таргета:
New-IscsiTargetPortal -TargetPortal "192.168.10.20"
Подключитесь к таргету:
Connect-IscsiTarget -NodeAddress "iqn.2023-01.local:storage.disk01" -IsPersistent $true
После подключения диск появится в системе. На одном сервере инициализируйте его, но не форматируйте:
Initialize-Disk -Number 1 -PartitionStyle GPT New-Partition -DiskNumber 1 -UseMaximumSize -DriveLetter S # Не форматируем! Кластер сделает это сам
На втором сервере диск должен быть в состоянии Offline. Проверьте:
Get-Disk | Where-Object BusType -eq "iSCSI"
Альтернатива: кластер без общего диска
Если iSCSI недоступен, можно использовать режим Node Majority. В этом случае кворум (решение о работоспособности) определяется количеством активных узлов.
Такой режим подходит для двухузлового кластера, но требует обязательного включения принудительного кворума при перезагрузке (иначе кластер не запустится).
Установка ролей и компонентов на Windows Server
Теперь установим необходимые компоненты. Без них кластер просто не будет работать.
Установка роли "Отказоустойчивая кластеризация"
На обоих серверах выполните команду PowerShell от имени администратора:
Install-WindowsFeature -Name Failover-Clustering -IncludeManagementTools
После установки перезагрузите серверы:
Restart-Computer -Force
Проверьте, что роль установлена:
Get-WindowsFeature -Name Failover-Clustering
Если статус Installed — всё в порядке.
Проверка готовности узлов
Перед созданием кластера выполните тест:
Test-Cluster -Node VPS1, VPS2
Команда проверит:
- Связь между узлами;
- Доступность общих дисков;
- Настройки безопасности;
- Совместимость ролей.
Если есть ошибки — исправьте их. Предупреждения (например, об отсутствии общего диска) можно проигнорировать, если вы сознательно работаете без него.
Создание кластера: первый шаг к отказоустойчивости
Теперь самое главное — создание кластера. Это можно сделать через графический интерфейс или PowerShell. Мы покажем оба способа.
Через PowerShell (рекомендуется)
Выполните на одном из серверов:
New-Cluster -Name MyCluster -Node VPS1, VPS2 -StaticAddress 192.168.10.100
Где:
- MyCluster — имя кластера;
- VPS1, VPS2 — имена узлов;
- 192.168.10.100 — свободный IP-адрес для кластера.
Если используется общий диск, он будет добавлен автоматически. Если нет — можно указать:
New-Cluster -Name MyCluster -Node VPS1, VPS2 -StaticAddress 192.168.10.100 -NoStorage
Через графический интерфейс
- Откройте Failover Cluster Manager (cluadmin.msc);
- Выберите Validate a Configuration — проверка (опционально);
- Выберите Create a Cluster;
- Добавьте оба узла;
- Укажите имя кластера и IP-адрес;
- Завершите мастер.
Настройка кворума (особенно важно для двухузлового кластера)
Для двухузлового кластера рекомендуется использовать облако-свидетель (Cloud Witness) или файловый свидетель (File Share Witness).
Пример настройки Cloud Witness (требуется учётная запись Azure):
Set-ClusterQuorum -CloudWitness -AccountName "mystorageaccount" -AccessKey "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
Если нет доступа к Azure, можно использовать режим Node Majority:
Set-ClusterQuorum -NodeAndDiskMajority "Cluster Disk 1"
Или, если диска нет:
Set-ClusterQuorum -NodeMajority
Добавление ролей высокой доступности
Кластер создан, но он пока пустой. Добавим в него полезные службы.
Файловый сервер с общим ресурсом
Создадим отказоустойчивый файловый сервер:
Add-ClusterFileServerRole -Name "HAFileServer" -StaticAddress 192.168.10.101
Затем создадим общий ресурс:
Add-ClusterSharedVolume -Name "Cluster Disk 1"
New-Item -Path "S:\Shared" -ItemType Directory
Add-ClusterFileServerShare -Name "PublicShare" -SharePath "S:\Shared" -ContinuouslyAvailable $true
Служба DNS
Если оба сервера имеют роль DNS, добавим её в кластер:
Add-ClusterGenericServiceRole -Name "HADNS" -ServiceName "DNS"
После этого DNS будет автоматически переключаться между узлами.
SQL Server (пример)
Для SQL Server нужно:
- Установить SQL на обоих узлах;
- Использовать общий диск для хранения баз;
- Добавить роль через мастер или PowerShell:
Add-ClusterVirtualMachineRole -VMName "SQLVM"
Или использовать Always On Availability Groups — более современное решение.
Тестирование и проверка работоспособности
Теперь проверим, как всё работает.
Ручное переключение ролей
Переместите роль на другой узел:
Move-ClusterGroup -Name "HAFileServer" -Node "VPS2"
Проверьте статус:
Get-ClusterGroup | Format-Table Name, State, OwnerNode
Имитация отказа
Чтобы проверить автоматическое переключение, отключите сетевой адаптер на активном узле:
Disable-NetAdapter -Name "Ethernet" -Confirm:$false
Через 10–30 секунд кластер должен перевести роль на второй узел. Проверьте журнал событий:
Get-ClusterLog -TimeSpan 5
Мониторинг и диагностика
Используйте команды:
Get-Cluster | Format-List * Get-ClusterNode Get-ClusterResource
Все события кластера можно найти в Журнале событий → Приложения и службы → FailoverClustering.
Заключение: ваш сервер теперь живёт вечно
Вы только что создали отказоустойчивый кластер между двумя VPS — решение, которое раньше было доступно только крупным компаниям с бюджетом на SAN и кластерные лицензии.
Теперь, если один из серверов упадёт — второй мгновенно возьмёт на себя его функции. Пользователи не заметят сбоя. Базы данных останутся целыми. Файлы — на месте.
Это не идеальное Enterprise-решение, но для малого бизнеса, тестовых сред, SaaS-проектов или критически важных сервисов — это мощная страховка.
Ключевые моменты, которые нужно помнить:
- Кластер требует тщательной подготовки: сеть, хранилище, права;
- Два узла — минимальная конфигурация, но возможна;
- Без общего диска работать можно, но с ограничениями;
- Тестирование — обязательный этап;
- Регулярно проверяйте состояние кластера и обновляйте ПО.
Failover-кластер — это не про сложность. Это про спокойствие. Про уверенность, что ваш сервис работает, даже когда что-то пошло не так. А это, в конце концов, и есть цель всей системной инженерии.
Настройте, протестируйте, поставьте на мониторинг — и забудьте о внезапных простоях.