Периодическое резервное копирование и восстановление в автономной Service FabricPeriodic backup and restore in a standalone Service Fabric

Service Fabric — это платформа распределенных систем, которая упрощает разработку надежных, распределенных облачных приложений на основе микрослужб и управление ими.Service Fabric is a distributed systems platform that makes it easy to develop and manage reliable, distributed, microservices-based cloud applications. Она позволяет запускать микрослужбы с отслеживанием и без отслеживания состояния.It allows running of both stateless and stateful micro services. Службы с отслеживанием состояния могут поддерживать изменчивое, авторитетное состояние за пределами запроса и ответа или полной транзакции.Stateful services can maintain mutable, authoritative state beyond the request and response or a complete transaction. Если служба с отслеживанием состояния перестает работать в течение длительного времени или теряет информацию из-за аварии, может потребоваться восстановление до последней резервной копии состояния, чтобы продолжить предоставление службы после резервного копирования.If a Stateful service goes down for a long time or loses information because of a disaster, it may need to be restored to some recent backup of its state in order to continue providing service after it comes back up.

Service Fabric реплицирует состояние на нескольких узлах, обеспечивая высокую доступность службы.Service Fabric replicates the state across multiple nodes to ensure that the service is highly available. Даже в случае сбоя одного узла в кластере служба будет оставаться доступной.Even if one node in the cluster fails, the service continues to be available. Однако в некоторых случаях все же желательно обеспечить устойчивость данных службы к более масштабным сбоям.In certain cases, however, it is still desirable for the service data to be reliable against broader failures.

Например, службе может потребоваться создать резервную копию своих данных, чтобы защититься от следующих сценариев:For example, a service may need to back up its data in order to protect from the following scenarios:

  • Полная потеря всего кластера Service Fabric.Permanent loss of an entire Service Fabric cluster.
  • Полной потери большей части реплик секций служб.Permanent loss of a majority of the replicas of a service partition
  • Если из-за административных ошибок произошло случайное удаление или повреждение состояния.Administrative errors whereby the state accidentally gets deleted or corrupted. Например, администратор с достаточными привилегиями ошибочно удалил службу.For example, an administrator with sufficient privilege erroneously deletes the service.
  • Если из-за ошибок в службе происходит повреждение данных.Bugs in the service that cause data corruption. Например, это может произойти, если при обновлении кода службы начинается запись поврежденных данных в надежную коллекцию.For example, this may happen when a service code upgrade starts writing faulty data to a Reliable Collection. В этом случае может потребоваться вернуть код и данные в предыдущее состояние.In such a case, both the code and the data may have to be reverted to an earlier state.
  • При автономной обработке данных.Offline data processing. Автономная обработка данных для бизнес-аналитики, которая происходит отдельно от службы, создающей данные, может быть очень удобной.It might be convenient to have offline processing of data for business intelligence that happens separately from the service that generates the data.

Service Fabric предоставляет встроенный API для резервного копирования и восстановленияна момент времени.Service Fabric provides a built-in API to do point in time backup and restore. Разработчики приложений могут использовать эти API для периодического резервного копирования состояния службы.Application developers may use these APIs to back up the state of the service periodically. Кроме того, если администраторы служб хотят активировать резервное копирование извне службы в определенное время (например, перед обновлением приложения), разработчики должны предоставить резервное копирование (и восстановление) в качестве API-интерфейса службы.Additionally, if service administrators want to trigger a backup from outside of the service at a specific time (such as before upgrading the application), developers need to expose backup (and restore) as an API from the service. Поддержка резервных копий влечет за собой дополнительные расходы.Maintaining the backups is an additional cost above this. Например, вы можете создать пять добавочных резервных копий с интервалом в полчаса, а затем — полную резервную копию.For example, you may want to take five incremental backups every half hour, followed by a full backup. После создания полной резервной копии можно удалить предыдущие добавочные резервные копии.After the full backup, you can delete the prior incremental backups. Такой подход требует написания дополнительного кода, что приводит к дополнительным затратам при разработке приложений.This approach requires additional code leading to additional cost during application development.

Периодическое резервное копирование данных приложения является основной потребностью для обеспечения процесса управления распределенным приложением и его защиты от потери данных либо длительной недоступности службы.Backup of the application data on a periodic basis is a basic need for managing a distributed application and guarding against loss of data or prolonged loss of service availability. Service Fabric предоставляет дополнительную службу резервного копирования и восстановления, которая позволяет настраивать периодическое резервное копирование надежных служб с отслеживанием состояния (включая службы субъекта) без необходимости написания дополнительного кода.Service Fabric provides an optional backup and restore service, which allows you to configure periodic backup of stateful Reliable Services (including Actor Services) without having to write any additional code. Она также упрощает восстановление ранее сделанных резервных копий.It also facilitates restoring previously taken backups.

Service Fabric предоставляет набор API для использования функций, связанных с возможностью периодического резервного копирования и восстановления.Service Fabric provides a set of APIs to achieve the following functionality related to periodic backup and restore feature:

  • Планирование периодического резервного копирования надежных служб с отслеживанием состояния и Reliable Actors с поддержкой передачи резервных копий во внешние места хранения.Schedule periodic backup of Reliable Stateful services and Reliable Actors with support to upload backup to (external) storage locations. Поддерживаемые места храненияSupported storage locations
    • Хранилище AzureAzure Storage
    • Файловый ресурс (в локальной среде)File Share (on-premises)
  • Перечисление резервных копий.Enumerate backups
  • Активация незапланированного резервного копирования секцииTrigger an unplanned backup of a partition
  • Восстановление секции с помощью предыдущей резервной копии.Restore a partition using previous backup
  • Временная остановка резервного копирования.Temporarily suspend backups
  • Управление хранением резервных копий (предстоящих).Retention management of backups (upcoming)

Предварительные условияPrerequisites

  • Service Fabric кластер с структурой версии 6,4 или более поздней.Service Fabric cluster with Fabric version 6.4 or later. См. дополнительные сведения о скачивании требуемого пакета.Refer to this article for steps to download required package.

  • Сертификат X.509 для шифрования секретов, необходимых для подключения к хранилищу резервных копий.X.509 Certificate for encryption of secrets needed to connect to storage to store backups. Ознакомьтесь со статьей о том, как получить или создать самозаверяющий сертификат X.509.Refer article to know how to acquire or to Create a self-signed X.509 certificate.

  • Надежное приложения Service Fabric с отслеживанием состояния, созданное с помощью пакета SDK Service Fabric версии 3.0 или выше.Service Fabric Reliable Stateful application built using Service Fabric SDK version 3.0 or above. Для приложений, предназначенных для .NET Core 2,0, приложение должно быть создано с помощью Service Fabric пакета SDK версии 3,1 или более поздней.For applications targeting .NET Core 2.0, application should be built using Service Fabric SDK version 3.1 or later.

  • Установите модуль Microsoft. ServiceFabric. PowerShell. HTTP (Предварительная версия) для выполнения вызовов конфигурации.Install Microsoft.ServiceFabric.PowerShell.Http Module (Preview) for making configuration calls.

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

Примечание

Если версия PowerShellGet меньше 1.6.0, необходимо обновить, чтобы добавить поддержку флага -AllowPrerelease :If your PowerShellGet version is less than 1.6.0, you'll need to update to add support for the -AllowPrerelease flag:

Install-Module -Name PowerShellGet -Force

  • Убедитесь, что кластер подключен с помощью Connect-SFCluster команды перед выполнением любого запроса конфигурации с помощью модуля Microsoft. ServiceFabric. PowerShell. http.Make sure that Cluster is connected using the Connect-SFCluster command before making any configuration request using Microsoft.ServiceFabric.PowerShell.Http Module.

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

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

Сначала необходимо включить службу резервного копирования и восстановления в кластере.First you need to enable the backup and restore service in your cluster. Получите шаблон для кластера, который требуется развернуть.Get the template for the cluster that you want to deploy. Вы можете использовать примеры шаблонов.You can use the sample templates. Включите службу резервного копирования и восстановления следующим образом:Enable the backup and restore service with the following steps:

  1. Убедитесь, что для apiversion задано значение 10-2017 в файле конфигурации кластера. В противном случае обновите его, как показано во фрагменте кода ниже.Check that the apiversion is set to 10-2017 in the cluster configuration file, and if not, update it as shown in the following snippet:

    {
        "apiVersion": "10-2017",
        "name": "SampleCluster",
        "clusterConfigurationVersion": "1.0.0",
        ...
    }
    
  2. Включите службу резервного копирования и восстановления, добавив следующий раздел addonFeatures после раздела properties, как показано во фрагменте кода ниже:Now enable the backup and restore service by adding the following addonFeatures section under properties section as shown in the following snippet:

        "properties": {
            ...
            "addonFeatures": ["BackupRestoreService"],
            "fabricSettings": [ ... ]
            ...
        }
    
    
  3. Настройте сертификат X.509 для шифрования учетных данных.Configure X.509 certificate for encryption of credentials. Это необходимо, чтобы перед сохранением зашифровать учетные данные (если они имеются), предоставленные для подключения к хранилищу.This is important to ensure that the credentials provided, if any, to connect to storage are encrypted before persisting. Настройте сертификат шифрования, добавив следующий раздел BackupRestoreService после раздела fabricSettings, как показано во фрагменте кода ниже:Configure encryption certificate by adding the following BackupRestoreService section under fabricSettings section as shown in the following snippet:

    "properties": {
        ...
        "addonFeatures": ["BackupRestoreService"],
        "fabricSettings": [{
            "name": "BackupRestoreService",
            "parameters":  [{
                "name": "SecretEncryptionCertThumbprint",
                "value": "[Thumbprint]"
            },
            {
                "name": "SecretEncryptionCertX509StoreName",
                "value": "My"
            }]
        }
        ...
    }
    
  4. После обновления файла конфигурации кластера с учетом предыдущих изменений примените их и разрешите развертывание или обновление завершено.After you have updated your cluster configuration file with the preceding changes, apply them and let the deployment/upgrade complete. По завершении служба резервного копирования и восстановления запустится в кластере.Once complete, the backup and restore service starts running in your cluster. Uri этой службы — fabric:/System/BackupRestoreService. Она может быть расположена в разделе системных служб в обозревателе Service Fabric.The Uri of this service is fabric:/System/BackupRestoreService and the service can be located under system service section in the Service Fabric explorer.

Включение периодического резервного копирования для надежной службы с отслеживанием состояния и Reliable ActorsEnabling periodic backup for Reliable Stateful service and Reliable Actors

Давайте рассмотрим шаги ниже, чтобы включить периодическое резервное копирование для надежной службы с отслеживанием состояния, а также службы Reliable Actors.Let's walk through steps to enable periodic backup for Reliable Stateful service and Reliable Actors. Предполагается следующее:These steps assume

  • В кластере настроены service_ резервного копирования и восстановления.The cluster is configured with backup and restore service_.
  • Надежная служба с отслеживанием состояния развернута в кластере.A Reliable Stateful service is deployed on the cluster. В этом кратком руководстве Uri приложения — fabric:/SampleApp, а Uri службы с отслеживанием состояния, относящейся к этому приложению, — fabric:/SampleApp/MyStatefulService.For the purpose of this quickstart guide, application Uri is fabric:/SampleApp and the Uri for Reliable Stateful service belonging to this application is fabric:/SampleApp/MyStatefulService. Эта служба развертывается с одним разделом с идентификатором 23aebc1e-e9ea-4e16-9d5c-e91a614fefa7.This service is deployed with single partition, and the partition ID is 23aebc1e-e9ea-4e16-9d5c-e91a614fefa7.

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

Первым шагом является создание политики резервного копирования. Она определяет расписание резервного копирования, целевое хранилище для данных резервного копирования, имя политики и максимальное число добавочных резервных копий, которые необходимо разрешить до запуска полного резервного копирования, а также политику хранения для хранилища резервных копий.First step is to create backup policy describing backup schedule, target storage for backup data, policy name, maximum incremental backups to be allowed before triggering full backup and retention policy for backup storage.

Для хранилища резервных копий создайте общий файловый ресурс и предоставьте ему права ReadWrite для всех компьютеров узла Service Fabric.For backup storage, create file share and give ReadWrite access to this file share for all Service Fabric Node machines. Пример предполагает наличие папки с именем BackupStore, размещенной на StorageServer.This example assumes the share with name BackupStore is present on StorageServer.

PowerShell с использованием модуля Microsoft. ServiceFabric. PowerShell. httpPowerShell using Microsoft.ServiceFabric.PowerShell.Http Module


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

Вызов функции RESTful с помощью PowerShellRest Call using PowerShell

Выполните следующий сценарий PowerShell, чтобы вызвать требуемый REST API для создания политики.Execute following PowerShell script for invoking required REST API to create new policy.

$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 ExplorerUsing Service Fabric Explorer

  1. В Service Fabric Explorer перейдите на вкладку резервные копии и выберите действия > создать политику архивации.In Service Fabric Explorer, navigate to the Backups tab and select Actions > Create Backup Policy.

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

  2. Заполните информацию.Fill out the information. Для автономных кластеров следует выбрать общую папку.For standalone clusters, FileShare should be selected.

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

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

После определения политики резервного копирования, соответствующей требованиям защиты данных приложения, необходимо связать ее с приложением.After defining policy to fulfill data protection requirements of the application, the backup policy should be associated with the application. В зависимости от требований политику резервного копирования можно связать с приложением, службой или секцией.Depending on requirement, the backup policy can be associated with an application, service, or a partition.

PowerShell с использованием модуля Microsoft. ServiceFabric. PowerShell. httpPowerShell using Microsoft.ServiceFabric.PowerShell.Http Module

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

Вызов функции RESTful с помощью PowerShellRest Call using PowerShell

Выполните следующий сценарий PowerShell для вызова необходимого REST API, чтобы связать политику резервного копирования BackupPolicy1, созданную на предыдущем шаге, с приложением SampleApp.Execute following PowerShell script for invoking required REST API to associate backup policy with name BackupPolicy1 created in above step with application 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 ExplorerUsing Service Fabric Explorer

  1. Выберите приложение и перейдите к действию.Select an application and go to action. Щелкните Включить/обновить резервную копию приложения.Click Enable/Update Application Backup.

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

  2. Наконец, выберите нужную политику и щелкните включить резервное копирование.Finally, select the desired policy and select Enable Backup.

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

Проверка работоспособности периодического резервного копированияVerify that periodic backups are working

После включения резервного копирования на уровне приложения все секции, относящиеся к надежным службам с отслеживанием состояния, а также службам Reliable Actors в рамках приложения, будут периодически получать резервные копии согласно соответствующей политике архивации.After enabling backup for the application, all partitions belonging to Reliable Stateful services and Reliable Actors under the application will start getting backed-up periodically as per the associated backup policy.

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

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

Резервные копии, связанные со всеми секциями, принадлежащими надежным службам с отслеживанием состояния и службам Reliable Actors приложения, можно перечислить с помощью API GetBackups.Backups associated with all partitions belonging to Reliable Stateful services and Reliable Actors of the application can be enumerated using GetBackups API. В зависимости от требований резервные копии можно перечислить для приложения, службы или секции.Depending on requirement, the backups can be enumerated for application, service, or a partition.

PowerShell с использованием модуля Microsoft. ServiceFabric. PowerShell. httpPowerShell using Microsoft.ServiceFabric.PowerShell.Http Module

    Get-SFApplicationBackupList -ApplicationId WordCount     

Вызов функции RESTful с помощью PowerShellRest Call using PowerShell

Выполните следующий сценарий PowerShell, чтобы вызвать API HTTP для перечисления резервных копий, созданных для всех секций внутри приложения SampleApp.Execute following PowerShell script to invoke the HTTP API to enumerate the backups created for all partitions inside the SampleApp application.

$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

Пример выходных данных описанного выше процесса.Sample output for the above run:

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 ExplorerUsing Service Fabric Explorer

Чтобы просмотреть резервные копии в Service Fabric Explorer, перейдите к разделу и выберите вкладку резервные копии.To view backups in Service Fabric Explorer, navigate to a partition and select the Backups tab.

Перечислить резервные копии

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

  • Командлеты PowerShell Service Fabric находятся в режиме предварительного просмотра.Service Fabric PowerShell cmdlets are in preview mode.
  • Отсутствие поддержки кластеров Service Fabric в Linux.No support for Service Fabric clusters on Linux.

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