共用方式為


教學課程:從主要區域模擬資料讀取失敗

本教學課程是一個系列的第二部分。 在其中,您可藉由模擬失敗來了解讀取權限異地區域備援儲存體 (RA-GZRS) 的優點。

為了模擬失敗,您可使用靜態路由Fiddler。 這兩種方法都會允許您模擬對 RA-GZRS 儲存體帳戶的主要端點要求失敗,而導致從次要端點讀取應用程式。

如尚未擁有 Azure 訂用帳戶,請在開始之前先建立免費帳戶

在本系列的第二部分中,您將瞭解如何:

必要條件

開始進行本教學課程之前,請先完成前一個教學課程:使用 Azure 儲存體讓應用程式資料具有高可用性

若要使用靜態路由來模擬失敗,請使用提升權限的命令提示字元。

若要使用 Fiddler 來模擬失敗,請下載和安裝 Fiddler

使用無效的靜態路由模擬失敗

您可以建立無效的靜態路由,並將其用於所有對 RA-GZRS 儲存體帳戶主要端點的要求。 在本教學課程中,會使用本機主機作為將要求路由傳送到儲存體帳戶的閘道。 以本機主機作為閘道,會導致所有對儲存體帳戶主要端點的要求在主機內形成迴圈,進而導致要求失敗。 請遵循下列步驟,以使用無效的靜態路由模擬失敗和主要端點還原。

啟動和暫停應用程式

使用上一個教學課程中的指示來啟動範例和下載測試檔案,並確認其來自主要儲存體。 然後,您可以根據目標平台,以手動方式暫停範例或等候提示。

模擬失敗

在應用程式暫停的情況下,於 Windows 上以系統管理員身分開啟命令提示字元,或在 Linux 上以 root 身分執行終端機。

在命令提示字元或終端機上輸入下列命令,以取得儲存體帳戶主要端點網域的相關資訊,並將 STORAGEACCOUNTNAME 取代為儲存體帳戶的名稱。

nslookup STORAGEACCOUNTNAME.blob.core.windows.net

將儲存體帳戶的 IP 位址複製到文字編輯器,供後續使用。

若要取得本機主機的 IP 位址,請在 Windows 命令提示字元上輸入 ipconfig,或在 Linux 終端機上輸入 ifconfig

若要為目的地主機新增靜態路由,請在 Windows 命令提示字元或 Linux 終端機上輸入下列命令,並將 <destination_ip> 取代為儲存體帳戶的 IP 位址,以及將 <gateway_ip> 取代為本機主機的 IP 位址。

Linux

sudo route add <destination_ip> gw <gateway_ip>

Windows

route add <destination_ip> <gateway_ip>

在具有執行中範例的視窗內繼續執行應用程式,或按下適當按鍵來下載範例檔案,並確認其來自次要儲存體。 然後,您可以再次暫停範例,或等候提示。

模擬主要端點還原

若要模擬再次恢復運作的主要端點,請從路由表中刪除無效的靜態路由。 這可讓所有對主要端點的要求透過預設閘道路由傳送。 請在 Windows 命令提示字元或 Linux 終端機上輸入下列命令。

Linux

sudo route del <destination_ip> gw <gateway_ip>

Windows

route delete <destination_ip>

然後,您就可以繼續執行應用程式,或按下適當按鍵來重新下載範例檔案,但這次請確認其再次來自主要儲存體。

使用 Fiddler 模擬失敗

若要使用 Fiddler 模擬失敗,您必須將要求的失敗回應插入 RA-GZRS 儲存體帳戶的主要端點。

下列各節說明如何使用 fiddler 來模擬失敗和主要端點還原。

啟動 Fiddler

開啟 Fiddler,選取 [規則] 和 [自訂規則]

Customize Fiddler rules

Fiddler ScriptEditor 會啟動並顯示 SampleRules.js 檔案。 此檔案是用來自訂 Fiddler。

OnBeforeResponse 函式中貼入下列程式碼範例,並將 STORAGEACCOUNTNAME 取代為儲存體帳戶的名稱。 根據範例,您可能也必須將 HelloWorld 取代為下載的測試檔案名稱,或在不適用時移除該部分的條件。 新的程式碼會標為註解,以確保其不會立即執行。

完成後,選取 [檔案] 和 [儲存] 以儲存變更。 讓 ScriptEditor 視窗保持開啟以供下列步驟使用。

    /*
        // Simulate data center failure
        // After it is successfully downloading the blob, pause the code in the sample,
        // uncomment these lines of script, and save the script.
        // It will intercept the (probably successful) responses and send back a 503 error.
        // When you're ready to stop sending back errors, comment these lines of script out again
        //     and save the changes.

        if ((oSession.hostname == "STORAGEACCOUNTNAME.blob.core.windows.net")
            // depending on the sample, you may need to modify or remove the line below
            && (oSession.PathAndQuery.Contains("HelloWorld"))) {
            oSession.responseCode = 503;
        }
    */

Paste customized rule

啟動和暫停應用程式

使用上一個教學課程中的指示來啟動範例和下載測試檔案,並確認其來自主要儲存體。 然後,您可以根據目標平台,以手動方式暫停範例或等候提示。

模擬失敗

在應用程式暫停的情況下切換回 Fiddler,並將 OnBeforeResponse 函式中儲存的自訂規則取消註解。 請務必選取 [檔案] 和 [儲存] 來儲存變更,以便讓規則生效。 此程式碼會尋找 RA-GZRS 儲存體帳戶要求,若路徑包含範例檔案的名稱,則會傳回 503 - Service Unavailable 的回應碼。

在具有執行中範例的視窗內繼續執行應用程式,或按下適當按鍵來下載範例檔案,並確認其來自次要儲存體。 然後,您可以再次暫停範例,或等候提示。

模擬主要端點還原

在 Fiddler 中,將自訂規則再次移除或標為註解。 選取 [檔案] 和 [儲存] 來確保規則不再有效。

在具有執行中範例的視窗內繼續執行應用程式,或按下適當按鍵來下載範例檔案,並確認其再次來自主要儲存體。 然後您就可以結束範例。

下一步

在系列的第二部分中,您已了解模擬失敗以測試讀取權限異地備援儲存體的相關資訊。

若要深入了解 RA-GZRS 儲存體的運作方式和相關風險,請參閱使用 RA-GZRS 設計 HA 應用程式