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

通过 Azure CLI 创建使用直接服务故障的 Chaos 试验

可以使用混沌试验,通过在受控环境中引发一些故障,来验证应用程序是否可以应对这些故障。 在本文中,你将使用混沌试验和 Azure Chaos Studio 进行多次读取、单次写入 Azure Cosmos DB 故障转移。 运行此试验可帮助你在发生故障转移事件时防范数据丢失。

可使用这些相同的步骤来设置和运行针对任何直接服务故障的试验。 直接服务故障直接在 Azure 资源上运行,无需进行检测,这与基于代理的故障不同,后者需要安装混沌代理。

先决条件

  • Azure 订阅。 如果没有 Azure 订阅,请在开始之前创建一个 Azure 免费帐户
  • 一个 Azure Cosmos DB 帐户。 如果没有 Azure Cosmos DB 帐户,可以创建一个
  • 至少为 Azure Cosmos DB 帐户设置一个读取和一个写入区域。

打开 Azure Cloud Shell

Azure Cloud Shell 是免费的交互式 shell,可以使用它运行本文中的操作步骤。 它预安装有常用 Azure 工具并将其配置与帐户一起使用。

若要打开 Cloud Shell,请在代码块的右上角选择“试一试”。 也可以在单独的浏览器标签页中通过转到 Bash 打开 Cloud Shell。 选择“复制”以复制代码块,将其粘贴到 Cloud Shell 中,然后选择“Enter”来运行它

如果你希望在本地安装并使用 CLI,则本教程需要 Azure CLI 2.0.30 或更高版本。 运行 az --version 即可查找版本。 如果需要进行安装或升级,请参阅安装 Azure CLI

注意

这些说明使用 Cloud Shell 中的 Bash 终端。 如果是在本地或在 PowerShell 终端中运行 CLI,则某些命令可能无法按说明正常使用。

在 Azure Cosmos DB 帐户上启用 Chaos Studio

Chaos Studio 无法针对资源注入故障,除非已先将该资源添加到 Chaos Studio。 可通过针对资源创建目标和功能,将资源添加到 Chaos Studio。 Azure Cosmos DB 帐户只有一种目标类型(服务直接)和一项功能(故障转移)。 其他资源最多可以有两种目标类型。 一种目标类型用于服务直接故障。 另一种目标类型用于基于代理的故障。 其他资源可能有许多其他功能。

  1. 通过将 $RESOURCE_ID 替换为要添加的资源的资源 ID 来创建目标。 将 $TARGET_TYPE 替换为要添加的目标类型

    az rest --method put --url "https://management.azure.com/$RESOURCE_ID/providers/Microsoft.Chaos/targets/$TARGET_TYPE?api-version=2023-11-01" --body "{\"properties\":{}}"
    

    例如,如果将虚拟机添加为直接服务目标:

    az rest --method put --url "https://management.azure.com/subscriptions/b65f2fec-d6b2-4edd-817e-9339d8c01dc4/resourceGroups/myRG/providers/Microsoft.Compute/virtualMachines/myVM/providers/Microsoft.Chaos/targets/Microsoft-VirtualMachine?api-version=2023-11-01" --body "{\"properties\":{}}"
    
  2. 通过将 $RESOURCE_ID 替换为要添加的资源的资源 ID,在目标上创建功能。 将 $TARGET_TYPE 替换为要添加的目标类型。 将 $CAPABILITY 替换为要启用的故障功能的名称

    az rest --method put --url "https://management.azure.com/$RESOURCE_ID/providers/Microsoft.Chaos/targets/$TARGET_TYPE/capabilities/$CAPABILITY?api-version=2023-11-01" --body "{\"properties\":{}}"
    

    例如,如果要启用虚拟机关闭功能:

    az rest --method put --url "https://management.azure.com/subscriptions/b65f2fec-d6b2-4edd-817e-9339d8c01dc4/resourceGroups/myRG/providers/Microsoft.Compute/virtualMachines/myVM/providers/Microsoft.Chaos/targets/Microsoft-VirtualMachine/capabilities/shutdown-1.0?api-version=2023-11-01" --body "{\"properties\":{}}"
    

现在,你已成功将 Azure Cosmos DB 帐户添加到了 Chaos Studio。

创建试验

现在,可以创建试验。 混沌试验定义了要针对目标资源执行的操作。 操作将按顺序组织并运行。 混沌试验还定义了要针对分支执行的操作(并行运行)。

  1. 使用下面的 JSON 示例为基础开始构建你的试验 JSON。 使用创建试验 API故障库修改 JSON,以响应你要运行的试验。

    {
      "location": "eastus",
      "identity": {
        "type": "SystemAssigned"
      },
      "properties": {
        "steps": [
          {
            "name": "Step1",
            "branches": [
              {
                "name": "Branch1",
                "actions": [
                  {
                    "type": "continuous",
                    "selectorId": "Selector1",
                    "duration": "PT10M",
                    "parameters": [
                      {
                        "key": "readRegion",
                        "value": "East US 2"
                      }
                    ],
                    "name": "urn:csci:microsoft:cosmosDB:failover/1.0"
                  }
                ]
              }
            ]
          }
        ],
        "selectors": [
          {
            "id": "Selector1",
            "type": "List",
            "targets": [
              {
                "type": "ChaosTarget",
                "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/chaosstudiodemo/providers/Microsoft.DocumentDB/databaseAccounts/myDB/providers/Microsoft.Chaos/targets/Microsoft-CosmosDB"
              }
            ]
          }
        ]
      }
    }
    
  2. 使用 Azure CLI 创建试验。 将 $SUBSCRIPTION_ID$RESOURCE_GROUP$EXPERIMENT_NAME 替换为你的试验的属性。 请确保已保存并上传你的试验 JSON。 将 experiment.json 更新为你的 JSON 文件名。

    az rest --method put --uri https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.Chaos/experiments/$EXPERIMENT_NAME?api-version=2023-11-01 --body @experiment.json
    

    每个试验将创建对应的系统分配的托管标识。 请记下响应中此标识的主体 ID,以便在下一步骤中使用。

向 Azure Cosmos DB 帐户授予试验权限

创建混沌试验时,Chaos Studio 会创建系统分配的托管标识,用于针对目标资源执行故障。 若要成功运行试验,必须向此标识提供目标资源的适当权限

使用以下命令向试验授予对资源的访问权限。 将 $EXPERIMENT_PRINCIPAL_ID 替换为上一步骤中的主体 ID。 将 $RESOURCE_ID 替换为目标资源的资源 ID。 在本例中,它是 Azure Cosmos DB 实例资源 ID。 将角色更改为该资源类型的相应内置角色。 为试验中的每个资源运行此命令。

az role assignment create --role "Cosmos DB Operator" --assignee-object-id $EXPERIMENT_PRINCIPAL_ID --scope $RESOURCE_ID

运行试验

现在,你已准备就绪,可以开始运行试验。 若要查看效果,建议打开 Azure Cosmos DB 帐户概述,并在单独的浏览器选项卡中转到“全局复制数据”。在试验期间定期刷新以显示区域交换。

  1. 使用 Azure CLI 启动试验。 将 $SUBSCRIPTION_ID$RESOURCE_GROUP$EXPERIMENT_NAME 替换为你的试验的属性。

    az rest --method post --uri https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.Chaos/experiments/$EXPERIMENT_NAME/start?api-version=2023-11-01
    
  2. 响应包含一个状态 URL,在试验运行时可以使用它来查询试验状态。

后续步骤

现在,你已运行 Azure Cosmos DB 服务直接试验,你已准备好: