Compartir a través de


Restauración y copia de seguridad periódicas en un clúster de Azure Service Fabric

Service Fabric es una plataforma para desarrollar y administrar aplicaciones en la nube distribuidas y confiables. Admite microservicios sin estado y con estado. Los servicios con estado pueden mantener datos importantes más allá de una sola solicitud o transacción. Si un servicio con estado deja de funcionar o pierde datos, es posible que deba restaurarse a partir de una copia de seguridad reciente para seguir funcionando correctamente.

Service Fabric replica el estado en varios nodos para asegurarse de que el servicio ofrece alta disponibilidad. Incluso si se produce un error en un nodo del clúster, el servicio sigue estando disponible. Sin embargo, en algunos casos, todavía es conveniente que los datos del servicio sean confiables frente a errores más amplios.

Por ejemplo, es posible que un servicio quiera realizar copias de seguridad de los datos como medida de protección en los escenarios siguientes:

  • En caso de que se produzca una pérdida permanente de todo un clúster de Service Fabric.
  • En caso de que se produzca una pérdida permanente de la mayoría de las réplicas de una partición del servicio.
  • Errores administrativos por los cuales el estado se elimina o daña accidentalmente. Por ejemplo, un administrador con suficientes privilegios elimina el servicio por error.
  • Errores en el servicio que causan daños en los datos. Por ejemplo, esto puede suceder cuando una actualización de código de servicio empieza a escribir datos defectuosos en una colección confiable. En tal caso, es posible que el código y los datos se tengan que revertir a un estado anterior.
  • Procesamiento de datos sin conexión. Podría ser conveniente procesar los datos para inteligencia empresarial sin conexión de forma independiente del servicio que los genera.

Service Fabric proporciona una API integrada para realizar copias de seguridad y restauraciones a un momento dado. Los desarrolladores de aplicaciones pueden usar estas API para hacer una copia de seguridad del estado del servicio periódicamente. Además, si los administradores de servicios quieren desencadenar una copia de seguridad desde el exterior del servicio en un momento específico, como antes de la actualización de la aplicación, los desarrolladores deben exponer la copia de seguridad (y la restauración) como una API del servicio. El mantenimiento de las copias de seguridad supone un costo adicional. Por ejemplo, es posible que quiera hacer cinco copias de seguridad incrementales cada media hora, seguidas de una copia de seguridad completa. Tras la copia de seguridad completa, puede eliminar las copias de seguridad incrementales anteriores. Este enfoque requiere un código adicional que conlleva costos adicionales durante el desarrollo de aplicaciones.

El servicio de copia de seguridad y restauración de Service Fabric permite realizar copias de seguridad de información almacenada en los servicios con estado de forma sencilla y automática. Realizar copias de seguridad de datos de aplicaciones de forma periódica es fundamental para evitar la pérdida de datos y la falta de disponibilidad de servicios. Service Fabric proporciona un servicio de restauración y copia de seguridad opcional, que le permite configurar la copia de seguridad periódica de Reliable Services con estado (incluidos los servicios de actor) sin tener que escribir ningún código adicional. También facilita la restauración de las copias de seguridad realizadas previamente.

Service Fabric proporciona un conjunto de API para lograr la siguiente funcionalidad relacionada con la característica de restauración y copia de seguridad periódica:

  • Programación de copias de seguridad periódicas de los servicios de confianza con estado y Reliable Actors con compatibilidad con la carga de la copia de seguridad en ubicaciones de almacenamiento (externas). Ubicaciones de almacenamiento admitidas
    • Azure Storage
    • Recurso compartido de archivos (local)
  • Enumeración de las copias de seguridad
  • Desencadenamiento de una copia de seguridad ad hoc de una partición
  • Restauración de una partición mediante la copia de seguridad anterior
  • Suspensión temporal de las copias de seguridad
  • Administración de la retención de copias de seguridad (próximamente)

Prerrequisitos

  • Clúster de Service Fabric con la versión 6.4 de Fabric y versiones posteriores. Consulte este artículo para ver los pasos necesarios para crear el clúster de Service Fabric mediante la plantilla de recursos de Azure.
  • Se requiere el certificado X.509 para el cifrado de secretos a fin de conectarse al almacenamiento y almacenar las copias de seguridad. Consulte este artículo para saber cómo obtener o crear un certificado X.509.
  • Aplicación con estado de confianza de Service Fabric compilada con la versión 3.0 del SDK de Service Fabric o una versión posterior. En el caso de las aplicaciones destinadas a .NET Core 2.0, la aplicación debe compilarse con la versión 3.1 o posterior del SDK de Service Fabric.
  • Cree una cuenta de Azure Storage para almacenar las copias de seguridad de la aplicación.
  • Instale el módulo Microsoft.ServiceFabric.PowerShell.Http para realizar llamadas de configuración.

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

Nota:

Si la versión de PowerShellGet es inferior a la 1.6.0, deberá actualizar para agregar compatibilidad con la marca -AllowPrerelease:

Install-Module -Name PowerShellGet -Force

  • Asegúrese de que el clúster esté conectado mediante el comando Connect-SFCluster antes de realizar una solicitud de configuración con el módulo 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'

Habilitación del servicio de copia de seguridad y restauración

Uso de Azure Portal

Habilite la casilla Include backup restore service bajo + Show optional settings en la pestaña Cluster Configuration.

Habilitación del servicio de copia de seguridad y restauración con Azure Portal

Uso de la plantilla de Azure Resource Manager

Primero debe habilitar el servicio de copia de seguridad y restauración en el clúster. Obtenga la plantilla del clúster que desea implementar. Puede usar las plantillas de ejemplo o crear una plantilla de Resource Manager. Habilite el servicio de copia de seguridad y restauración realizando los pasos siguientes:

  1. Compruebe que apiversion está establecido en 2018-02-01 para el recurso Microsoft.ServiceFabric/clusters y, si no es así, actualícelo como se muestra en el siguiente fragmento de código:

    {
        "apiVersion": "2018-02-01",
        "type": "Microsoft.ServiceFabric/clusters",
        "name": "[parameters('clusterName')]",
        "location": "[parameters('clusterLocation')]",
        ...
    }
    
  2. Ahora, habilite el servicio de copia de seguridad y restauración mediante la adición de la siguiente sección addonFeatures en la sección properties, como se muestra en el siguiente fragmento de código:

        "properties": {
            ...
            "addonFeatures": ["BackupRestoreService"],
            "fabricSettings": [ ... ]
            ...
        }
    
    
  3. Configure el certificado X.509 para el cifrado de credenciales. Esto es importante para asegurarse de que las credenciales proporcionadas para conectarse al almacenamiento se cifran antes de continuar. Configure el certificado de cifrado mediante la adición de la siguiente sección BackupRestoreService en la sección fabricSettings, como se muestra en el siguiente fragmento de código:

    "properties": {
        ...
        "addonFeatures": ["BackupRestoreService"],
        "fabricSettings": [
        {
            "name": "BackupRestoreService",
            "parameters": [
                {
                    "name": "SecretEncryptionCertThumbprint",
                    "value": "[Thumbprint]"
                },
                {
                    "name": "SecretEncryptionCertX509StoreName",
                    "value": "My"
                }
            ]
        }]
        ...
    }
    

    Nota:

    [Huella digital] debe reemplazar por huella digital de certificado válida que se usará para el cifrado.

  4. Una vez actualizada la plantilla del clúster con los cambios anteriores, aplíquelos y deje que se complete la actualización o la implementación. Cuando haya terminado, el servicio de copia de seguridad y restauración empezará a ejecutarse en el clúster. El URI de este servicio es fabric:/System/BackupRestoreService y el servicio puede estar ubicado en la sección de servicio del sistema de Service Fabric Explorer.

Habilitación de la copia de seguridad periódica del servicio de confianza con estado y Reliable Actors

Vamos a examinar los pasos para habilitar la copia de seguridad periódica del servicio de confianza con estado y Reliable Actors. Con estos pasos se asume que:

  • El clúster está configurado mediante la seguridad X.509 con el servicio de copia de seguridad y restauración.
  • Se implementa un servicio de confianza con estado en el clúster. Para esta guía de inicio rápido, el URI de la aplicación es fabric:/SampleApp y el URI del servicio de confianza con estado que pertenece a esta aplicación es fabric:/SampleApp/MyStatefulService. Este servicio se implementa con una sola partición y el identificador de partición es 974bd92a-b395-4631-8a7f-53bd4ae9cf22.
  • El certificado de cliente con el rol de administrador se instala en el nombre de almacén My (personal) de la ubicación del almacén de certificados CurrentUser en la máquina desde donde se invocarán los siguientes scripts. Este ejemplo utiliza 1b7ebe2174649c45474a4819dafae956712c31d3 como huella digital de este certificado. Para obtener más información sobre los certificados de cliente, consulte Control de acceso basado en rol para clientes de Service Fabric.

Creación de una directiva de copia de seguridad

El primer paso es crear una directiva de copia de seguridad. Esta directiva debe incluir la programación de copia de seguridad, el almacenamiento de destino para los datos de copia de seguridad, el nombre de la directiva, el número máximo de copias de seguridad incrementales permitidas antes de que se desencadene una copia de seguridad completa y la directiva de retención para el almacenamiento de copia de seguridad.

Para el almacenamiento de copia de seguridad, use la cuenta de Azure Storage creada anteriormente. El contenedor backup-container está configurado para almacenar copias de seguridad. Se crea un contenedor con este nombre, si aún no existe, durante la carga de la copia de seguridad. Rellene BlobServiceUri con la dirección URL de la cuenta de Azure Storage reemplazando account-name por el nombre de la cuenta de almacenamiento y rellene el parámetro opcional ManagedIdentityClientId con el id. de cliente de la identidad administrada asignada por el usuario si hay varias identidades administradas asignadas al recurso.

Siga los pasos para la asignación de identidad administrada en el recurso de Azure:

  1. Habilitación de la identidad administrada asignada por el sistema o por el usuario en Virtual Machine Scale Sets Configuración de identidades administradas en el conjunto de escalado de máquinas virtuales

  2. Asignación de roles a la identidad administrada de Virtual Machine Scale Sets a la cuenta de almacenamiento Asignación de roles de Azure mediante Azure Portal: Azure RBAC

    1. Rol Colaborador de datos de Storage Blob como mínimo

Para obtener más información sobre la identidad administrada

PowerShell con el módulo Microsoft.ServiceFabric.Powershell.Http

Ejecute los siguientes cmdlets de PowerShell para crear una nueva directiva de copia de seguridad. Sustituya account-name por el nombre de su cuenta de almacenamiento.


    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.

Llamada a REST mediante PowerShell

Ejecute el siguiente script de PowerShell para invocar la API de REST necesaria para crear una nueva directiva. Sustituya account-name por el nombre de su cuenta de almacenamiento.

$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'

Uso de Service Fabric Explorer

  1. En Service Fabric Explorer, haga clic en Clúster en el panel izquierdo, vaya a la pestaña Copias de seguridad y seleccione Acciones > Crear directiva de copia de seguridad.

    Crear directiva de copia de seguridad

  2. Rellene la información. Para obtener más información sobre cómo especificar un intervalo basado en la frecuencia, consulte la propiedad TimeGrain. En el caso de los clústeres de Azure, se debe seleccionar ManagedIdentityAzureBlobStore.

    Creación de una identidad administrada de directiva de copia de seguridad de Azure Blob Storage

Habilitación de la copia de seguridad periódica

Después de definir la directiva de copia de seguridad para satisfacer los requisitos de protección de datos de la aplicación, dicha directiva debe estar asociada a la aplicación. Según el requisito, la directiva de copia de seguridad se puede asociar a una aplicación, servicio o partición.

PowerShell con el módulo Microsoft.ServiceFabric.Powershell.Http


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

Llamada a REST mediante PowerShell

Ejecute el siguiente script de PowerShell para invocar la API de REST necesaria para asociar la directiva de copia de seguridad con el nombre BackupPolicy1 creado en el paso anterior con la aplicación 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'

Uso de Service Fabric Explorer

Asegúrese de que BackupRestoreService está habilitado en el clúster.

  1. Abra Service Fabric Explorer.

  2. Seleccione una aplicación y vaya a la sección Copia de seguridad. Haga clic en Acción de copia de seguridad.

  3. Haga clic en "Habilitar o actualizar la copia de seguridad de aplicaciones".

    Habilitar la copia de seguridad de aplicaciones

  4. Por último, seleccione la directiva que quiera y haga clic en "Habilitar copia de seguridad".

    Seleccionar la directiva

Comprobación del funcionamiento de las copias de seguridad periódicas

Después de habilitar la copia de seguridad en el nivel de aplicación, empezará a realizarse la copia de seguridad periódicamente de todas las particiones que pertenecen a los servicios de confianza con estado y Reliable Actors en la aplicación según la directiva de copia de seguridad asociada.

Evento de estado de copia de seguridad de la partición

Enumeración de las copias de seguridad

Las copias de seguridad asociadas a todas las particiones que pertenecen a los servicios de confianza con estado y Reliable Actors de la aplicación pueden enumerarse con GetBackups API. Las copias de seguridad pueden enumerarse para una aplicación, un servicio o una partición.

PowerShell con el módulo Microsoft.ServiceFabric.Powershell.Http


Get-SFApplicationBackupList -ApplicationId WordCount

Llamada a REST mediante PowerShell

Ejecute el siguiente script de PowerShell para invocar la API HTTP para enumerar las copias de seguridad creadas para todas las particiones dentro de la aplicación 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

Salida de ejemplo de la ejecución anterior:

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            :

Uso de Service Fabric Explorer

Para ver las copias de seguridad en Service Fabric Explorer, vaya a una partición y seleccione la pestaña Copias de seguridad.

Enumeración de las copias de seguridad

Limitaciones o advertencias

  • Los cmdlets de PowerShell para Service Fabric están en modo de versión preliminar.
  • Sin compatibilidad con los clústeres de Service Fabric en Linux.

Pasos siguientes