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

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

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

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

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

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

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

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

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

Предварительные требования

  • Кластер Service Fabric с платформой Fabric 6.4 или более поздней версии. См. дополнительные сведения о скачивании требуемого пакета.

  • Сертификат X.509 для шифрования секретов, необходимых для подключения к хранилищу резервных копий. Ознакомьтесь со статьей о том, как получить или создать самозаверяющий сертификат X.509.

  • Надежное приложения Service Fabric с отслеживанием состояния, созданное с помощью пакета SDK Service Fabric версии 3.0 или выше. Приложения, нацеленные на .NET Core 2.0, должны быть созданы с помощью пакета SDK для Service Fabric 3.1 или более поздней версии.

  • Установите модуль 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'  

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

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

  1. Убедитесь, что для apiversion задано значение 10-2017 в файле конфигурации кластера. В противном случае обновите его, как показано во фрагменте кода ниже.

    {
        "apiVersion": "10-2017",
        "name": "SampleCluster",
        "clusterConfigurationVersion": "1.0.0",
        ...
    }
    
  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. Предполагается следующее:

  • Кластер настроен для службы резервного копирования и восстановления.
  • Надежная служба с отслеживанием состояния развернута в кластере. В этом кратком руководстве Uri приложения — fabric:/SampleApp, а Uri службы с отслеживанием состояния, относящейся к этому приложению, — fabric:/SampleApp/MyStatefulService. Эта служба развертывается с одним разделом с идентификатором 23aebc1e-e9ea-4e16-9d5c-e91a614fefa7.

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

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

Для хранилища резервных копий создайте общий файловый ресурс и предоставьте ему права ReadWrite для всех компьютеров узла Service Fabric. Пример предполагает наличие папки с именем BackupStore, размещенной на StorageServer.

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


New-SFBackupPolicy -Name 'BackupPolicy1' -AutoRestoreOnDataLoss $true -MaxIncrementalBackups 20 -FrequencyBased -Interval 00:15:00 -FileShare -Path '\\StorageServer\BackupStore' -Basic -RetentionDuration '10.00:00:00'

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

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

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

$StorageInfo = @{
    Path = '\\StorageServer\BackupStore'
    StorageKind = 'FileShare'
}

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

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

$body = (ConvertTo-Json $BackupPolicy)
$url = "http://localhost:19080/BackupRestore/BackupPolicies/$/Create?api-version=6.4"

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

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

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

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

  2. Введите запрашиваемые сведения. Для изолированных кластеров следует выбрать тип FileShare.

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

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

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

Использование 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 = "http://localhost:19080/Applications/SampleApp/$/EnableBackup?api-version=6.4"

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

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

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

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

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

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

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

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

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

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

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

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

    Get-SFApplicationBackupList -ApplicationId WordCount     

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

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

$url = "http://localhost:19080/Applications/SampleApp/$/GetBackups?api-version=6.4"

$response = Invoke-WebRequest -Uri $url -Method Get

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

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

BackupId                : d7e4038e-2c46-47c6-9549-10698766e714
BackupChainId           : d7e4038e-2c46-47c6-9549-10698766e714
ApplicationName         : fabric:/SampleApp
ServiceName             : fabric:/SampleApp/MyStatefulService
PartitionInformation    : @{LowKey=-9223372036854775808; HighKey=9223372036854775807; ServicePartitionKind=Int64Range; Id=23aebc1e-e9ea-4e16-9d5c-e91a614fefa7}
BackupLocation          : SampleApp\MyStatefulService\23aebc1e-e9ea-4e16-9d5c-e91a614fefa7\2018-04-01 19.39.40.zip
BackupType              : Full
EpochOfLastBackupRecord : @{DataLossNumber=131670844862460432; ConfigurationNumber=8589934592}
LsnOfLastBackupRecord   : 2058
CreationTimeUtc         : 2018-04-01T19:39:40Z
FailureError            : 

BackupId                : 8c21398a-2141-4133-b4d7-e1a35f0d7aac
BackupChainId           : d7e4038e-2c46-47c6-9549-10698766e714
ApplicationName         : fabric:/SampleApp
ServiceName             : fabric:/SampleApp/MyStatefulService
PartitionInformation    : @{LowKey=-9223372036854775808; HighKey=9223372036854775807; ServicePartitionKind=Int64Range; Id=23aebc1e-e9ea-4e16-9d5c-e91a614fefa7}
BackupLocation          : SampleApp\MyStatefulService\23aebc1e-e9ea-4e16-9d5c-e91a614fefa7\2018-04-01 19.54.38.zip
BackupType              : Incremental
EpochOfLastBackupRecord : @{DataLossNumber=131670844862460432; ConfigurationNumber=8589934592}
LsnOfLastBackupRecord   : 2237
CreationTimeUtc         : 2018-04-01T19:54:38Z
FailureError            : 

BackupId                : fc75bd4c-798c-4c9a-beee-e725321f73b2
BackupChainId           : d7e4038e-2c46-47c6-9549-10698766e714
ApplicationName         : fabric:/SampleApp
ServiceName             : fabric:/SampleApp/MyStatefulService
PartitionInformation    : @{LowKey=-9223372036854775808; HighKey=9223372036854775807; ServicePartitionKind=Int64Range; Id=23aebc1e-e9ea-4e16-9d5c-e91a614fefa7}
BackupLocation          : SampleApp\MyStatefulService\23aebc1e-e9ea-4e16-9d5c-e91a614fefa7\2018-04-01 20.09.44.zip
BackupType              : Incremental
EpochOfLastBackupRecord : @{DataLossNumber=131670844862460432; ConfigurationNumber=8589934592}
LsnOfLastBackupRecord   : 2437
CreationTimeUtc         : 2018-04-01T20:09:44Z
FailureError            : 

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

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

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

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

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

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