Azure致力于確保Azure服務一直可用。不過,可能會發(fā)生計劃外服務中斷。如果應用程序需要復原能力,Azure建議使用異地冗余存儲,以便將數(shù)據(jù)復制到另一個區(qū)域。此外,客戶還應制定用于處理區(qū)域服務中斷的災難恢復計劃。災難恢復計劃的一個重要組成部分是,準備在主終結(jié)點不可用時將故障轉(zhuǎn)移到輔助終結(jié)點。
Azure存儲支持異地冗余存儲帳戶的故障轉(zhuǎn)移。通過帳戶故障轉(zhuǎn)移,可以在主終結(jié)點不可用時為存儲帳戶啟動故障轉(zhuǎn)移過程。故障轉(zhuǎn)移將輔助終結(jié)點更新為,存儲帳戶的主終結(jié)點。在故障轉(zhuǎn)移完成后,客戶端便可以開始對新的主終結(jié)點執(zhí)行寫入操作。
帳戶故障轉(zhuǎn)移適用于常規(guī)用途v1、常規(guī)用途v2以及使用Azure資源管理器部署的Blob存儲帳戶類型。
本文介紹了帳戶故障轉(zhuǎn)移所涉及的概念和過程,以及如何讓存儲帳戶做好恢復準備,且造成的客戶影響最小。若要了解如何在Azure門戶或PowerShell中啟動帳戶故障轉(zhuǎn)移,請參閱啟動帳戶故障轉(zhuǎn)移。
備注
本文已經(jīng)過更新,以便使用Azure Az PowerShell模塊。若要與Azure交互,建議使用的PowerShell模塊是Az PowerShell模塊。若要開始使用Az PowerShell模塊,請參閱安裝Azure PowerShell。若要了解如何遷移到Az PowerShell模塊,請參閱將Azure PowerShell從AzureRM遷移到Az。
選擇正確的冗余選項
Azure存儲將維護存儲帳戶的多個副本,以確保持續(xù)性和高可用性。為帳戶選擇哪個冗余選項取決于所需的復原能力水平。為了防止區(qū)域中斷,請為你的帳戶配置異地冗余存儲,無論是否選擇從次要區(qū)域進行讀取訪問:
異地冗余存儲(GRS)在至少相距數(shù)百英里的兩個地理區(qū)域中異步復制數(shù)據(jù)。如果主要區(qū)域遭遇服務中斷,次要區(qū)域便會成為數(shù)據(jù)的冗余源??梢酝ㄟ^啟動故障轉(zhuǎn)移,將輔助終結(jié)點轉(zhuǎn)換為主終結(jié)點。
讀取訪問權限異地冗余存儲(RA-GRS):為異地冗余存儲提供附加優(yōu)勢,即對輔助終結(jié)點的讀取訪問權限。如果主終結(jié)點發(fā)生中斷,配置為對輔助終結(jié)點進行讀取訪問并設計為高度可用的應用程序可以繼續(xù)從輔助終結(jié)點讀取數(shù)據(jù)。Azure建議使用RA-GRS來實現(xiàn)應用程序的最大可用性和持續(xù)性。
有關Azure存儲中冗余的詳細信息,請參閱Azure存儲冗余。
警告
異地冗余存儲有數(shù)據(jù)丟失風險。數(shù)據(jù)是異步復制到次要區(qū)域,這意味著數(shù)據(jù)寫入主要區(qū)域與數(shù)據(jù)寫入次要區(qū)域之間存在延遲。發(fā)生服務中斷時,尚未復制到輔助終結(jié)點的對主終結(jié)點的寫入操作將丟失。
旨在實現(xiàn)高可用性
請務必從一開始就設計高可用性應用程序。有關設計應用程序和計劃災難恢復方面的指導,請參閱以下Azure資源:
設計適用于Azure的可復原應用程序:概述了在Azure中生成高可用性應用程序的關鍵概念。
復原能力清單:用于驗證應用程序是否實現(xiàn)高可用性最佳設計做法的清單。
使用異地冗余設計高度可用的應用程序:有關如何生成可利用異地冗余存儲的應用程序的設計指南。
教程:生成使用Blob存儲的高可用性應用程序:介紹了如何生成在模擬故障和恢復時自動切換終結(jié)點的高可用性應用程序的教程。
此外,還請注意下面這些可保持Azure存儲數(shù)據(jù)高可用性的最佳做法:
磁盤:利用Azure備份備份Azure虛擬機使用的VM磁盤。還建議在發(fā)生區(qū)域災難時使用Azure Site Recovery保護VM。
塊blob:啟用軟刪除以防發(fā)生對象級刪除和覆蓋,或使用AzCopy、Azure PowerShell或Azure數(shù)據(jù)移動庫將塊blob復制到其他區(qū)域中的另一個存儲帳戶內(nèi)。
文件:使用AzCopy或Azure PowerShell將文件復制到其他區(qū)域中的另一個存儲帳戶內(nèi)。
表:使用AzCopy將表數(shù)據(jù)導出到其他區(qū)域中的另一個存儲帳戶內(nèi)。
跟蹤服務中斷
客戶可以訂閱Azure服務運行狀況儀表板,以跟蹤Azure存儲和其他Azure服務的運行狀況和狀態(tài)。
Azure還建議將應用程序設計為可以應對可能出現(xiàn)的寫入故障。應用程序應公開寫入故障,以提醒你主要區(qū)域可能存在服務中斷。
了解帳戶故障轉(zhuǎn)移過程
借助客戶管理的帳戶故障轉(zhuǎn)移,可以在主要區(qū)域因任何原因而不可用時,將整個存儲帳戶故障轉(zhuǎn)移到次要區(qū)域。如果你強制故障轉(zhuǎn)移到次要區(qū)域,客戶端可以在故障轉(zhuǎn)移完成后開始向輔助終結(jié)點寫入數(shù)據(jù)。故障轉(zhuǎn)移通常需要大約一小時才能完成。
帳戶故障轉(zhuǎn)移的工作原理
在正常情況下,客戶端將數(shù)據(jù)寫入主要區(qū)域中的Azure存儲帳戶,并將此數(shù)據(jù)異步復制到次要區(qū)域。下圖展示了主要區(qū)域可用時的場景:
如果主終結(jié)點因任何原因而不可用,客戶端無法再向存儲帳戶寫入數(shù)據(jù)。下圖展示了主終結(jié)點不可用、但尚未執(zhí)行恢復時的場景:
客戶啟動帳戶故障轉(zhuǎn)移到輔助終結(jié)點。故障轉(zhuǎn)移過程更新Azure存儲提供的DNS條目,這樣輔助終結(jié)點就會成為存儲帳戶的新主終結(jié)點,如下圖所示:
在DNS條目已更新且請求定向到新的主終結(jié)點后,異地冗余帳戶便會恢復寫入訪問權限。在故障轉(zhuǎn)移完成后,用于blob、表、隊列和文件的現(xiàn)有存儲服務終結(jié)點保持不變。
重要
在故障轉(zhuǎn)移完成后,存儲帳戶被配置為在新的主終結(jié)點中本地冗余。若要繼續(xù)復制到新的輔助終結(jié)點,請將帳戶重新配置為使用異地冗余。
請注意,將LRS帳戶轉(zhuǎn)換為使用異地冗余會產(chǎn)生費用。在故障轉(zhuǎn)移完成后,對新的主要區(qū)域中的存儲帳戶進行更新也會產(chǎn)生此費用。
預測數(shù)據(jù)丟失
注意
帳戶故障轉(zhuǎn)移通常涉及一些數(shù)據(jù)丟失。請務必了解啟動帳戶故障轉(zhuǎn)移的影響。
因為數(shù)據(jù)是從主要區(qū)域異步寫入次要區(qū)域,所以在寫入主要區(qū)域的數(shù)據(jù)復制到次要區(qū)域前始終存在延遲。如果主要區(qū)域不可用,最新寫入數(shù)據(jù)可能尚未復制到次要區(qū)域。
如果強制執(zhí)行故障轉(zhuǎn)移,主要區(qū)域中的所有數(shù)據(jù)就會在次要區(qū)域成為新的主要區(qū)域且存儲帳戶配置為本地冗余時丟失。當故障轉(zhuǎn)移發(fā)生時,將保留已復制到次要區(qū)域的所有數(shù)據(jù)。不過,任何寫入主要區(qū)域、但尚未復制到次要區(qū)域的數(shù)據(jù)會永久丟失。
“上次同步時間”屬性表示,最近一次保證已將主要區(qū)域中的數(shù)據(jù)寫入次要區(qū)域的時間。上次同步時間之前寫入的所有數(shù)據(jù)都已復制到次要區(qū)域中,而在上次同步時間之后寫入的數(shù)據(jù)則可能尚未寫入次要區(qū)域并發(fā)生丟失。在發(fā)生服務中斷時,使用此屬性可估計啟動帳戶故障轉(zhuǎn)移可能會造成的數(shù)據(jù)丟失量。
最佳做法是,將應用程序設計為,可以使用上次同步時間來評估預期數(shù)據(jù)丟失。例如,若要記錄所有寫入操作,可以比較上次寫入操作時間與上次同步時間,以確定哪些寫入操作尚未同步到次要區(qū)域。
如需詳細了解如何檢查“上次同步時間”屬性,請參閱檢查存儲帳戶的“上次同步時間”屬性。
謹慎故障回復到原始主要區(qū)域
從主要區(qū)域故障轉(zhuǎn)移到次要區(qū)域后,存儲帳戶被配置為在新的主要區(qū)域中本地冗余。然后可以將帳戶重新配置為使用異地冗余。如果帳戶在故障轉(zhuǎn)移完成后再次配置為使用異地冗余,新的主要區(qū)域就會立即開始將數(shù)據(jù)復制到新的次要區(qū)域(在原始故障轉(zhuǎn)移發(fā)生前為主要區(qū)域)。不過,將主要區(qū)域中的現(xiàn)有數(shù)據(jù)完全復制到新的次要區(qū)域可能需要一段時間才能完成。
為存儲帳戶重新配置異地冗余后,可以啟動另一個故障轉(zhuǎn)移,從新的主要區(qū)域故障回復到新的次要區(qū)域。在這種情況下,故障轉(zhuǎn)移發(fā)生前的原始主要區(qū)域重新成為主要區(qū)域,并配置為本地冗余。故障轉(zhuǎn)移完成后的主要區(qū)域(即原始次要區(qū)域)中的所有數(shù)據(jù)都會丟失。如果在故障回復前存儲帳戶中的大部分數(shù)據(jù)都尚未復制到新的次要區(qū)域,可能會丟失大量數(shù)據(jù)。
為了避免大量數(shù)據(jù)丟失,請在故障回復前檢查“上次同步時間”屬性的值。若要評估預期數(shù)據(jù)丟失,請比較上次同步時間與數(shù)據(jù)上次寫入新的主要區(qū)域時間。
啟動帳戶故障轉(zhuǎn)移
可以從Azure門戶、PowerShell、Azure CLI或Azure存儲資源提供程序API啟動帳戶故障轉(zhuǎn)移。若要詳細了解如何啟動故障轉(zhuǎn)移,請參閱啟動帳戶故障轉(zhuǎn)移。
其他注意事項
請參閱本部分中介紹的其他注意事項,了解強制執(zhí)行故障轉(zhuǎn)移時對應用程序和服務可能產(chǎn)生的影響。
包含已存檔blob的存儲帳戶
包含已存檔blob的存儲帳戶支持帳戶故障轉(zhuǎn)移。故障轉(zhuǎn)移完成后,需要先將所有已存檔blob都解除凍結(jié)到聯(lián)機層,然后才能將帳戶配置為使用異地冗余。
存儲資源提供程序
故障轉(zhuǎn)移完成后,客戶端可再次讀取并寫入新的主要區(qū)域中的Azure存儲數(shù)據(jù)。但是,Azure存儲資源提供程序不會進行故障轉(zhuǎn)移,因此資源管理操作仍必須在主要區(qū)域中進行。如果主要區(qū)域不可用,將無法對存儲帳戶執(zhí)行管理操作。
由于Azure存儲資源提供程序不會進行故障轉(zhuǎn)移,因此在故障轉(zhuǎn)移完成后,Location屬性將返回原始主位置。
Azure虛擬機
Azure虛擬機(VM)不會在帳戶故障轉(zhuǎn)移過程中進行故障轉(zhuǎn)移。如果主要區(qū)域不可用且你故障轉(zhuǎn)移到次要區(qū)域,那么就需要在故障轉(zhuǎn)移完成后重新創(chuàng)建所有VM。此外,還可能會丟失與帳戶故障轉(zhuǎn)移相關聯(lián)的數(shù)據(jù)。Azure建議使用以下特定于Azure中虛擬機的高可用性和災難恢復指南。
Azure非托管磁盤
根據(jù)最佳做法,Azure建議將非托管磁盤轉(zhuǎn)換為托管磁盤。不過,如果需要對包含附加到Azure VM的非托管磁盤的帳戶進行故障轉(zhuǎn)移,必須在啟動故障轉(zhuǎn)移前關閉VM。
非托管磁盤在Azure存儲中存儲為頁blob。如果VM在Azure中運行,任何附加到VM的非托管磁盤都會被租用。如果blob上有租用,便無法繼續(xù)帳戶故障轉(zhuǎn)移。若要執(zhí)行故障轉(zhuǎn)移,請按照以下步驟操作:
開始前,先記下所有非托管磁盤的名稱、邏輯單元號(LUN)和附加到的VM。此操作可便于在故障轉(zhuǎn)移完成后更輕松地重新附加磁盤。
關閉VM。
刪除VM,但保留非托管磁盤的VHD文件。記下VM刪除時間。
等到“上次同步時間”已更新且晚于VM刪除時間。這一步很重要,因為如果在故障轉(zhuǎn)移發(fā)生時輔助終結(jié)點尚未使用VHD文件完全更新,那么VM可能無法在新的主要區(qū)域中正常運行。
啟動帳戶故障轉(zhuǎn)移。
等到帳戶故障轉(zhuǎn)移完成,且次要區(qū)域已成為新的主要區(qū)域。
在新的主要區(qū)域中創(chuàng)建VM,并重新附加VHD。
啟動新VM。
請注意,當VM關閉時,臨時磁盤中存儲的任何數(shù)據(jù)都會丟失。
不支持的功能和服務
帳戶故障轉(zhuǎn)移不支持以下功能或服務:
目前不支持ADLS Gen2存儲帳戶(已啟用分層命名空間的帳戶)。
無法對包含高級塊blob的存儲帳戶執(zhí)行故障轉(zhuǎn)移。支持高級塊blob的存儲帳戶暫不支持異地冗余。
無法對包含任何已啟用WORM不可變性策略的容器執(zhí)行故障轉(zhuǎn)移。已解鎖/鎖定的基于時間的保留或法定保留策略會阻止故障轉(zhuǎn)移,以便保持合規(guī)性。
除了故障轉(zhuǎn)移外,還可以復制數(shù)據(jù)
如果將存儲帳戶配置為具有對次要區(qū)域的讀取訪問權限,則可以將應用程序設計為從輔助終結(jié)點進行讀取。如果不希望在主要區(qū)域發(fā)生服務中斷時進行故障轉(zhuǎn)移,可使用AzCopy、Azure PowerShell或Azure數(shù)據(jù)移動庫等工具,將數(shù)據(jù)從次要區(qū)域中的存儲帳戶復制到未受影響區(qū)域中的另一個存儲帳戶。然后,可以將應用程序指向此存儲帳戶,以進行讀寫操作。
注意
不應將帳戶故障轉(zhuǎn)移用作數(shù)據(jù)遷移策略的一部分。
Azure托管的故障轉(zhuǎn)移
在由于重大災難而導致區(qū)域丟失的極端情況下,Azure可能會啟動區(qū)域故障轉(zhuǎn)移。在此情況下,不需要采取任何操作。在Azure托管的故障轉(zhuǎn)移完成之前,你對存儲帳戶不擁有寫入訪問權限。如果存儲帳戶已配置RA-GRS,應用程序可以從次要區(qū)域讀取數(shù)據(jù)。