Azure Service Fabric 클러스터에서 정기적인 백업 및 복원

Service Fabric은 신뢰할 수 있는 분산 클라우드 애플리케이션을 개발하고 관리하기 위한 플랫폼입니다. 상태 비저장 마이크로 서비스 및 상태 저장 마이크로 서비스를 모두 지원합니다. 상태 저장 서비스는 단일 요청이나 트랜잭션을 넘어서 중요한 데이터를 보관할 수 있습니다. 상태 저장 서비스가 중단되거나 데이터가 손실된 경우, 제대로 작동하려면 최신 백업에서 복원해야 할 수도 있습니다.

Service Fabric은 여러 노드에 걸쳐 상태를 복제하여 서비스의 가용성을 높입니다. 클러스터의 한 노드에서 오류가 발생해도 서비스를 지속적으로 사용할 수 있습니다. 그러나 어떤 경우에는 서비스 데이터가 광범위한 오류에 대해 신뢰할 수 있는 것이 여전히 바람직합니다.

예를 들어 서비스에서 다음과 같은 시나리오로부터 보호하기 위해 해당 데이터를 백업하려고 할 수 있습니다.

  • Service Fabric 클러스터 전체가 영구적으로 손실되는 경우
  • 서비스 파티션의 복제본 대다수가 영구적으로 손실되는 경우
  • 상태가 우발적으로 삭제되거나 손상된 관리 오류. 예를 들어 충분한 권한이 있는 관리자가 실수로 서비스를 삭제합니다.
  • 데이터 손상을 초래하는 서비스 내 버그. 예를 들어 신뢰할 수 있는 컬렉션에 잘못된 데이터 작성을 시작하는 서비스 코드가 업그레이드되는 경우 발생할 수 있습니다. 이런 경우 코드와 데이터 모두 이전 상태로 되돌아가야 할 수도 있습니다.
  • 오프라인 데이터 처리. 데이터를 생성하는 서비스와는 별도로 비즈니스 인텔리전스를 위한 데이터를 오프라인 처리하는 것이 편리할 수 있습니다.

Service Fabric은 특정 시점 백업 및 복원을 수행하는 기본 제공 API를 제공합니다. 애플리케이션 개발자는 이러한 API를 사용하여 서비스 상태를 정기적으로 백업할 수 있습니다. 또한 서비스 관리자가 애플리케이션을 업그레이드하기 전과 같이 특정 시간에 서비스 외부에서 백업을 트리거하려는 경우 개발자는 서비스에서 API로 백업(및 복원)을 공개해야 합니다. 백업을 유지 관리하는 것은 이 밖에도 추가 비용이 듭니다. 예를 들어 30분마다 5번의 증분 백업을 수행하고 전체 백업을 수행하려고 할 수 있습니다. 전체 백업 후에는 이전 증분 백업을 삭제할 수 있습니다. 이 방법은 추가 코드를 필요로 하므로 애플리케이션 개발 중에 추가 비용이 발생합니다.

Service Fabric의 서비스 백업 및 복원에서는 상태 저장 서비스에 저장된 정보의 손쉬운 자동화 백업을 사용하도록 설정합니다. 애플리케이션 데이터를 정기적으로 백업하는 것은 데이터 손실 및 서비스 비가용성을 방지하는 데 필수적입니다. Service Fabric은 백업 및 복원 서비스(선택 사항)를 제공하므로 추가 코드를 작성할 필요 없이 상태 저장 Reliable Services(Actor Services 포함)의 정기적인 백업을 구성할 수 있습니다. 또한 이전에 수행한 백업 복원을 수월하게 수행할 수 있습니다.

Service Fabric에서는 정기적 백업 및 복원 기능과 관련된 다음 기능을 가능하게 해주는 API 집합을 제공합니다.

  • (외부) 스토리지 위치에 백업을 업로드할 수 있도록 지원하여 Reliable Stateful 서비스 및 Reliable Actors의 정기적 백업을 예약합니다. 지원되는 스토리지 위치
    • Azure Storage
    • 파일 공유(온-프레미스)
  • 백업 열거
  • 파티션의 임시 백업 트리거
  • 이전 백업을 사용하여 파티션 복원
  • 일시적으로 백업 일시 중단
  • 백업의 보존 관리(예정)

필수 조건

  • Fabric 버전 6.4 이상을 포함하는 Service Fabric 클러스터 Azure 리소스 템플릿을 사용하여 Service Fabric 클러스터를 만드는 단계는 이 문서를 참조하세요.
  • 백업을 저장하기 위해 스토리지에 연결하는 데 필요한 비밀 암호화를 위한 X.509 인증서. X.509 인증서를 가져오거나 만드는 방법에 대해 알아보려면 문서를 참조하세요.
  • Service Fabric SDK 버전 3.0 이상을 사용하여 빌드된 Service Fabric Reliable Stateful 애플리케이션. .NET Core 2.0을 대상으로 하는 애플리케이션은 Service Fabric SDK 버전 3.1 이상을 사용하여 빌드되어야 합니다.
  • 애플리케이션 백업을 저장하기 위해 Azure Storage 계정을 만듭니다.
  • 구성 호출을 생성하기 위해 Microsoft.ServiceFabric.Powershell.Http 모듈을 설치합니다.

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

참고 항목

PowerShellGet 버전이 1.6.0 미만인 경우 업데이트하여 -AllowPrerelease 플래그에 대한 지원이 추가되도록 해야 합니다.

Install-Module -Name PowerShellGet -Force

  • Microsoft.ServiceFabric.PowerShell.Http 모듈을 사용하여 구성 요청을 생성하기 전에 Connect-SFCluster 명령을 사용하여 클러스터를 연결해야 합니다.

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

Backup 및 Restore 서비스 사용

Azure Portal 사용

Cluster Configuration 탭의 + Show optional settings 아래에 있는 Include backup restore service 확인란을 사용합니다.

포털을 사용하여 백업 복원 서비스 사용.

Azure Resource Manager 템플릿 사용

먼저 클러스터에서 Backup 및 Restore 서비스를 사용하도록 설정해야 합니다. 배포하려는 클러스터에 대한 템플릿을 가져옵니다. 샘플 템플릿을 사용하거나 Resource Manager 템플릿을 만들 수 있습니다. 다음 단계에 따라 Backup 및 Restore 서비스를 사용하도록 설정합니다.

  1. 먼저 다음 코드 조각과 같이 Microsoft.ServiceFabric/clusters 리소스에 대해 apiversion2018-02-01로 설정되었는지 확인하고 이렇게 설정되어 있지 않으면 업데이트합니다.

    {
        "apiVersion": "2018-02-01",
        "type": "Microsoft.ServiceFabric/clusters",
        "name": "[parameters('clusterName')]",
        "location": "[parameters('clusterLocation')]",
        ...
    }
    
  2. 이제 다음 코드 조각과 같이 다음 addonFeatures 섹션을 properties 섹션 아래에 추가하여 Backup 및 Restore 서비스를 사용하도록 설정합니다.

        "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. 위와 같은 변경 내용으로 클러스터 템플릿을 업데이트한 후 변경 내용을 적용하고 배포/업그레이드가 완료되도록 합니다. 완료된 후에는 클러스터에서 Backup 및 Restore 서비스 실행이 시작됩니다. 이 서비스의 URI는 fabric:/System/BackupRestoreService이고 서비스는 Service Fabric Explorer의 시스템 서비스 섹션 아래에 있을 수 있습니다.

Reliable Stateful 서비스 및 Reliable Actors에 대해 정기적 백업 사용

Reliable Stateful 서비스 및 Reliable Actors에 대한 정기적 백업을 사용하도록 설정하는 단계를 살펴보겠습니다. 이러한 단계에서는 다음을 가정합니다.

  • 클러스터는 백업 및 복원 서비스와 함께 X.509 보안을 사용하여 설치됩니다.
  • Reliable Stateful 서비스가 클러스터에 배포됩니다. 이 빠른 시작 가이드의 경우 애플리케이션 Uri는 fabric:/SampleApp이고, 이 애플리케이션에 속한 Reliable Stateful 서비스의 Uri는 fabric:/SampleApp/MyStatefulService입니다. 이 서비스는 단일 파티션과 함께 배포되고 파티션 ID는 974bd92a-b395-4631-8a7f-53bd4ae9cf22입니다.
  • 관리자 역할이 있는 클라이언트 인증서는 아래 스크립트가 호출되는 컴퓨터의 CurrentUser 인증서 저장소 위치의 (개인용) 저장소 이름에 설치됩니다. 이 예에서는 1b7ebe2174649c45474a4819dafae956712c31d3를 인증서 지문으로 사용합니다. 클라이언트 인증서에 대한 자세한 내용은 Service Fabric 클라이언트의 역할 기반 액세스 제어를 참조하세요.

백업 정책 만들기

첫 번째 단계는 백업 정책을 만드는 것입니다. 이 정책에는 백업 일정, 백업 데이터의 대상 스토리지, 정책 이름, 전체 백업이 트리거되기 전에 허용되는 최대 증분 백업 수, 백업 스토리지의 보존 정책이 포함되어야 합니다.

백업 스토리지의 경우 위에서 만든 Azure Storage 계정을 사용합니다. backup-container 컨테이너는 백업을 저장하기 위해 구성됩니다. 백업 업로드 중이 이 이름의 컨테이너가 만들어집니다(아직 없는 경우). 리소스에 여러 개의 관리 ID가 할당되어 있는 경우, account-name을 스토리지 계정 이름으로 바꿔 BlobServiceUri를 Azure Storage 계정 URL로 채우고 선택적 매개 변수 ManagedIdentityClientId를 사용자 할당 관리 ID의 클라이언트 ID로 채웁니다.

Azure 리소스에서 관리 ID 할당을 위한 단계를 따릅니다.

  1. Virtual Machine Scale Sets에서 시스템이 할당하거나 사용자가 할당한 관리 ID 사용 가상 머신 확장 집합에서 관리 ID 구성

  2. Virtual Machine Scale Sets 관리 ID에 스토리지 계정 역할 할당 Azure Portal을 사용하여 Azure 역할 할당 - Azure RBAC

    1. 최소한 Storage Blob 데이터 기여자 역할

관리 ID에 대한 자세한 정보

Microsoft.ServiceFabric.Powershell.Http 모듈을 사용하는 PowerShell

다음 PowerShell cmdlet을 실행하여 새 백업 정책을 만듭니다. 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.

PowerShell을 사용하는 Rest 호출

필요한 REST API를 호출하여 새 정책을 만들려면 다음 PowerShell 스크립트를 실행합니다. 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를 선택해야 합니다.

    백업 정책 관리 ID Azure Blob Storage 만들기

정기적 백업 사용

애플리케이션의 데이터 보호 요구 사항을 충족하도록 백업 정책을 정의한 후 백업 정책을 애플리케이션과 연결해야 합니다. 요구 사항에 따라 백업 정책을 애플리케이션, 서비스 또는 파티션과 연결할 수 있습니다.

Microsoft.ServiceFabric.Powershell.Http 모듈을 사용하는 PowerShell


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

PowerShell을 사용하는 Rest 호출

위의 단계에서 만든 이름이 BackupPolicy1인 백업 정책을 SampleApp 애플리케이션과 연결하기 위해 필요한 REST API를 호출하기 위해 다음 PowerShell 스크립트를 실행합니다.

$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에 속한 모든 파티션이 관련 백업 정책에 따라 정기적으로 백업되기 시작합니다.

파티션 BackedUp 상태 이벤트

백업 목록

애플리케이션의 Reliable Stateful 서비스 및 Reliable Actors에 속한 모든 파티션과 관련된 백업은 GetBackups API를 사용하여 열거할 수 있습니다. 백업은 애플리케이션, 서비스 또는 파티션에 대해 열거할 수 있습니다.

Microsoft.ServiceFabric.Powershell.Http 모듈을 사용하는 PowerShell


Get-SFApplicationBackupList -ApplicationId WordCount

PowerShell을 사용하는 Rest 호출

HTTP API를 호출하는 다음 PowerShell 스크립트를 실행하여 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에서 백업을 보려면 파티션으로 이동한 후 백업 탭을 선택합니다.

백업 열거

제한/주의 사항

  • Service Fabric PowerShell cmdlet은 미리 보기 모드입니다.
  • Linux에서 Service Fabric 클러스터에 대한 지원이 없습니다.

다음 단계