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

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

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

В качестве хранилища резервных копий используйте созданную ранее учетную запись хранения Azure. Контейнер backup-container настроен для хранения резервных копий. Если контейнер с таким именем не существует, он создается во время отправки резервных копий. Укажите в параметре ConnectionString действительную строку подключения к учетной записи хранения Azure. Вместо account-name укажите имя учетной записи хранения, а вместо account-key — ее ключ.

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

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


New-SFBackupPolicy -Name 'BackupPolicy1' -AutoRestoreOnDataLoss $true -MaxIncrementalBackups 20 -FrequencyBased -Interval 00:15:00 -AzureBlobStore -ConnectionString 'DefaultEndpointsProtocol=https;AccountName=<account-name>;AccountKey=<account-key>;EndpointSuffix=core.windows.net' -ContainerName 'backup-container' -Basic -RetentionDuration '10.00:00:00'

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

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

$StorageInfo = @{
    ConnectionString = 'DefaultEndpointsProtocol=https;AccountName=<account-name>;AccountKey=<account-key>;EndpointSuffix=core.windows.net'
    ContainerName = 'backup-container'
    StorageKind = 'AzureBlobStore'
}

$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 следует выбрать AzureBlobStore.

    Создание политики резервного копирования для Хранилища 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

Убедитесь, что для Service Fabric Explorer включен расширенный режим.

  1. Щелкните шестеренку в правом верхнем углу окна обозревателя SF.

  2. Установите флажок "Расширенный режим" и обновите страницу обозревателя SF.

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

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

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

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

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

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

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

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

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

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


Get-SFApplicationBackupList -ApplicationId WordCount

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

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

Дальнейшие действия