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


Периодическое резервное копирование и восстановление в кластере Azure Service Fabric

Service Fabric — это платформа для разработки надежных распределенных облачных приложений и управления ими. Он поддерживает микрослужбы без отслеживания состояния и состояния. Службы с отслеживанием состояния могут хранить важные данные за пределами одного запроса или транзакции. Если служба с отслеживанием состояния завершает работу или теряет данные, может потребоваться восстановить данные из последней резервной копии, чтобы продолжить работу должным образом.

Service Fabric реплицирует состояние на нескольких узлах, обеспечивая высокую доступность службы. Даже в случае сбоя одного узла в кластере служба будет оставаться доступной. Однако в некоторых случаях данные службы по-прежнему должны быть надежными в отношении более широких сбоев.

Например, службе может потребоваться создать резервную копию своих данных для защиты в следующих ситуациях:

  • в случае полной потери всего кластера Service Fabric.
  • Полной потери большей части реплик секций служб.
  • Если из-за административных ошибок произошло случайное удаление или повреждение состояния. Например, администратор с достаточными привилегиями ошибочно удалил службу.
  • Если из-за ошибок в службе происходит повреждение данных. Например, это может произойти, если при обновлении кода службы начинается запись поврежденных данных в надежную коллекцию. В этом случае может потребоваться вернуть код и данные в предыдущее состояние.
  • При автономной обработке данных. Автономная обработка данных для бизнес-аналитики, которая происходит отдельно от службы, создающей данные, может быть очень удобной.

Service Fabric предоставляет встроенный API для выполнения резервного копирования и восстановления на момент во времени. Разработчики приложений могут использовать эти API для периодического резервного копирования состояния службы. Кроме того, если администраторы службы хотят активировать резервное копирование из-за пределов службы в определенный момент время, например перед обновлением приложения, разработчики должны предоставить возможность получения резервной копии (и восстановления) в виде API этой службы. Поддержка резервных копий влечет за собой дополнительные расходы. Например, вы можете создать пять добавочных резервных копий с интервалом в полчаса, а затем — полную резервную копию. После создания полной резервной копии можно удалить предыдущие добавочные резервные копии. Такой подход требует написания дополнительного кода, что приводит к дополнительным затратам при разработке приложений.

Служба резервного копирования и восстановления в Service Fabric обеспечивает простое автоматическое резервное копирование данных, хранящихся в службах с отслеживанием состояния. Периодическое резервное копирование данных приложения является основой для защиты от потери данных и недоступности службы. Service Fabric предоставляет дополнительную службу резервного копирования и восстановления, которая позволяет настраивать периодическое резервное копирование надежных служб с отслеживанием состояния (включая службы субъекта) без необходимости написания дополнительного кода. Она также упрощает восстановление ранее сделанных резервных копий.

Service Fabric предоставляет набор API для использования функций, связанных с возможностью периодического резервного копирования и восстановления.

  • Планирование периодического резервного копирования надежных служб с отслеживанием состояния и Reliable Actors с поддержкой передачи резервных копий во внешние места хранения. Поддерживаемые расположения хранилища
    • Хранилище Azure
    • Файловый ресурс (в локальной среде)
  • Перечисление резервных копий.
  • Активация нерегламентированного резервного копирования секции.
  • Восстановление секции с помощью предыдущей резервной копии.
  • Временная остановка резервного копирования.
  • Управление хранением резервных копий (предстоящих).

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

  • Кластер Service Fabric с платформой Fabric 6.4 или более поздней версии. Инструкции по созданию кластера Service Fabric с помощью шаблона ресурсов Azure см. в этой статье.
  • Сертификат X.509 для шифрования секретов, необходимых для подключения к хранилищу резервных копий. Сведения о получении или создании сертификата X.509 см. в статье Создание кластера Service Fabric в Azure с помощью Azure Resource Manager.
  • Надежное приложения Service Fabric с отслеживанием состояния, созданное с помощью пакета SDK Service Fabric версии 3.0 или выше. Для приложений, предназначенных для .NET Core 2.0, приложение должно быть создано с помощью пакета SDK Service Fabric версии 3.1 или более поздней.
  • Создайте учетную запись хранения Azure для хранения резервных копий приложения.
  • Установите модуль Microsoft.ServiceFabric.Powershell.Http для вызова конфигурации.

    Install-Module -Name Microsoft.ServiceFabric.Powershell.Http -AllowPrerelease

Примечание.

Если версия модуля PowerShellGet предшествует 1.6.0, его нужно обновить, чтобы добавить поддержку флага -AllowPrerelease.

Install-Module -Name PowerShellGet -Force

  • Убедитесь, что кластер подключен, с помощью команды Connect-SFCluster, прежде чем выполнять какой-либо запрос конфигурации с помощью модуля Microsoft.ServiceFabric.Powershell.Http.

    Connect-SFCluster -ConnectionEndpoint 'https://mysfcluster.southcentralus.cloudapp.azure.com:19080'   -X509Credential -FindType FindByThumbprint -FindValue '1b7ebe2174649c45474a4819dafae956712c31d3' -StoreLocation 'CurrentUser' -StoreName 'My' -ServerCertThumbprint '1b7ebe2174649c45474a4819dafae956712c31d3'

Включение резервного копирования и восстановления службы

Используя портал Azure

Установите флажок Include backup restore service в разделе + Show optional settings на вкладке Cluster Configuration.

Включение службы восстановления резервных копий с помощью портала

Использование шаблона Azure Resource Manager

Сначала необходимо включить службу резервного копирования и восстановления в кластере. Получите шаблон для кластера, который требуется развернуть. Вы можете использовать примеры шаблонов или создать шаблон Resource Manager. Включите службу резервного копирования и восстановления следующим образом:

  1. Убедитесь, что версия apiversion ресурса Microsoft.ServiceFabric/clusters имеет значение 2018-02-01. А если не имеет, то обновите ее, как показано во фрагменте ниже.

    {
        "apiVersion": "2018-02-01",
        "type": "Microsoft.ServiceFabric/clusters",
        "name": "[parameters('clusterName')]",
        "location": "[parameters('clusterLocation')]",
        ...
    }
    
  2. Включите службу резервного копирования и восстановления , добавив следующий раздел addonFeatures после раздела properties, как показано во фрагменте кода ниже:

        "properties": {
            ...
            "addonFeatures": ["BackupRestoreService"],
            "fabricSettings": [ ... ]
            ...
        }
    
    
  3. Настройте сертификат X.509 для шифрования учетных данных. Это необходимо, чтобы перед сохранением зашифровать учетные данные, предоставленные для подключения к хранилищу. Настройте сертификат шифрования, добавив следующий раздел BackupRestoreService после раздела fabricSettings, как показано во фрагменте кода ниже:

    "properties": {
        ...
        "addonFeatures": ["BackupRestoreService"],
        "fabricSettings": [
        {
            "name": "BackupRestoreService",
            "parameters": [
                {
                    "name": "SecretEncryptionCertThumbprint",
                    "value": "[Thumbprint]"
                },
                {
                    "name": "SecretEncryptionCertX509StoreName",
                    "value": "My"
                }
            ]
        }]
        ...
    }
    

    Примечание.

    [Отпечаток] необходимо заменить допустимым отпечатком сертификата, который будет использоваться для шифрования.

  4. После обновления шаблона кластера примените указанные выше изменения и дождитесь завершения развертывания или обновления. По завершении служба резервного копирования и восстановления запустится в кластере. Uri этой службы — fabric:/System/BackupRestoreService. Она может быть расположена в разделе системных служб в обозревателе Service Fabric.

Включение периодического резервного копирования для надежной службы с отслеживанием состояния и Reliable Actors

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

  • Кластер настраивается с помощью безопасности X.509 с службой резервного копирования и восстановления.
  • Надежная служба с отслеживанием состояния развернута в кластере. В этом кратком руководстве описано fabric:/SampleApp , как использовать универсальный код ресурса (URI) приложения и URI для службы Reliable Stateful, принадлежащей этому приложению fabric:/SampleApp/MyStatefulService. Эта служба развертывается с одним разделом и идентификатором 974bd92a-b395-4631-8a7f-53bd4ae9cf22секции.
  • Сертификат клиента с ролью администратора устанавливается в My (Personal) имени хранилища сертификатов CurrentUser на компьютере, откуда будут вызываться сценарии. В этом примере в качестве отпечатка этого сертификата используется 1b7ebe2174649c45474a4819dafae956712c31d3. Дополнительные сведения о сертификатах клиента см. в статье Контроль доступа на основе ролей для клиентов Service Fabric.

Создание политики архивации

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

В качестве хранилища резервных копий используйте созданную ранее учетную запись хранения Azure. Контейнер backup-container настроен для хранения резервных копий. Контейнер с этим именем создается, если он еще не существует во время отправки резервных копий. BlobServiceUri Заполните URL-адрес учетной записи служба хранилища Azure, заменив account-name имя учетной записи хранения и заполните необязательный параметр ManagedIdentityClientId идентификатором управляемого удостоверения, назначаемого пользователем, если для ресурса назначено несколько управляемых удостоверений.

Выполните действия по назначению управляемых удостоверений в ресурсе Azure:

  1. Включение управляемого удостоверения, назначаемого системой или назначаемого пользователем, в Масштабируемые наборы виртуальных машин Настройка управляемых удостоверений в масштабируемом наборе виртуальных машин

  2. Назначение роли управляемому удостоверению Масштабируемые наборы виртуальных машин учетной записи хранения назначение ролей Azure с помощью портал Azure — Azure RBAC

    1. Роль участника данных BLOB-объектов хранилища как минимум

Дополнительные сведения об управляемом удостоверении

Использование PowerShell посредством модуля Microsoft.ServiceFabric.Powershell.Http

Выполните следующие командлеты PowerShell для создания новой политики резервного копирования. Замените account-name имя учетной записи хранения.


    New-SFBackupPolicy -Name 'BackupPolicy1' -AutoRestoreOnDataLoss $false -MaxIncrementalBackups 20 -FrequencyBased -Interval "<hh:mm>" -ManagedIdentityAzureBlobStore -FriendlyName "AzureMI_storagesample" -BlobServiceUri 'https://<account-name>.blob.core.windows.net' -ContainerName 'backup-container' -ManagedIdentityType "VMSS" -ManagedIdentityClientId "<Client-Id of User-Assigned MI>" -Basic -RetentionDuration '10.00:00:00'

    # Use Optional parameter `ManagedIdentityClientId` with Client-Id of User-Assigned Managed Identity in case of multiple User-Assigned Managed Identities assigned to your resource, or both SAMI & UAMI assigned and we need to use UAMI as the default, else no need of this paramter.

Вызов интерфейса REST с помощью PowerShell

Выполните следующий скрипт PowerShell для вызова необходимого REST API для создания новой политики. Замените account-name имя учетной записи хранения.

$StorageInfo = @{
    StorageKind = "ManagedIdentityAzureBlobStore"
    FriendlyName = "AzureMI_storagesample"
    BlobServiceUri = "https://<account-name>.blob.core.windows.net"
    ContainerName = "backup-container"
    ManagedIdentityType = "VMSS"
    ManagedIdentityClientId = "<Client-Id of User-Assigned MI>" # Use Optional parameter `ManagedIdentityClientId` with Client-Id of User-Assigned Managed Identity in case of multiple User-Assigned Managed Identities assigned to your resource, or both SAMI & UAMI assigned and we need to use UAMI as the default, else no need of this paramter.
}

$ScheduleInfo = @{
    Interval = 'PT15M'
    ScheduleKind = 'FrequencyBased'
}

$RetentionPolicy = @{
    RetentionPolicyType = 'Basic'
    RetentionDuration = 'P10D'
}

$BackupPolicy = @{
    Name = 'BackupPolicy1'
    MaxIncrementalBackups = 20
    Schedule = $ScheduleInfo
    Storage = $StorageInfo
    RetentionPolicy = $RetentionPolicy
}

$body = (ConvertTo-Json $BackupPolicy)
$url = "https://mysfcluster.southcentralus.cloudapp.azure.com:19080/BackupRestore/BackupPolicies/$/Create?api-version=6.4"

Invoke-WebRequest -Uri $url -Method Post -Body $body -ContentType 'application/json' -CertificateThumbprint '1b7ebe2174649c45474a4819dafae956712c31d3'

Использование Service Fabric Explorer

  1. В Service Fabric Explorer щелкните кластер на левой панели, перейдите на вкладку "Резервные копии" и выберите "Действия > создания политики резервного копирования".

    Создать политику архивации

  2. Введите запрашиваемые сведения. Дополнительные сведения о том, как указать интервал на основе частоты, см. в свойстве TimeGrain. Для кластеров Azure следует выбрать ManagedIdentityAzureBlobStore.

    Создание управляемого удостоверения политики резервного копирования Хранилище BLOB-объектов Azure

Включение периодического резервного копирования

После определения политики архивации для соответствия требованиям защиты данных приложения необходимо связать ее с приложением. В зависимости от требования политика резервного копирования может быть связана с приложением, службой или секцией.

Использование PowerShell посредством модуля Microsoft.ServiceFabric.Powershell.Http


    Enable-SFApplicationBackup -ApplicationId 'SampleApp' -BackupPolicyName 'BackupPolicy1'

Вызов интерфейса REST с помощью PowerShell

Выполните следующий скрипт PowerShell для вызова необходимого REST API для связывания политики резервного копирования с именем BackupPolicy1 , созданным на предыдущем шаге с приложением SampleApp.

$BackupPolicyReference = @{
    BackupPolicyName = 'BackupPolicy1'
}

$body = (ConvertTo-Json $BackupPolicyReference)
$url = "https://mysfcluster.southcentralus.cloudapp.azure.com:19080/Applications/SampleApp/$/EnableBackup?api-version=6.4"

Invoke-WebRequest -Uri $url -Method Post -Body $body -ContentType 'application/json' -CertificateThumbprint '1b7ebe2174649c45474a4819dafae956712c31d3'

Использование Service Fabric Explorer

Убедитесь, что служба BackupRestoreService включена в кластере.

  1. Откройте Service Fabric Explorer.

  2. Выберите приложение и перейдите в раздел "Резервное копирование". Щелкните действие резервного копирования.

  3. Щелкните "Enable/Update Application Backup" (Включить или обновить резервное копирование приложения).

    Включение резервного копирования приложения

  4. Наконец, выберите соответствующую политику и щелкните "Включить архивацию".

    Выбор политики

Проверка работоспособности периодического резервного копирования

После включения резервного копирования на уровне приложения все секции, принадлежащие надежным службам с отслеживанием состояния и службами Reliable Actors в рамках приложения, будут периодически получать резервные копии согласно соответствующей политике архивации.

Событие работоспособности резервных копий секции

Перечисление резервных копий

Резервные копии, связанные со всеми секциями, принадлежащими надежным службам с отслеживанием состояния и службам Reliable Actors приложения, можно перечислить с помощью API GetBackups. Резервные копии могут быть перечислены для приложения, службы или секции.

Использование PowerShell посредством модуля Microsoft.ServiceFabric.Powershell.Http


Get-SFApplicationBackupList -ApplicationId WordCount

Вызов интерфейса REST с помощью PowerShell

Выполните следующий скрипт PowerShell, чтобы вызвать HTTP-API для перечисления резервных копий, созданных для всех секций внутри SampleApp приложения.

$url = "https://mysfcluster.southcentralus.cloudapp.azure.com:19080/Applications/SampleApp/$/GetBackups?api-version=6.4"

$response = Invoke-WebRequest -Uri $url -Method Get -CertificateThumbprint '1b7ebe2174649c45474a4819dafae956712c31d3'

$BackupPoints = (ConvertFrom-Json $response.Content)
$BackupPoints.Items

Пример выходных данных описанного выше процесса.

BackupId                : b9577400-1131-4f88-b309-2bb1e943322c
BackupChainId           : b9577400-1131-4f88-b309-2bb1e943322c
ApplicationName         : fabric:/SampleApp
ServiceName             : fabric:/SampleApp/MyStatefulService
PartitionInformation    : @{LowKey=-9223372036854775808; HighKey=9223372036854775807; ServicePartitionKind=Int64Range; Id=974bd92a-b395-4631-8a7f-53bd4ae9cf22}
BackupLocation          : SampleApp\MyStatefulService\974bd92a-b395-4631-8a7f-53bd4ae9cf22\2018-04-06 20.55.16.zip
BackupType              : Full
EpochOfLastBackupRecord : @{DataLossNumber=131675205859825409; ConfigurationNumber=8589934592}
LsnOfLastBackupRecord   : 3334
CreationTimeUtc         : 2018-04-06T20:55:16Z
FailureError            :

BackupId                : b0035075-b327-41a5-a58f-3ea94b68faa4
BackupChainId           : b9577400-1131-4f88-b309-2bb1e943322c
ApplicationName         : fabric:/SampleApp
ServiceName             : fabric:/SampleApp/MyStatefulService
PartitionInformation    : @{LowKey=-9223372036854775808; HighKey=9223372036854775807; ServicePartitionKind=Int64Range; Id=974bd92a-b395-4631-8a7f-53bd4ae9cf22}
BackupLocation          : SampleApp\MyStatefulService\974bd92a-b395-4631-8a7f-53bd4ae9cf22\2018-04-06 21.10.27.zip
BackupType              : Incremental
EpochOfLastBackupRecord : @{DataLossNumber=131675205859825409; ConfigurationNumber=8589934592}
LsnOfLastBackupRecord   : 3552
CreationTimeUtc         : 2018-04-06T21:10:27Z
FailureError            :

BackupId                : 69436834-c810-4163-9386-a7a800f78359
BackupChainId           : b9577400-1131-4f88-b309-2bb1e943322c
ApplicationName         : fabric:/SampleApp
ServiceName             : fabric:/SampleApp/MyStatefulService
PartitionInformation    : @{LowKey=-9223372036854775808; HighKey=9223372036854775807; ServicePartitionKind=Int64Range; Id=974bd92a-b395-4631-8a7f-53bd4ae9cf22}
BackupLocation          : SampleApp\MyStatefulService\974bd92a-b395-4631-8a7f-53bd4ae9cf22\2018-04-06 21.25.36.zip
BackupType              : Incremental
EpochOfLastBackupRecord : @{DataLossNumber=131675205859825409; ConfigurationNumber=8589934592}
LsnOfLastBackupRecord   : 3764
CreationTimeUtc         : 2018-04-06T21:25:36Z
FailureError            :

Использование Service Fabric Explorer

Чтобы просмотреть резервные копии в Service Fabric Explorer, перейдите к секции и выберите вкладку "Резервные копии".

Перечисление резервных копий

Ограничения и предупреждения

  • Командлеты PowerShell для Service Fabric находятся на этапе предварительной версии.
  • Отсутствие поддержки кластеров Service Fabric в Linux.

Следующие шаги