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