你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

教程:模拟从主要区域读取数据的失败

本教程是系列教程的第二部分。 在其中,你将通过模拟故障来了解 读取访问异地区域冗余存储 (RA-GZRS)的优点。

为了模拟故障,可以使用 静态路由Fiddler。 这两种方法都允许模拟对 RA-GZRS 存储帐户主终结点的请求失败,导致应用程序改为从辅助终结点读取。

如果没有 Azure 订阅,请在开始之前创建一个免费帐户

系列的第二部分中,你将学习如何:

先决条件

在开始本教程之前,请完成上一教程: 使应用程序数据在 Azure 存储中高度可用

若要使用静态路由模拟故障,需使用权限提升的命令提示符。

若要使用 Fiddler 模拟故障,请下载并 安装 Fiddler

模拟由于无效静态路由引起的失败

对于向 RA-GZRS 存储帐户的主终结点发出的所有请求,可以创建一个无效的静态路由。 在本教程中,本地主机用作网关,用于将请求路由到存储帐户。 使用本地主机作为网关会导致对存储帐户主终结点的所有请求在主机内部循环返回,这会导致请求失败。 按照以下步骤模拟故障,并使用无效的静态路由还原主终结点。

启动和暂停应用程序

使用前一篇教程中的说明启动示例并下载测试文件(确认该文件来自主存储)。 然后,可以根据目标平台手动暂停示例或等待提示。

模拟失败

暂停应用程序时,以管理员身份在 Windows 上打开命令提示符,或在 Linux 上以根身份运行终端。

通过在命令提示符或终端上输入以下命令,并将 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,选择“ 规则 ”和“ 自定义规则”。

自定义 Fiddler 规则

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;
        }
    */

粘贴自定义规则

启动和暂停应用程序

使用前一篇教程中的说明启动示例并下载测试文件(确认该文件来自主存储)。 然后,可以根据目标平台手动暂停示例或等待提示。

模拟失败

在应用程序暂停时,返回到 Fiddler 并取消在 OnBeforeResponse 函数中保存的自定义规则的注释。 请务必选择“文件和保存”以保存所做的更改,以便规则生效。 此代码查找对 RA-GZRS 存储帐户的请求,如果路径包含示例文件的名称,则返回响应代码。503 - Service Unavailable

在运行示例的窗口中,恢复应用程序或按相应的键下载示例文件,并确认它来自辅助存储。 然后可以再次暂停示例或等待出现提示。

模拟主终结点还原

在 Fiddler 中,再次删除或注释掉自定义规则。 选择“文件”“保存”以确保该规则不再生效。

在运行示例的窗口中恢复应用程序,或者按下相应的键下载示例文件,并再次确认该文件来自主存储。 然后,可以退出示例。

后续步骤

在本系列的第二部分中,您学习了如何模拟故障以测试读取访问异地冗余存储。

若要详细了解 RA-GZRS 存储的工作原理及其相关的风险,请参阅 使用 RA-GZRS 设计 HA 应用