Периодическое резервное копирование и восстановление в изолированном кластере 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'
Включение резервного копирования и восстановления службы
Сначала необходимо включить службу резервного копирования и восстановления в кластере. Получите шаблон для кластера, который требуется развернуть. Вы можете использовать примеры шаблонов. Включите службу резервного копирования и восстановления следующим образом:
Убедитесь, что для
apiversion
задано значение10-2017
в файле конфигурации кластера. В противном случае обновите его, как показано во фрагменте кода ниже.{ "apiVersion": "10-2017", "name": "SampleCluster", "clusterConfigurationVersion": "1.0.0", ... }
Включите службу резервного копирования и восстановления , добавив следующий раздел
addonFeatures
после разделаproperties
, как показано во фрагменте кода ниже:"properties": { ... "addonFeatures": ["BackupRestoreService"], "fabricSettings": [ ... ] ... }
Настройте сертификат X.509 для шифрования учетных данных. Это необходимо, чтобы перед сохранением зашифровать учетные данные (если они имеются), предоставленные для подключения к хранилищу. Настройте сертификат шифрования, добавив следующий раздел
BackupRestoreService
после разделаfabricSettings
, как показано во фрагменте кода ниже:"properties": { ... "addonFeatures": ["BackupRestoreService"], "fabricSettings": [{ "name": "BackupRestoreService", "parameters": [ { "name": "SecretEncryptionCertThumbprint", "value": "[Thumbprint]" }, { "name": "SecretEncryptionCertX509StoreName", "value": "My" } ] }] ... }
Примечание.
[Отпечаток] необходимо заменить допустимым отпечатком сертификата, который будет использоваться для шифрования.
После обновления файла конфигурации кластера с указанными выше изменениями примените их и допустите развертывание или обновление. После завершения служба резервного копирования и восстановления выполняется в кластере. 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
В Service Fabric Explorer перейдите на вкладку "Резервные копии" и выберите "Действия" > "Создание политики резервного копирования".
Введите запрашиваемые сведения. Для изолированных кластеров следует выбрать тип 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
Убедитесь, что служба BackupRestoreService включена в кластере.
Откройте Service Fabric Explorer.
Выберите приложение и перейдите в раздел "Резервное копирование". Щелкните действие резервного копирования.
Щелкните "Enable/Update Application Backup" (Включить или обновить резервное копирование приложения).
Наконец, выберите соответствующую политику и щелкните Включить резервное копирование.
Проверка работоспособности периодического резервного копирования
После включения резервного копирования на уровне приложения все секции, относящиеся к надежным службам с отслеживанием состояния, а также службам Reliable Actors в рамках приложения, будут периодически получать резервные копии согласно соответствующей политике архивации.
Перечисление резервных копий
Резервные копии, связанные со всеми секциями, принадлежащими надежным службам с отслеживанием состояния и службам Reliable Actors приложения, можно перечислить с помощью API GetBackups. В зависимости от требования резервные копии можно перечислить для приложения, службы или секции.
Использование PowerShell с модулем Microsoft.ServiceFabric.PowerShell.Http
Get-SFApplicationBackupList -ApplicationId WordCount
Вызов интерфейса REST с помощью PowerShell
Выполните следующий скрипт PowerShell, чтобы вызвать HTTP-API для перечисления резервных копий, созданных для всех секций внутри 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.
Следующие шаги
- Основные сведения о настройке периодического резервного копирования
- Backup restore REST API reference (Справочник по REST API службы резервного копирования и восстановления)