Короткий ответ
Hyper-V Replica — асинхронная копия VM на другой хост/кластер, не Live Migration и не CSV. На стороне источника HV01 смотрите Get-VMReplication, на приёмнике — Get-VMReplicationServer и firewall слушателя HTTP 80 или HTTPS 443. В кластере нужен роль Hyper-V Replica Broker, иначе партнёр не найдёт, куда стучаться после смены владельца.
Не «чините» реплику удалением VM на приёмнике без понимания, что это единственная копия данных после сбоя площадки.
Симптомы и как отличить
Типичная картина:
- в Hyper-V Manager Replication Health: Warning/Critical;
Get-VMReplication:State : Suspended/Error;- initial replication 0% днями;
- на реплике нет
C:\ClusterStorage\Volume1\Hyper-V Replica\(путь ваш) или нет объекта Replica VM.
Отличия:
| Что видно | Куда |
|---|---|
| Нужно выбрать Replica vs cluster vs backup | резервирование |
| Падает Live Migration, replica ни при чём | Live Migration |
| Кластер без кворума | quorum |
| Хост сам больной | health |
Возможные причины
- На приёмнике не включён Replication Server (
Set-VMReplicationServer). - Кластер без Broker или Broker Offline.
- Kerberos: нет SPN/доверия, часы разъехались; или выбран HTTPS без подходящего сертификата.
- Firewall (хост или межплощадочный) режет 80/443.
- Нет места на томе реплики, в том числе под HRL (Hyper-V Replica Log).
- Имя сервера в Enable-VMReplication не совпадает с Brokern (FQDN кластера).
- Сертификат: CN/SAN не равны FQDN, истёк, нет на всех узлах кластера.
Диагностика
Источник:
Get-VMReplication -VMName 'VM-APP01' | Format-List VMName, State, Mode, Health, PrimaryServer, ReplicaServer, ReplicationRelationshipType, AuthType, LastReplicationTime, AverageReplicationSize
Measure-VMReplication -VMName 'VM-APP01' -ErrorAction SilentlyContinue
Get-WinEvent -FilterHashtable @{ LogName = 'Microsoft-Windows-Hyper-V-VMMS-Admin'; StartTime = (Get-Date).AddHours(-24) } |
Where-Object { $_.Message -match 'Replica|Replication|VM-APP01' } |
Select-Object -First 25 TimeCreated, Id, MessageПриёмник (пример HV-DR01.contoso.example):
Get-VMReplicationServer | Format-List ReplicationEnabled, AllowedAuthenticationType, KerberosAuthenticationPort, CertificateAuthenticationPort, ReplicationAllowedFromAnyServer
Get-VMReplication -Replica | Where-Object VMName -match 'VM-APP01'Кластер:
Get-ClusterGroup | Where-Object Name -match 'Broker|Replica'
Get-ClusterResource | Where-Object ResourceType -match 'Broker|Virtual Machine Replication'Сеть до слушателя (порт как в Get-VMReplicationServer):
Test-NetConnection -ComputerName 'HV-DR01.contoso.example' -Port 443
Test-NetConnection -ComputerName 'HV-DR01.contoso.example' -Port 80Firewall (не выключать, проверить правила):
Get-NetFirewallRule -DisplayGroup 'Hyper-V Replica HTTP' | Get-NetFirewallPortFilter
Get-NetFirewallRule | Where-Object DisplayName -match 'Replica' | Format-Table DisplayName, Enabled, Direction, ActionСертификат (если HTTPS):
Get-ChildItem Cert:\LocalMachine\My | Format-Table Thumbprint, Subject, NotAfterВремя: w32tm /query /status на обоих концах. Kerberos не любит skew.
Решение
Сценарий A. Слушатель выключен
На приёмнике (одиночный хост):
Set-VMReplicationServer -ReplicationEnabled $true -AllowedAuthenticationType KerberosДля HTTPS — -AllowedAuthenticationType Certificate и -CertificateThumbprint по вашей схеме. Затем разрешите правило Replica HTTP или HTTPS в профиле Domain, не «firewall off».
Авторизация: либо явный список серверов, либо ReplicationAllowedFromAnyServer плюс группа авторизации. Слепой AnyServer в интернете — плохая идея; для внутренней DR-площадки всё равно ограничьте источники.
Сценарий B. Кластер: нет Broker
Создайте/включите роль Hyper-V Replica Broker в Failover Cluster Manager. Клиент реплики должен целиться в FQDN Broker, не в случайный узел, который завтра не владеет ролью.
Get-ClusterGroup | Format-Table Name, State, OwnerNodeBroker Offline при живом кворуме — чините ресурс Broker (IP, сеть кластера), не Replica на VM.
Сценарий C. Kerberos / сертификат
Kerberos: оба хоста в домене contoso.example, корректный DNS A/AAAA на Broker, часы. Constrained Delegation здесь не тот же набор SPN, что у Live Migration; не копируйте SPN миграции «на всякий».
HTTPS: сертификат с SAN = FQDN, к которому коннектятся, на каждом узле приёмника и в шаблоне Broker. Просроченный thumbprint в Set-VMReplicationServer даёт обрыв после месяца «всё работало».
Сценарий D. Реплика в Error, цепочка жива
Resume-VMReplication -VMName 'VM-APP01'Если требуется resynchronization (журнал HRL разъехался):
Resume-VMReplication -VMName 'VM-APP01' -ResynchronizeЭто тяжёлый IO. Делайте в окно, смотрите место на обоих томах.
Сценарий E. Начальная репликация не лезет в канал
Seed через внешний диск / Start-VMInitialReplication -InitialReplicationStartTime вне пика. Не рвите сессию, если Percent растёт. Обрыв WAN — донастройка, не Disable-VMReplication без плана: потеряете партнёрство.
Как проверить, что проблема устранена
Get-VMReplication -VMName 'VM-APP01' | Format-List Health, State, LastReplicationTime, ReplicaServer
Measure-VMReplication -VMName 'VM-APP01'Health Normal, LastReplicationTime свежий в пределах вашего интервала (5/15 мин — как настроили). На приёмнике Replica VM Off (так и должно быть до failover). Test Failover в изолированной сети, если политика DR это требует — затем удалите тестовую копию штатно.
Test-NetConnection на порт аутентификации с источника на FQDN Broker/сервера — TcpTestSucceeded True.
Если не помогло
- Health Warning из-за пропущенных циклов: канал/диск, не «ещё раз Enable».
- После смены имени кластера старый ReplicaServer в объекте — перенастройте relationship.
- CSV источник в redirected: сначала storage.
- Путаете Replica с backup: Replica не замена 3-2-1, см. резервирование.
Не открывайте 80/443 Replica в интернет без TLS и фильтра источников.
Профилактика
- Мониторинг
ReplicationHealthи возраста LastReplicationTime. - Сертификаты с алертами NotAfter.
- Broker как clustered role, не «узел HV01 навсегда».
- Запас диска под HRL и initial.
- Регулярный Test Failover по runbook.
FAQ
Replica заменяет Failover Cluster?
Нет. Кластер — HA внутри площадки (RTO минуты, общее хранилище). Replica — DR на другую площадку с лагом RPO. Часто нужны оба.
Порт 80 без HTTPS нормален?
Внутри изолированной сети с Kerberos Microsoft это поддерживает. Между площадками через недоверенную сеть — HTTPS.
Можно ли реплицировать VM с checkpoint?
Лучше слить снимки. Длинная цепочка плюс Replica усложняет IO и место.
Почему приёмник показывает VM Off?
Это штатно. Running на обеих площадках без split-brain защиты — путь к расхождению дисков.
Enable-VMReplication снова с нуля?
Снесёт relationship. Сначала Resume/Resynchronize. Disable — только когда осознанно пересоздаёте пару.
Нужен ли одинаковый CPU на DR?
Для старта реплики на другом поколении CPU может понадобиться compatibility / разные процессоры. Это не блокирует саму репликацию логов, но вскроется на failover.