Failover Cluster (миграция с Windows Server 2012 R2 в Windows Server 2016 Cluster)
Сетевое хранилище организовано на отельном Linix-Сервере
Исходные данные:
1) "сервер" H-1.Hyper-v.test
Intel NUC 7i5BNK (Intel Core i5-7260U, 8 GB RAM, Crutial M.2 SSD 256 GB)
Windows Server 2012 R2 с ролью Hyper-V и несколькими виртуальными машинами.
10.254.1.73
2) "сервер" H-N-2.Hyper-v.test
Intel NUC 6i3SYK (Intel Core i3-6100U, 8 GB RAM, Crutial M.2 SSD 256 GB)
Windows Server 2016 с ролью Hyper-V
10.254.1.55
3) "сервер" H-N-3.Hyper-v.test
Intel NUC 6i5SYK (Intel Core i5-6260U, 8 GB RAM, Crutial M.2 SSD 256 GB)
Windows Server 2016 с ролью Hyper-V
10.254.1.55
4) сервер iscsi2.Hyper-V.test
виртуальная машина (Intel Core i7-6700, 4 GB RAM, 128 GB VHDX)
Debian 9.4 x64
10.254.1.97
iSCSI-цель настраивается с помощью tgtadm. Общий пример настройки. В данной статье будут написаны точные команды для нашей задачи.
Задача: переместить виртуальные машины с Windows 2012 R2 в Кластер на Windows Server 2016 с общим сетевым хранилищем.
Решение:
1) Установка Failover Cluster на серверах Windows Server 2016:
Add-WindowsFeature –Name Failover-clustering –IncludeManagementTools
2) Создание общей папки на сервере Debian 9.4 для диска-свидетеля (папка для всех, без ограничения по размеру, что небезопасно):
aptitude install samba
echo "[public]" >> /etc/samba/smb.conf
echo "path = /media/storage/" >> /etc/samba/smb.conf
echo "public = yes" >> /etc/samba/smb.conf
echo "writable = yes" >> /etc/samba/smb.conf
echo "comment = smb share" >> /etc/samba/smb.conf
echo "printable = no" >> /etc/samba/smb.conf
echo "guest ok = yes" >> /etc/samba/smb.conf
mkdir /media/storage/
/etc/init.d/samba restart
3) Создание кластера. Для данного тестового кластера будет использоваться только одна сеть, поэтому MPIO не будет использоваться.
Test-Cluster -Node h-n-2, h-n-3
New-Cluster -Name CLST1 -node h-n-2, h-n-3 -StaticAddress 10.254.1.249
Set-ClusterQuorum -FileShareWitness \\10.254.1.97\public
4) Создание и подключение общего сетевого хранилища к обоим нодам кластера и инициализация диска:
В Linux:
dd if=/dev/zero of=/iscsi/iscsi-disk1 bs=1M count=32000
tgtadm --lld iscsi --op new --mode target --tid 1 -T iqn.2018-04.csv.domain.com
tgtadm --lld iscsi --mode logicalunit --op new --tid 1 --lun 1 -b /iscsi/iscsi-disk1
tgtadm --lld iscsi --mode target --op bind --tid 1 -I 10.254.1.82
tgtadm --lld iscsi --mode target --op bind --tid 1 -I 10.254.1.55
tgtadm --lld iscsi --mode target --op bind --tid 1 -I 10.254.1.249
tgtadm --lld iscsi --mode target --op show Target 1: iqn.2018-04.csv.domain.com System information: Driver: iscsi State: ready I_T nexus information: LUN information: LUN: 0 Type: controller SCSI ID: IET 00010000 SCSI SN: beaf10 Size: 0 MB, Block size: 1 Online: Yes Removable media: No Prevent removal: No Readonly: No SWP: No Thin-provisioning: No Backing store type: null Backing store path: None Backing store flags: LUN: 1 Type: disk SCSI ID: IET 00010001 SCSI SN: beaf11 Size: 33554 MB, Block size: 512 Online: Yes Removable media: No Prevent removal: No Readonly: No SWP: No Thin-provisioning: No Backing store type: rdwr Backing store path: /iscsi/iscsi-disk1 Backing store flags: Account information: ACL information: 10.254.1.82 10.254.1.55 10.254.1.249
В Windows Server:
New-IscsiTargetPortal -TargetPortalAddress "10.254.1.97"
Get-IscsiTarget -NodeAddress iqn.2018-04.csv.domain.com | Connect-IscsiTarget -IsPersistent $true
get-disk | where {$_.OperationalStatus -eq "Offline"} | Initialize-Disk -PartitionStyle GPT -PassThru | New-Partition -UseMaximumSize | Format-Volume -FileSystem NTFS -NewFileSystemLabel "csv" -Confirm:$false
Для второй ноды. Можно запускать всю команду с первой ноды или только команду в фигурных скобках { } непосредественно на второй ноде:
Invoke-Command -Computername h-n-3 -ScriptBlock {New-IscsiTargetPortal -TargetPortalAddress "10.254.1.97"}
Invoke-Command -Computername h-n-3 -ScriptBlock {Get-IscsiTarget -NodeAddress iqn.2018-04.csv.domain.com | Connect-IscsiTarget -IsPersistent $true}
Invoke-Command -Computername h-n-3 -ScriptBlock {get-disk | where {$_.BusType -eq "iSCSI"} | Set-Disk -IsOffline $False}
5) Подключение общего ресурса к кластеру:
Get-ClusterAvailableDisk | Add-ClusterDisk | Add-ClusterSharedVolume
6) Подготовка Нyper-V ролей на нодах на использование подключённого общего сетевого хранилища:
Set-VMHost -VirtualHardDiskPath "C:\ClusterStorage\Volume1\Hyper-V\Virtual Hard Disks\" -VirtualMachinePath "C:\ClusterStorage\Volume1\Hyper-V\"
Invoke-Command -Computername h-n-3 -ScriptBlock {Set-VMHost -VirtualHardDiskPath "C:\ClusterStorage\Volume1\Hyper-V\Virtual Hard Disks\" -VirtualMachinePath "C:\ClusterStorage\Volume1\Hyper-V\"}
7) Включение совместимости процессоров в виртуальной машине, но у меня виртуальная машина переместилась и без включённой совместимости процессоров.
get-vm -name test_2016 | Set-VMProcessor -CompatibilityForMigrationEnabled 1
8) Перемещение виртуальной машины на одну из нод кластера (имена виртуальных свитчей должны совпадать при переносе через PowerShell)
Move-VM "test_2016" h-n-2 -IncludeStorage -DestinationStoragePath "C:\ClusterStorage\Volume1\Hyper-V\Virtual Hard Disks\"
9) Добавление виртуальной машины в кластер:
Add-ClusterVirtualMachineRole -VirtualMachine test_2016
10) Тестирование отказоустойчивости:
Move-ClusterVirtualMachineRole -Name "test_2016" -Node h-n-3
Или просто выключаем первую ноду и смотрим поведение кластера.
19.04.2018