Storage Replica–Windows Server vNext

Une des fonctionnalités phare de la prochaine version de Windows Server vNext est sans nul doute le storage replica (lire le blog de l’équipe storage Windows).

Imaginez vous, simplement, sans logiciels d’un quelconque éditeur/constructeur tiers, répliquer les données d’un volume depuis une baie de disque située dans un premier datacenter vers une seconde baie de disque située dans un second datacenter.

Attention on parle bien ici de solution de disaster recovery et non pas de haute disponibilité, même si cela pourrait fonctionner.

D’autres s’y sont attaqués avant, mais on bénéfice ici de toute l’interopérabilité avec les autres fonctionnalités Windows.

Dans cette Technical Preview, a priori, seul Hyper-V est “supporté”. Mais en ce qui me concerne, je préfère me focaliser sur SQL Server, et donc le Scale-Out File Server afin de supporter les bases d’un cluster SQL Server, dont j’avais parlé ici. mais cette fois-ci on ajoute la possibilité d’effectuer du disaster recovery, sans passer les groupes de disponibilité.

Le cluster SQL sera donc multi site, avec du stockage asynchrone, comme j’ai pu le faire au travers de DataKeeper.

Attention : a priori le Scale-Out File Server n’est pas supporté pour l’instant. Et SQL Server branché sur cette architecture encore moins …

J’espère seulement que la version finale de Windows et la prochaine release de SQL Server pourront directement bénéficier de cette fonctionnalité pour du FCI dans passer par un stockage SMB3.0. Attaquer directement un volume répliqué serait vraiment top.

Tout d’abord créons l’infrastructure disque avec le storage replica.

D’un point de vue préparatifs, j’ai créé 4 VMs, 2 sur chaque site. Je créé ensuite2 LUNS sur chaque baie (stockage asynchrone) avec un zoning ne permettant aux nœuds que de voir le stockage du site local. J’ai choisi d’utiliser le protocole iSCSI (avec masque sur mes iqn, pensez à modifier vos scripts), mais si vous avec du FC cela fonctionne aussi bien évidement. Je n’ai aussi testé avec du Shared VHDX. Cela fonctionne !!!

# ajout des fonctionalités 
$Servers = 'sr-site1-n1','sr-site1-n2','sr-site2-n3','sr-site2-n4'
$Servers | ForEach { Install-WindowsFeature -ComputerName $_ `
-Name File-services,WVR,Failover-Clustering -IncludeManagementTools -restart }


# formation du cluster
New-Cluster -Name sr-sofs -Node sr-site1-n1,sr-site1-n2,sr-site2-n3,sr-site2-n4 `
-NoStorage -StaticAddress 192.168.1.220

# Add a FSW
Set-ClusterQuorum -Cluster sr-sofs -FileShareWitness "\\DC\FSW"

Ensuite, on configure la partie disque sur les nœuds du site 1

#site 1


Invoke-Command -ComputerName 'sr-site1-n1','sr-site1-n2' -ScriptBlock {

    Set-Service -Name msiscsi -StartupType Automatic

    Start-Service msiscsi

    New-IscsiTargetPortal -TargetPortalAddress ds415

    Connect-IscsiTarget -NodeAddress "iqn.2000-01.com.xxx.target-site1.xxx"  `
     -IsPersistent $True 

    Get-iSCSISession | Get-Disk
}



Invoke-Command -ComputerName 'sr-site1-n1' -ScriptBlock {

 Get-Disk | Where-Object IsOffline -Eq $True | Set-Disk -IsOffline $False

 Initialize-Disk -Number 1 -PartitionStyle GPT
 Initialize-Disk -Number 2 -PartitionStyle GPT

 New-Partition -DiskNumber 1 -DriveLetter E -UseMaximumSize
 New-Partition -DiskNumber 2 -DriveLetter F -UseMaximumSize

 Format-Volume -DriveLetter E -AllocationUnitSize 65536 -FileSystem NTFS `
     -NewFileSystemLabel "Site1-Data" -confirm:$false
 Format-Volume -DriveLetter F -AllocationUnitSize 65536 -FileSystem NTFS `
    -NewFileSystemLabel "Site1-Log"  -confirm:$false
    
}


Invoke-Command -ComputerName 'sr-site1-n2' -ScriptBlock {

 Get-Disk | Where-Object IsOffline -Eq $True | Set-Disk -IsOffline $False
     
}




# add all disk to the available storage
Get-ClusterAvailableDisk -cluster sr-sofs | Add-ClusterDisk

Move-ClusterGroup -Cluster sr-sofs -Name "Available Storage" -Node sr-site1-n1


Invoke-Command -ComputerName 'sr-site1-n1' -ScriptBlock {

    $NewName = (get-volume -DriveLetter E).FileSystemLabel
    #write-host $NewName
    (Get-ClusterResource -Name "Cluster Disk 1" ).Name = $NewName

    $NewName = (get-volume -DriveLetter F).FileSystemLabel
    #write-host $NewName
    (Get-ClusterResource -Name "Cluster Disk 2" ).Name = $NewName
   
} 
      

Ensuite, on effectue la même opération sur les 2 nœuds du site 2.

# site 2

Invoke-Command -ComputerName 'sr-site2-n3','sr-site2-n4' -ScriptBlock {

    Set-Service -Name msiscsi -StartupType Automatic

    Start-Service msiscsi

    New-IscsiTargetPortal -TargetPortalAddress ds415

    Connect-IscsiTarget -NodeAddress "iqn.2000-01.com.xxx.target-site2.xxx"  `
    -IsPersistent $True 

    Get-iSCSISession | Get-Disk
}


restart-vm -ComputerName vnext2 -Name "sr-site2-n3" -Confirm:$false
restart-vm -ComputerName vnext2 -Name "sr-site2-n4" -Confirm:$false

Invoke-Command -ComputerName 'sr-site2-n3' -ScriptBlock {

 Get-Disk | Where-Object IsOffline -Eq $True | Set-Disk -IsOffline $False

 Initialize-Disk -Number 1 -PartitionStyle GPT
 Initialize-Disk -Number 2 -PartitionStyle GPT

 New-Partition -DiskNumber 1 -DriveLetter E -UseMaximumSize
 New-Partition -DiskNumber 2 -DriveLetter F -UseMaximumSize

 Format-Volume -DriveLetter E -AllocationUnitSize 65536 -FileSystem NTFS `
   -NewFileSystemLabel "Site2-Data" -confirm:$false
 Format-Volume -DriveLetter F -AllocationUnitSize 65536 -FileSystem NTFS `
   -NewFileSystemLabel "Site2-Log"  -confirm:$false     
}


Invoke-Command -ComputerName 'sr-site2-n4' -ScriptBlock {

 Get-Disk | Where-Object IsOffline -Eq $True | Set-Disk -IsOffline $False
     
}



# add all disk to the available storage
Get-ClusterAvailableDisk -cluster sr-sofs | Add-ClusterDisk

Move-ClusterGroup -Cluster sr-sofs -Name "Available Storage" -Node sr-site2-n3


Invoke-Command -ComputerName 'sr-site2-n3' -ScriptBlock {

    $NewName = (get-volume -DriveLetter E).FileSystemLabel
    #write-host $NewName
    (Get-ClusterResource -Name "Cluster Disk 1" ).Name = $NewName

    $NewName = (get-volume -DriveLetter F).FileSystemLabel
    #write-host $NewName
    (Get-ClusterResource -Name "Cluster Disk 2" ).Name = $NewName
   
} 

 

Reste maintenant à configurer le Storage Replica

# all disk resrouces on node 1
Move-ClusterGroup -Cluster sr-sofs -Name "Available Storage" -Node sr-site1-n1


# add the data disk to CSV volume
Add-ClusterSharedVolume -cluster sr-sofs -Name "Site1-Data"

Move-ClusterSharedVolume -cluster sr-sofs -Name "Site1-Data" -Node sr-site1-n1


Invoke-Command -ComputerName 'sr-site1-n1' -ScriptBlock {

New-SRPartnership -SourceComputerName sr-site1-n1 -SourceRGName rg01 `
  -SourceVolumeName "C:\ClusterStorage\Volume2" -SourceLogVolumeName f: `
  -DestinationComputerName sr-site2-n3 -DestinationRGName rg02 `
  -DestinationVolumeName e: -DestinationLogVolumeName f: -LogSizeInBytes 1gb
}

 

image

A compter de ce point, la réplication est effective entre les 2 sites. Il est possible de basculer les disques sur le site 2 et de voir les données.

Maintenant, ajout de la fonctionnalité Scale-Out File Server

# Add Role Filehare / SOFS
Add-ClusterScaleOutFileServerRole -Name "SR-SQL" -Cluster sr-sofs


# Create file share
Move-ClusterSharedVolume -Name "site1-Data" -Node sr-site1-n1

MD C:\ClusterStorage\Volume2\SQL
New-SmbShare -Name SQL -Path C:\ClusterStorage\Volume2\SQL `
   -FullAccess LAB\Administrator

 

image

Reste à présent à installer 2 autres VMs, une sur chaque site, afin d’héberger les 2 nœuds du cluster SQL (cela pourrait être un cluster 4 nœuds …).

Si cette architecture semble répondre à vos besoins, n’hésitez pas à me contacter pour en parler.

Stay tuned …

Enjoy !

A propos Christophe

Consultant SQL Server Formateur certifié Microsoft MVP SQL Server MCM SQL Server 2008
Cet article, publié dans Windows, est tagué , , , , , , . Ajoutez ce permalien à vos favoris.

Un commentaire pour Storage Replica–Windows Server vNext

  1. Ping : Storage Spaces Direct–Windows 2016 | Christophe LAPORTE – Consultant SQL Server

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s