This week, in part of my job I deployed a Storage Replica between two S2D Clusters. I’d like to share with you the steps I followed to implement the storage replication between two S2D hyperconverged cluster. Storage Replica enables to replicate volumes at the block-level. For my customer, Storage Replica is part of a Disaster Recovery Plan in case of the first room is down.
Architecture overview
The customer has two rooms. In each room, a four-node S2D cluster has been deployed. Each node has a Mellanox Connectx3-Pro (dual 10GB ports) and an Intel network adapter for VMs. Currently the Mellanox network adapter is used for SMB traffic such as S2D and Live-Migration. This network adapter supports RDMA. Storage Replica can leverage SMB Direct (RDMA). So, the goal is to use also the Mellanox adapters for Storage Replica.
In each room, two Dell S4048S switches are deployed in VLT. Then the switches in both room are connected by two fiber optics of around 5Km. The latency is less than 5ms so we can implement synchronous replication. The Storage Replica traffic must use the fiber optics. Currently the storage traffic is in a VLAN (ID: 247). We will use the same VLAN for Storage Replica.
Each S2D cluster has several Cluster Shared Volume (CSV). Among all these CSV, two CSV will be replicated in each S2D cluster. Below you can find the name of volumes that will be replicated:
-
(S2D Cluster Room 1) PERF-AREP-01 -> (S2D Cluster Room 2) PERF-PREP-01
-
(S2D Cluster Room 1) PERF-AREP-02 -> (S2D Cluster Room 2) PERF-PREP-02
-
(S2D Cluster Room 2) PERF-AREP-03 -> (S2D Cluster Room 1) PERF-PREP-03
-
(S2D Cluster Room 2) PERF-AREP-04 -> (S2D Cluster Room 1) PERF-PREP-04
In order to work, each volume (source and destination) are strictly identical (same capacity, same resilience, same file system etc.). I will create a log volume per volume so I’m going to deploy 4 log volumes per S2D cluster.
Create log volumes
First of all, I create the log volumes by using the following cmdlet. The log volumes must not be converted to Cluster Shared Volume and a drive letter must be assigned:
New-Volume -StoragePoolFriendlyName "<storage pool name>" ` -FriendlyName "<volume name>" ` -FileSystem ReFS ` -DriveLetter "<drive letter>" ` –Size <capacity>
As you can see in the following screenshots, I created four log volumes per cluster. The volumes are not CSV.
In the following screenshot, you can see that for each volume, there is a log volume.
Grant Storage Replica Access
You must grant security access between both cluster to implement Storage Replica. To grant the access, run the following cmdlets:
Grant-SRAccess -ComputerName "<Node cluster 1>" -Cluster "<Cluster 2>" Grant-SRAccess -ComputerName "<Node cluster 2>" -Cluster "<Cluster 1>"
Test Storage Replica Topology
/!\ I didn’t success to run the test storage replica topology. It seems there is a known issue in this cmdlet
N.B: To run this test, you must move the CSV on the node which host the core cluster resources. In the below example, I moved the CSV to replicate on HyperV-02.
To run the test, you have to run the following cmdlet:
Test-SRTopology -SourceComputerName "<Cluster room 1>" ` -SourceVolumeName "c:\clusterstorage\PERF-AREP-01\" ` -SourceLogVolumeName "R:" ` -DestinationComputerName "<Cluster room 2>" ` -DestinationVolumeName "c:\ClusterStorage\Perf-PREP-01\" ` -DestinationLogVolumeName "R:" ` -DurationInMinutes 10 ` -ResultPath "C:\temp"
As you can see in the below screenshot, the test is not successful because a path issue. Even if the test didn’t work, I was able to enable Storage Replica between cluster. So if you have the same issue, try to enable the replication (check the next section).
Enable the replication between two volumes
To enable the replication between the volumes, you can run the following cmdlets. With these cmdlets, I created the four replications.
New-SRPartnership -SourceComputerName "<Cluster room 1>" ` -SourceRGName REP01 ` -SourceVolumeName c:\ClusterStorage\PERF-AREP-01 ` -SourceLogVolumeName R: ` -DestinationComputerName "<Cluster Room 2>" ` -DestinationRGName REP01 ` -DestinationVolumeName c:\ClusterStorage\PERF-PREP-01 ` -DestinationLogVolumeName R: New-SRPartnership -SourceComputerName "<Cluster room 1>" ` -SourceRGName REP02 ` -SourceVolumeName c:\ClusterStorage\PERF-AREP-02 ` -SourceLogVolumeName S: ` -DestinationComputerName "<Cluster Room 2>" ` -DestinationRGName REP02 ` -DestinationVolumeName c:\ClusterStorage\PERF-PREP-02 ` -DestinationLogVolumeName S: New-SRPartnership -SourceComputerName "<Cluster Room 2>" ` -SourceRGName REP03 ` -SourceVolumeName c:\ClusterStorage\PERF-AREP-03 ` -SourceLogVolumeName T: ` -DestinationComputerName "<Cluster room 1>" ` -DestinationRGName REP03 ` -DestinationVolumeName c:\ClusterStorage\PERF-PREP-03 ` -DestinationLogVolumeName T: New-SRPartnership -SourceComputerName "<Cluster Room 2>" ` -SourceRGName REP04 ` -SourceVolumeName c:\ClusterStorage\PERF-AREP-04 ` -SourceLogVolumeName U: ` -DestinationComputerName "<Cluster room 1>" ` -DestinationRGName REP04 ` -DestinationVolumeName c:\ClusterStorage\PERF-PREP-04 ` -DestinationLogVolumeName U:
Now that replication is enabled, if you open the failover clustering management, you can see that some volumes are source or destination. A new tab called replication is added and you can check the replication status. The destination volume is no longer accessible until you reverse storage replica way.
Once the initial synchronization is finished, the replication status is Continuously replicating.
Network adapters used by Storage Replica
In the overview section, I said that I want use the Mellanox network adapters for Storage Replica (for RDMA). So I run the following cmdlet to check the Storage Replica is using the Mellanox Network Adapters.
Reverse the Storage Replica way
To reverse the Storage Replica, you can use the following cmdlet:
Set-SRPartnership -NewSourceComputerName "<Cluster room 2>" ` -SourceRGName REP01 ` -DestinationComputerName "<Cluster room 1>" ` -DestinationRGName REP01
Conclusion
Storage Replica enables to replicate a volume at the block-level to another volume. In this case, I have two S2D clusters where each cluster hosts two source volumes and two destination volumes. Storage Replica helps the customer to implement a Disaster Recovery Plan.
what data did you replicated ? whats it Hyper-V VMs?
I’m testing a similar configuration replicating hyper-v VMs but i found it impossible to start the VMs on the DR site if i cut the replication
Hello,
I replicated virtual machines. Then I did a script for the customer. In case of disaster, the script is run. The replication way is reversed and VM are register in destination cluster. It works pretty well
“As you can see in the following screenshots, I created four log volumes per cluster. The volumes are not CSV.”
but then further down, in screenshot after:
“Once the initial synchronization is finished, the replication status is Continuously replicating.”
your log volumes are showing as csv
did they convert automatically?
curious if I should new-storagePool with ‘ -storageSubsystemFriendlyName “Windows Storage*” ‘ or ‘ -storageSubsystemFriendlyName “Clustered Windows Storage*” ‘ (my first pool I had automatically created with enable-S2Dcluster and it’s 3-way and tiered with nvme journal, so figuring create second pool, no journal, just nvme as 2-way mirror
then my mind wanders: create second pools on each node; and assuming also create all log volumes on all nodes, so that when a nodeOwner changes for a data disk that’s csv, storage replica will relatively just use the non-csv on that new node