Windows Server 2016存儲復制淺談
存儲復制技術的主要技術特點
使用SMB 3.1.1通訊協議
支持同步復制與非同步復制
復制時會需要日誌磁盤與數據磁盤,數據先寫入日誌磁盤,再Commit數據磁盤
每次復制的最小單位為Block
存儲無相關性,節點底層可以是任何存儲結構
支持固定式磁盤,最新版本的Server 2016數據中心版,已經支持精簡置備磁盤
復制過程存在主備關系,主復制分區可讀寫,備復制分區不可讀寫,暫未支持備只讀模式
使用數據包簽名,AES-128-GCM全數據加密等安全技術,存儲復制過程使用Kerberos AES256進行節點間的所有身份驗證
事實上,存儲復制其實是工作在Windows Storage Stack ,Partition Manager之上,Volume Manager之下的一個磁盤過濾器驅動程序,我們都知道,分區是指存儲設備上連續的存儲區域,卷是指扇區的邏輯集合,一個卷的內部扇區可能來一個分區,或多個分區,或不同的磁盤,而存儲復制在分區到卷之間於又插入了一層邏輯,再公開給卷,對於上層的卷和application來說,是不知道底層做了這件事的,您依然可以使用VSS技術,卷級別的Bitlocker 技術
下圖可以進一步看到存儲的工作過程,可以看到,存儲復制在兩個節點的Partition Manager之上,Volume Manager之下完成
通過這樣的架構,我們就可以看出,存儲復制和其它Windows上面的復制技術的不同
它是基於塊的復制,它插入在分區之上卷之下的區域,所以不知道文件的概念,不知道它們被使用,也不會像DFS一樣,會care文件是不是在被使用
它只關心寫入IO,可以被用於CSVFS,NTFS和ReFS
它不是基於檢查點,而是連續復制,所以變化的增量往往遠低於基於快照的產品
它在分區層上運行,因此可以復制由Windows Server或備份軟件創建的所有VSS快照
老王點評:
存儲復制技術,可以說是一項廣大ITpro一直期待的技術,之前版本的Windows Server中一直沒有什麽很好的復制技術可以被用於虛擬化,私有雲的場景,DFS只能復制關閉的文件,所以很多場景並不能使用它,新的存儲復制技術可以說是一大亮點,一個很典型的場景,如果一個企業要實現一套高可用群集架構,這套架構可能是異地的,但是又沒有錢實現設備級別的存儲復制,只好使用第三方的產品實現存儲復制,公開給群集,例如Starwind
存儲復制技術的四種使用場景
單機分區對分區
可以實現針對於單機Server上面分區對分區級別的復制,復制協議使用SMB,實際應用場景不多,可使用磁盤鏡像,存儲空間等技術替代
單機對單機
這種場景有一定的使用意義,可以幫助兩個相同地域或不同地域的節點,在沒有群集的情況下實現基於塊級別的存儲復制
單機對單機復制的技術特點:需手動故障轉移,需使用Powershell創建維護,存儲無關性,支援同步復制或非同步復制,後面老王會介紹兩者區別
延伸群集
延伸群集即是指,實現了存儲雙活的群集,避免了存儲在單一站點,站點宕機存儲失聯的問題,之前老王在多站點與災難恢復篇曾經提到這點,在之前我們僅能用第三方軟件或設備實現群集存儲的復制,現在原生自帶存儲復制和WSFC完美融合,實現高可用+災難恢復。
延伸群集的技術特點:GUI圖形界面管理 ,僅支持同步復制(確保群集數據一致性),存儲無關性,全自動故障轉移
跨群集復制
實現為兩座不同的Cluster之間進行復制,這種場景在國內應該並不多見,老王能想到的是場景,大概可能主要是一套災備群集,maybe有一套很重要的群集系統,需要對群集本身和群集數據都進行災備,於是就原模原樣又搭建了一套群集,平時不對外,數據實時復制到存儲,一旦主群集壞掉或數據丟失,災備群集立刻啟動。
跨群集復制的技術特點:需手動故障轉移,支援同步或非同步復制,存儲無關性
存儲復制同步復制工作過程
模式 | 圖 | 工作過程 |
---|---|---|
同步 零數據丟失 RPO | 1.應用程序寫入數據 2.寫入日誌磁盤並將日誌復制到遠程站點 3.遠程站點寫入日誌 4.遠程站點返回寫入結果 5.復制引擎回應寫入完成,應用程序IO結束 t&t1:稍後將日誌刷新至數據磁盤 |
存儲復制異步復制工作過程
模式 | 圖 | 腳步 |
---|---|---|
異步 近零數據丟失 (取決於多種因素) RPO | 1.應用程序寫入數據 2.數據寫入日誌磁盤 3.復制引擎回應寫入完成,應用程序IO結束 4.復制日誌到遠程站點 5.遠程站點寫入日誌 6.遠程站點返回寫入完成確認信息 t&t1:稍後將日誌磁盤數據刷新至數據磁盤 |
同步復制與非同步復制適用場景
同步復制適用場景
關鍵性業務應用
短距離節點(網絡延遲<5ms, 或距離<30km)
專用的網絡鏈路,高帶寬,1GB起步,建議10GB以上實現同步復制。
對於同步復制而言,一個應用程序的寫入請求,會等待日誌復制到對方節點,返回寫入成功後,IO才會結束,因此對於應用程序的寫入會略微感到一點延遲,所以對於網絡要求會很高,如果網絡帶寬足夠高,延遲不高,那麽就不會感覺到寫入延遲,利用同步復制可以使您的業務應用獲得崩潰一致性,發生故障時應用轉移到其他站點繼續運行,數據不會丟失。
異步復制適用場景
非關鍵性應用,可以接受數據出現丟失的可能性
跨城市/跨國家的部署場景
網絡帶寬有限,沒有專用網絡鏈路
在異步復制場景中,應用程序的寫入請求會被復制引擎捕獲,寫入到本地日誌磁盤後就立即向應用程序確認寫入完成,此模式對於應用程序而言,性能並無消耗,稍後復制引擎會再把數據復制到遠程站點,但此過程已經不在應用程序IO路徑中,應用程序IO已經結束,所以遠程站點的響應性和距離並不重要,但如果源站點忽然宕機,並且數據的副本仍未復制到遠程站點,則存在數據丟失的風險。
存儲復制可以整合的其它微軟技術
部署:Nano Server , SCVMM
管理:PS,WMI,群集管理器,Honolulu,SCOM,OMS,Azure Stack,Azure ASR
整合:Hyper-V,Storage Spaces Direct ,Scale-Out File Server,SMB Multichannel,SMB Direct,重復資料刪除,ReFS,NTFS
存儲復制技術部署需求
復制節點需安裝File Server角色,以及存儲副本功能
Active Directory域環境,提供復制過程各節點的Kerberos驗證
復制節點至少需要兩個磁盤,一個數據磁盤,一個日誌磁盤
數據磁盤和日誌磁盤的格式必須為GPT,不支持MBR格式磁盤
兩個數據磁盤大小與分區大小必須相同,最大 10TB
兩個日誌磁盤大小與分區大小必須相同,最少 8GB
存儲復制使用445端口(SMB - 復制傳輸協議),5445端口(iWARP SMB - 僅在使用iWARP RDMA網絡時需要),5895端口(WSManHTTP - WMI / CIM / PowerShell的管理協議)
存儲復制規劃建議
建議為日誌磁盤使用SSD,或NVME SSD,存儲復制首先寫入數據至日誌磁盤,良好的日誌磁盤性能可以幫助提高寫入效率
建議規劃較大的日誌空間,較大的日誌允許從較大的中斷中恢復速度更快,但會消耗空間成本。
為同步復制場景準備可靠高速的網絡帶寬,建議1Gbps起步,最好10Gbps,同步復制場景,如果帶寬不足,將延遲應用程序的寫入請求時間
在老王看來存儲復制的主要應用場景為單機對單機,延伸群集,跨群集復制這三種,老王將分別為大家進行實作講解
本文我們將實作單機對單機的復制
實驗場景介紹
AD
Lan:10.0.0.2 255.0.0.0
16Server1
MGMT: 10.0.0.3 255.0.0.0 DNS 10.0.0.2
SMB01:60.0.0.3 255.0.0.0
SMB02:70.0.0.3 255.0.0.0
16Server2
MGMT: 10.0.0.4 255.0.0.0 DNS 10.0.0.2
SMB01:60.0.0.4 255.0.0.0
SMB02:70.0.0.4 255.0.0.0
當前兩個節點上面各通過vmware workstation新增了一塊20GB磁盤用於數據磁盤,一塊15GB磁盤用於日誌磁盤
分別聯機為GPT磁盤,格式化卷為NTFS
16Server1
16Server2
兩個復制已經已經加入到域,可以正常利用Kerberos驗證
為各節點安裝安裝File Server角色,以及存儲副本功能
在其中一臺執行即可
Invoke-Command -Computername 16server1,16server2 -ScriptBlock{Install-WindowsFeature -Name Storage-Replica,FS-FileServer -IncludeManagementTools -restart}
在實際實現存儲功能之前,建議先針對於環境進行測試,測試過程使用Test-SRTopology命令完成測試,該命令在完成按照存儲副本功能後即可使用,測試過程將評估現有環境是否符合存儲副本要求,將檢查磁盤大小,分區大小是否一致,帶寬是否符合要求,日誌大小是否符合,復制IOPS,初始復制性能等,最終將根據評估結果,出示html報表,強烈建議執行該測試,可以幫助我們評估當前環境是否適用於存儲復制,性能是否可以達到預期。
執行Test-SRTopology命令需為磁盤產生IO才有效果,這裏老王使用Diskspd命令產生一個IO測試
Diskspd下載地址:https://gallery.technet.microsoft.com/DiskSpd-a-robust-storage-6cd2f223
Diskspd.exe -c1m –d300 -W5 -C5 -b8k -t2 -o2 -r –w25 –h s:\test.dat
產生測試報告
md C:\SRtest
Test-SRTopology
-SourceComputerName 16server1 #來源計算機
-SourceVolumeName S: #來源數據磁盤
-SourceLogVolumeName R: #來源日誌磁盤
-DestinationComputerName 16server2 #目標計算機
-DestinationVolumeName S: #目標數據磁盤
-DestinationLogVolumeName R: #目標日誌磁盤
-DurationInMinutes 1 #指定測試時間,生產環境建議10-30分鐘
-ResultPath C:\SRTest #報告生成路徑
等待一分鐘後測試完成,打開報告路徑即可看到html格式的存儲復制測試報告
需求測試
初始同步性能測試
復制寫入IO延遲
通過此測試我們可以看出,當前環境是否滿足存儲復制基本需求,性能是否達到預期,如果沒有達到,應該如何做出調整,需要註意,此測試一定要在數據磁盤有IO產生時才有意義,否則不會得到測試數據。
測試完成後,我們就可以開始配置創建存儲復制,配置存儲復制的命令和測試的命令差不多,只不過是多了一個存儲組的參數,由來源存儲組,復制到目標存儲組,存儲復制組的概念和Azure ASR的概念相通
New-SRPartnership
-SourceComputerName 16server1
-SourceRGName RG01
-SourceVolumeName S:
-SourceLogVolumeName R:
-DestinationComputerName 16server2
-DestinationRGName RG02
-DestinationVolumeName S:
-DestinationLogVolumeName R:
-ReplicationMode Asynchronous #設置同步模式為異步,默認為同步
-Seeded True #合並來源端與目的端數據磁盤的數據,默認為false,即來源端始終覆蓋目的端
-LogSizeInBytes 12GB #設置Log文件大小
-Verbose
打開16server2可以看到數據磁盤S,成為備磁盤,不再可用,正如我們前面說過的這樣,目前存儲復制只能是主備架構,主可以讀寫,目標備不可讀寫。
最新版本的Windows Server 2016 1709版本新增了測試存儲副本的功能,可以幫助我們測試數據有沒有得到正常的復制
首先在主數據磁盤產生數據
要使用存儲副本的測試故障轉移功能,您需要有一個未使用的NTFS或ReFS格式的卷,掛載到目標節點,且目前沒有參與存儲復制,測試過程可以暫時掛載復制存儲的快照以用於測試或備份目的
#掛載當前備復制節點16server2的數據磁盤至K盤
Mount-SRDestination -Name RG2 -Computername 16server2 -TemporaryPath K:\
#移除測試故障轉移快照並放棄更改
Dismount-SRDestination -Name RG2 -Computername 16server2
監視存儲復制狀況
命令查看
Get-SRPartnership
顯示復制方向
來源服務器 -> 目標服務器
來源復制組 ->目的復制組
Get-SRgroup
顯示復制組信息,其中主要關註Replication Status,該屬性為Relicating說明正在復制,InitialBlockCopy說明還在初始復制,如果出現error字樣說明當前出現無法執行復制
(Get-SRGroup).Replicas
顯示同一復制組內各分區復制狀態,每一個復制組可以復制兩個以上的分區,通過此命令可以顯示所有分區的復制狀態
關於存儲復制的日誌,可以通過事件查看器看到,設計為兩個通道,Admin與Operational
位於應用程序和服務日誌 - Windows - StorageReplica
存儲復制性能計數器,如果有SCOM 可以使用SCOM收集性能計數器指針,或編寫MP包進行監視,也可整合OMS,到雲端展示。
Storage Replica Partition I/O Statistics
Storage Replica Statistics
在單機對單機,或跨群集復制時,不支持自動化的故障轉移,因此一旦節點宕機,需要手動切換復制,手動切換復制,其實就所謂的反向復制,我們重新切換,由可用的一方為主節點,提供讀寫功能。
刷新主節點復制組日誌至數據磁盤,防止數據丟失
Sync-SRGroup -Name RG01 -Force
反向復制命令
Set-SRPartnership -NewSourceComputerName 16server2 -SourceRGName RG2 -DestinationComputerName 16server1 -DestinationRGName RG1
執行反向復制完成後,當前數據在16server2可讀寫,可以看到我們之前復制過來的數據
這裏有一點需要和大家說明,很多外國的博客都沒提到這點,對於單機對單機復制,反向復制切換僅在計劃內維護有效,例如,當前server1,server2存活,計劃內我們知道server1要維護,可以利用反向復制把server1的復制切換到server2提供讀寫服務,然後維護server1,但是一旦server1忽然宕機,這時候在server2再次執行這條命令是不會成功的,根據老王的了解,在單機對單機的情況下,這種場景,只有刪除存儲復制組,這時磁盤會分別釋放給兩個節點,兩個節點都能讀寫,這時候例如server1宕機,我在server2上面刪除復制關系,釋放出磁盤,給應用讀寫,等server1可用時再重建復制關系,只有這樣做了,並不是很完美,期望以後可以更智能一些,server1忽然宕機,server2運行一條命令能夠直接接管
#刪除存儲復制關系,其中一個節點執行即可
Get-SRPartnership | Remove-SRPartnership -Force
#刪除復制組,需在各節點執行
16server1
16server2
磁盤分別釋放給各節點,每個節點的磁盤都可以看到數據
16server1
16server2
如果是兩個節點的情況下,忽然宕機,大家可以遵循這樣的步驟去恢復
時間節點1:主服務器宕機
時間節點2:備服務器刪除復制關系,復制組
時間節點3:備服務器提供讀寫
時間節點4:主服務器恢復,備服務器重新創建復制關系至主服務器
存儲復制日常管理操作
管理授權
默認情況下存儲復制服務器本地管理員具備管理存儲復制權限,可以通過委派普通用戶,而不需要本地管理員權限
Grant-SRDelegation -UserName oa\mikewang
限制存儲復制網卡
默認情況下存儲復制會盡可能使用所有可用通信的網卡進行存儲復制,我們可以指定使用指定網卡完成存儲復制流量
Get-NetAdapter 獲取各節點網卡index信息
創建存儲復制網絡限制策略
Set-SRNetworkConstraint -SourceComputerName 16server1 -SourceRGName RG01 -SourceNWInterface 11,13 -DestinationComputerName 16server2 -DestinationNWInterface 10,12 -DestinationRGName RG02
各節點刷新SMB多通道連接
各節點獲取SMB多通道-存儲復制專用鏈路
限制存儲復制帶寬使用
創建SMB帶寬限制
Set-SmbBandwidthLimit -Category StorageReplication -BytesPerSecond 50MB
查看SMB帶寬限制
Get-SmbBandwidthLimit -Category StorageReplication
刪除SMB帶寬限制
Remove-SmbBandwidthLimit -Category StorageReplication
刪除復制後無法再次配置復制
刪除所有孤立的Storage Replica分區數據庫並重新裝入所有分區(單機一招爽)
Clear-SRMetadata -AllPartitions
刪除所有孤立的Storage Replica日誌數據
Clear-SRMetadata -AllLogs
刪除所有孤立的故障轉移群集配置數據
Clear-SRMetadata -AllConfiguration (群集一招爽)
刪除單個復制組元數據
Clear-SRMetadata -Name RG01 -Logs -Partition
Windows Server 2016存儲復制淺談