Поделиться через


Создание эксперимента хаоса с использованием прямого сбоя службы с помощью Azure CLI

Вы можете использовать эксперимент хаоса для проверки устойчивости приложения к сбоям, вызвав эти сбои в управляемой среде. В этой статье вы приводите к многочитаемой однозаписной отработке отказа Azure Cosmos DB с помощью эксперимента хаоса и Azure Chaos Studio. Выполнение этого эксперимента поможет защититься от потери данных при возникновении события отработки отказа.

Эти же действия можно использовать для настройки и запуска эксперимента для любой прямой ошибки службы. Прямой сбой службы выполняется непосредственно с ресурсом Azure без необходимости инструментирования, в отличие от сбоев на основе агента, которые требуют установки агента хаоса.

Необходимые компоненты

  • Подписка Azure. Если у вас еще нет подписки Azure, создайте бесплатную учетную запись Azure, прежде чем начинать работу.
  • Учетная запись Azure Cosmos DB. Если у вас нет учетной записи Azure Cosmos DB, ее можно создать.
  • По крайней мере одна настройка области чтения и записи для учетной записи Azure Cosmos DB.

Откройте Azure Cloud Shell

Azure Cloud Shell — это бесплатная интерактивная оболочка, с помощью которой можно выполнять действия, описанные в этой статье. Она включает предварительно установленные общие инструменты Azure и настроена для использования с вашей учетной записью.

Чтобы открыть Cloud Shell, выберите "Попробовать" в правом верхнем углу блока кода. Вы также можете открыть Cloud Shell на отдельной вкладке браузера, перейдя в Bash. Нажмите кнопку Копировать, чтобы скопировать блоки кода. Вставьте код в Cloud Shell и нажмите клавишу ВВОД, чтобы выполнить его.

Если вы хотите установить и использовать CLI локально, для этого руководства требуется Azure CLI версии 2.0.30 или более поздней. Чтобы узнать версию, выполните команду az --version. Если вам необходимо выполнить установку или обновление, см. статью Установка Azure CLI 2.0.

Примечание.

Эти инструкции используют терминал Bash в Cloud Shell. Некоторые команды могут работать не так, как описано, если вы выполняете интерфейс командной строки локально или в терминале PowerShell.

Включение Chaos Studio в учетной записи Azure Cosmos DB

Chaos Studio не может вводить ошибки к ресурсу, если только этот ресурс не был добавлен в Chaos Studio. Вы добавите ресурс в Chaos Studio, создав целевой объект и возможности ресурса. Учетные записи Azure Cosmos DB имеют только один целевой тип (service-direct) и одну возможность (отработка отказа). Другие ресурсы могут иметь до двух целевых типов. Один из целевых типов — для ошибок с прямой службой. Другой целевой тип — для сбоев на основе агента. Другие ресурсы могут иметь множество других возможностей.

  1. Создайте целевой объект, заменив $RESOURCE_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 идентификатор ресурса добавляемого ресурса. Замените $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. Измените JSON, чтобы соответствовать эксперименту, который требуется запустить с помощью API создания экспериментов и библиотеки ошибок.

    {
      "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/b65f2fec-d6b2-4edd-817e-9339d8c01dc4/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
    

    Каждый эксперимент создает соответствующее управляемое удостоверение, назначаемое системой. Обратите внимание на идентификатор субъекта для этого удостоверения в ответе на следующий шаг.

Предоставление разрешения на эксперимент учетной записи Azure Cosmos DB

При создании эксперимента хаоса Студия Chaos Studio создает управляемое удостоверение, назначаемое системой, которое выполняет ошибки в целевых ресурсах. Это удостоверение должно быть предоставлено соответствующим разрешениям целевому ресурсу для успешного выполнения эксперимента.

Предоставьте эксперименту доступ к ресурсам с помощью следующей команды. Замените $EXPERIMENT_PRINCIPAL_ID идентификатор субъекта на предыдущем шаге. Замените $RESOURCE_ID идентификатором ресурса целевого ресурса. В этом случае это идентификатор ресурса экземпляра Azure Cosmos DB. Измените роль на соответствующую встроенную роль для этого типа ресурса. Выполните эту команду для каждого ресурса, целевого в эксперименте.

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, вы готовы: