Eseguire il backup e il ripristino del database controller

Quando si distribuiscono i servizi dati di Azure Arc, il controller di dati di Azure Arc è uno dei componenti più critici distribuiti. Le funzioni del titolare del trattamento dei dati includono:

  • Effettuare il provisioning, il deprovisioning e aggiornare le risorse
  • Orchestrare la maggior parte delle attività per Istanza gestita di SQL abilitate da Azure Arc, ad esempio aggiornamenti, aumento del numero di istanze e così via.
  • Acquisire le informazioni di fatturazione e utilizzo di ogni istanza gestita di Arc SQL.

Per eseguire le funzioni precedenti, il titolare del trattamento dei dati deve archiviare un inventario di tutte le istanze gestite di Arc SQL correnti, la fatturazione, l'utilizzo e lo stato corrente di tutte queste istanze gestite di SQL. Tutti questi dati vengono archiviati in un database denominato controller all'interno dell'istanza di SQL Server distribuita nel controldb-0 pod.

Questo articolo illustra come eseguire il backup del database controller.

Eseguire il backup del database del controller di dati

Come parte delle funzionalità predefinite, il backup del database controller del controller di dati viene eseguito automaticamente ogni 5 minuti dopo l'abilitazione dei backup. Per abilitare i backup:

  • Creare un backups-controldbPersistentVolumeClaim oggetto con una classe di archiviazione che supporta ReadWriteMany l'accesso:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: backups-controldb
  namespace: <namespace>
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 15Gi
  storageClassName: <storage-class>
  • Modificare la DataController specifica di risorsa personalizzata per includere una backups definizione di archiviazione:
storage:
    backups:
      accessMode: ReadWriteMany
      className: <storage-class>
      size: 15Gi
    data:
      accessMode: ReadWriteOnce
      className: managed-premium
      size: 15Gi
    logs:
      accessMode: ReadWriteOnce
      className: managed-premium
      size: 10Gi

I .bak file per il controller database vengono archiviati nel backups volume del controldb pod in /var/opt/backups/mssql.

Ripristinare il database del controller

Esistono due tipi di ripristino possibili:

  1. controller è danneggiato ed è sufficiente ripristinare il database
  2. l'intera risorsa di archiviazione che contiene i controller file di dati e di log è danneggiata/scomparsa ed è necessario ripristinare

Scenario di database controller danneggiato

In questo scenario, tutti i pod sono operativi, è possibile connettersi a controldb SQL Server e potrebbe verificarsi un danneggiamento con il controller database. È sufficiente ripristinare il database da un backup.

Seguire questa procedura per ripristinare il database controller da un backup, se SQL Server è ancora attivo e in esecuzione nel controldb pod ed è possibile connettersi al database:

  1. Verificare la connettività al pod di SQL Server che ospita il controller database.

    • Recuperare prima di tutto le credenziali per il segreto. controller-system-secret è il segreto che contiene le credenziali per l'account system utente che può essere usato per connettersi all'istanza di SQL. Eseguire il comando seguente per recuperare il contenuto del segreto:

      kubectl get secret controller-system-secret --namespace [namespace] -o yaml
      

      Ad esempio:

      kubectl get secret controller-system-secret --namespace arcdataservices -o yaml
      
    • Decodificare le credenziali con codifica Base64. Il contenuto del file yaml del segreto controller-system-secret contiene un password e username. È possibile usare qualsiasi strumento decodificatore base64 per decodificare il contenuto di password.

    • Verificare la connettività: con le credenziali decodificate, eseguire un comando come SELECT @@SERVERNAME per verificare la connettività a SQL Server.

      kubectl exec controldb-0 -n <namespace> -c  mssql-server -- /opt/mssql-tools/bin/sqlcmd -S localhost -U system -P "<password>" -Q "SELECT @@SERVERNAME"
      
      kubectl exec controldb-0 -n contosons -c  mssql-server -- /opt/mssql-tools/bin/sqlcmd -S localhost -U system -P "<password>" -Q "SELECT @@SERVERNAME"
      
  2. Ridimensionare replicaset di controller fino a 0 repliche come indicato di seguito:

    kubectl scale --replicas=0 rs/control -n <namespace>`
    

    Ad esempio:

    kubectl scale --replicas=0 rs/control -n arcdataservices
    
  3. Connessione al controldb SQL Server come system descritto nel passaggio 1.

  4. Eliminare il database del controller danneggiato usando T-SQL:

    DROP DATABASE controller
    
  5. Ripristinare il database dal backup: dopo l'eliminazione del file danneggiato controllerdb . Ad esempio:

    RESTORE DATABASE test FROM DISK = '/var/opt/backups/mssql/<controller backup file>.bak'
    WITH MOVE 'controller' to '/var/opt/mssql/data/controller.mdf
    ,MOVE 'controller' to '/var/opt/mssql/data/controller_log.ldf' 
    ,RECOVERY;
    GO
    
  6. Ridimensionare replicaset controller eseguire il backup fino a 1 replica.

    kubectl scale --replicas=1 rs/control -n <namespace>
    

    Ad esempio:

    kubectl scale --replicas=1 rs/control -n arcdataservices
    

Scenario di archiviazione danneggiato

In questo scenario, l'archiviazione che ospita i file di dati e di log del titolare del trattamento dei dati, presenta danneggiamento e ne è stato effettuato il provisioning ed è necessario ripristinare il database controller.

Seguire questa procedura per ripristinare il database del controller da un backup con una nuova risorsa di archiviazione per StatefulSet controldb :

  1. Assicurarsi di disporre di un backup dell'ultimo stato valido noto del controller database

  2. Ridimensionare replicaset di controller fino a 0 repliche come indicato di seguito:

    kubectl scale --replicas=0 rs/control -n <namespace>
    

    Ad esempio:

    kubectl scale --replicas=0 rs/control -n arcdataservices
    
  3. Ridimensionare statefulSet controldb fino a 0 repliche, come indicato di seguito:

    kubectl scale --replicas=0 sts/controldb -n <namespace>
    

    Ad esempio:

    kubectl scale --replicas=0 sts/controldb -n arcdataservices`
    
  4. Creare un segreto kubernetes denominato controller-sa-secret con il codice YAML seguente:

    apiVersion: v1
    kind: Secret
    metadata:
      name: controller-sa-secret
      namespace: <namespace>
    type: Opaque
    data:
      password: <base64 encoded password>
    
  5. Modificare StatefulSet controldb per includere un volume e il controller-sa-secret montaggio del volume corrispondente (/var/run/secrets/mounts/credentials/mssql-sa-password) nel contenitore usando kubectl edit sts controldb -n <namespace> il mssql-server comando .

  6. Creare nuove attestazioni di volume permanente di dati (data-controldb) e log (logs-controldb) per il controldb pod come indicato di seguito:

     apiVersion: v1
     kind: PersistentVolumeClaim
     metadata:
       name: data-controldb
       namespace: <namespace>
     spec:
       accessModes:
         - ReadWriteOnce
       resources:
         requests:
           storage: 15Gi
       storageClassName: <storage class>
    
     ---
     apiVersion: v1
     kind: PersistentVolumeClaim
     metadata:
       name: logs-controldb
       namespace: <namespace>
     spec:
       accessModes:
         - ReadWriteOnce
       resources:
         requests:
           storage: 10Gi
       storageClassName: <storage class>
    
  7. Ridimensionare statefulSet controldb a 1 replica usando:

    kubectl scale --replicas=1 sts/controldb -n <namespace>
    
  8. Connessione al controldb SQL Server come sa uso della password nel segreto creato in controller-sa-secret precedenza.

  9. Creare un system account di accesso con il ruolo sysadmin usando la password nel controller-system-secret segreto kubernetes come indicato di seguito:

    CREATE LOGIN [system] WITH PASSWORD = '<password-from-secret>'
    ALTER SERVER ROLE sysadmin ADD MEMBER [system]
    
  10. Ripristinare il backup usando il RESTORE comando come indicato di seguito:

RESTORE DATABASE [controller] FROM DISK = N'/var/opt/backups/mssql/<controller backup file>.bak' WITH FILE = 1
  1. Creare un controldb-rw-user account di accesso usando la password nel controller-db-rw-secret segreto CREATE LOGIN [controldb-rw-user] WITH PASSWORD = '<password-from-secret>' e associarlo all'utente esistente controldb-rw-user nel database del controller ALTER USER [controldb-rw-user] WITH LOGIN = [controldb-rw-user].

  2. Disabilitare l'account sa di accesso usando TSQL - ALTER LOGIN [sa] DISABLE.

  3. Modificare StatefulSet controldb per rimuovere il volume e il controller-sa-secret montaggio del volume corrispondente.

  4. Eliminare il controller-sa-secret segreto.

  5. Ridimensionare il controller ReplicaSet di backup fino a 1 replica usando il kubectl scale comando .

Dashboard di Azure Data Studio