Блог / Статьи

Полезная информация для вашего хостинга

Надёжность в облаке: как создать Failover-кластер между двумя VPS на Windows Server

Надёжность в облаке: как создать Failover-кластер между двумя VPS на Windows Server

Содержание

Представьте: вы утром заходите на сайт, а он не отвечает. База данных — недоступна. Файловый сервер — молчит. Причин может быть масса: сбой в центре обработки данных, обновление, которое пошло не так, или просто перебои с питанием. И если всё критически важное висит на одном сервере — вы уже в зоне риска.

Но что, если бы у вас был второй сервер, который мгновенно включается в работу при падении первого? Это не фантастика — это 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).

claster01

Доменная среда

Лучше всего, если оба 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

Команда проверит:

  • Связь между узлами;
  • Доступность общих дисков;
  • Настройки безопасности;
  • Совместимость ролей.

Если есть ошибки — исправьте их. Предупреждения (например, об отсутствии общего диска) можно проигнорировать, если вы сознательно работаете без него.

claster03

Создание кластера: первый шаг к отказоустойчивости

Теперь самое главное — создание кластера. Это можно сделать через графический интерфейс или 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

Через графический интерфейс

  1. Откройте Failover Cluster Manager (cluadmin.msc);
  2. Выберите Validate a Configuration — проверка (опционально);
  3. Выберите Create a Cluster;
  4. Добавьте оба узла;
  5. Укажите имя кластера и IP-адрес;
  6. Завершите мастер.

Настройка кворума (особенно важно для двухузлового кластера)

Для двухузлового кластера рекомендуется использовать облако-свидетель (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.

claster04

Заключение: ваш сервер теперь живёт вечно

Вы только что создали отказоустойчивый кластер между двумя VPS — решение, которое раньше было доступно только крупным компаниям с бюджетом на SAN и кластерные лицензии.

Теперь, если один из серверов упадёт — второй мгновенно возьмёт на себя его функции. Пользователи не заметят сбоя. Базы данных останутся целыми. Файлы — на месте.

Это не идеальное Enterprise-решение, но для малого бизнеса, тестовых сред, SaaS-проектов или критически важных сервисов — это мощная страховка.

Ключевые моменты, которые нужно помнить:

  • Кластер требует тщательной подготовки: сеть, хранилище, права;
  • Два узла — минимальная конфигурация, но возможна;
  • Без общего диска работать можно, но с ограничениями;
  • Тестирование — обязательный этап;
  • Регулярно проверяйте состояние кластера и обновляйте ПО.

Failover-кластер — это не про сложность. Это про спокойствие. Про уверенность, что ваш сервис работает, даже когда что-то пошло не так. А это, в конце концов, и есть цель всей системной инженерии.

Настройте, протестируйте, поставьте на мониторинг — и забудьте о внезапных простоях.