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


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

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

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

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

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

Service Fabric предоставляет встроенный API для выполнения резервного копирования и восстановления на определенный момент времени. Разработчики приложений могут использовать эти API для периодического резервного копирования состояния службы. Кроме того, если администраторы службы хотят инициировать резервное копирование извне сервиса в определенное время, например, перед обновлением приложения, разработчикам необходимо реализовать доступ к функциям резервного копирования и восстановления в виде API из сервиса. Сохранение резервных копий является дополнительной стоимостью выше этого. Например, вам может потребоваться выполнить пять добавочных резервных копий каждые полчаса, за которым следует полная резервная копия. После полной резервной копии можно удалить предыдущие добавочные резервные копии. Этот подход требует дополнительного кода, что приводит к дополнительным затратам во время разработки приложений.

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

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

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

Предпосылки

  • Кластер Service Fabric с версией 6.4 или более поздней. Сведения о создании кластера Service Fabric с помощью шаблона ресурсов Azure см. в этой статье .
  • Сертификат X.509 для шифрования секретов, необходимых для подключения к хранилищу для хранения резервных копий. Ознакомьтесь со статьей, чтобы узнать, как получить или создать сертификат X.509.
  • Приложение Service Fabric Reliable Stateful, созданное с помощью пакета 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, находящийся в Cluster Configuration вкладке под + Show optional settings.

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

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

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

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

    {
        "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 Stateful и надежных акторов

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

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

Создание политики резервного копирования

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

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

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

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

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

    • Роль участника учетной записи хранения, роль участника данных 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.

    Создание политики резервного копирования с управляемым удостоверением для хранилища блоб-объектов 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. Нажмите кнопку "Включить и обновить резервное копирование приложений".

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

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

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

Убедитесь, что периодические резервные копии работают

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

Событие работоспособности

Вывод списка резервных копий

Резервные копии, связанные со всеми секциями, принадлежащими службам Reliable Stateful services и 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 не поддерживается.

Дальнейшие шаги