Delen via


Een back-up maken van een controllerdatabase en deze herstellen

Wanneer u Azure Arc-gegevensservices implementeert, is de Azure Arc-gegevenscontroller een van de meest kritieke onderdelen die worden geïmplementeerd. De functies van de gegevenscontroller zijn:

  • Resources inrichten, de inrichting ongedaan maken en bijwerken
  • De meeste activiteiten organiseren voor SQL Managed Instance die is ingeschakeld door Azure Arc, zoals upgrades, uitschalen, enzovoort.
  • Noteer de facturerings- en gebruiksgegevens van elk beheerd Arc SQL-exemplaar.

Om bovenstaande functies uit te voeren, moet de gegevenscontroller een inventaris opslaan van alle huidige beheerde Arc SQL-exemplaren, facturering, gebruik en de huidige status van al deze met SQL beheerde exemplaren. Al deze gegevens worden opgeslagen in een database die wordt aangeroepen controller in het SQL Server-exemplaar dat in de controldb-0 pod is geïmplementeerd.

In dit artikel wordt uitgelegd hoe u een back-up maakt van de controllerdatabase.

Een back-up maken van een database voor gegevenscontroller

Als onderdeel van ingebouwde mogelijkheden wordt er elke 5 minuten automatisch een back-up van de database controller van de gegevenscontroller gemaakt zodra back-ups zijn ingeschakeld. Back-ups inschakelen:

  • Maak een backups-controldb PersistentVolumeClaim met een opslagklasse die ondersteuning biedt voor ReadWriteMany toegang:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: backups-controldb
  namespace: <namespace>
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 15Gi
  storageClassName: <storage-class>
  • Bewerk de DataController aangepaste resourcespecificatie om een backups opslagdefinitie op te nemen:
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

De .bak bestanden voor de controller database worden opgeslagen op het backups volume van de controldb pod op /var/opt/backups/mssql.

Controllerdatabase herstellen

Er zijn twee soorten herstel mogelijk:

  1. controller is beschadigd en u hoeft alleen de database te herstellen
  2. de volledige opslag die de controller gegevens en logboekbestanden bevat, is beschadigd/verdwenen en u moet herstellen

Scenario met beschadigde controllerdatabase

In dit scenario zijn alle pods actief en werkend, kunt u verbinding maken met de controldb SQL Server en kan de database beschadigd controller zijn. U hoeft de database alleen te herstellen vanuit een back-up.

Volg deze stappen om de controllerdatabase te herstellen vanuit een back-up, als de SQL Server nog steeds actief is op de controldb pod en u er verbinding mee kunt maken:

  1. Controleer de verbinding met SQL Server-pods die als host fungeren voor de controller database.

    • Haal eerst de referenties voor het geheim op. controller-system-secret is het geheim met de referenties voor het system gebruikersaccount dat kan worden gebruikt om verbinding te maken met het SQL-exemplaar. Voer de volgende opdracht uit om de geheime inhoud op te halen:

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

      Voorbeeld:

      kubectl get secret controller-system-secret --namespace arcdataservices -o yaml
      
    • Decoderen van de met Base64 gecodeerde referenties. De inhoud van het yaml-bestand van het geheim controller-system-secret bevat een password en username. U kunt elk hulpprogramma voor base64-decoderen gebruiken om de inhoud van de password.

    • Controleer de connectiviteit: Voer met de gedecodeerde referenties een opdracht uit, bijvoorbeeld SELECT @@SERVERNAME om de verbinding met de SQL Server te verifiëren.

      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. Schaal de controllerReplicaSet als volgt omlaag naar 0 replica's:

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

    Voorbeeld:

    kubectl scale --replicas=0 rs/control -n arcdataservices
    
  3. Maak verbinding met de controldb SQL Server, zoals system beschreven in stap 1.

  4. Verwijder de beschadigde controllerdatabase met behulp van T-SQL:

    DROP DATABASE controller
    
  5. Herstel de database vanuit een back-up- nadat de beschadigde controllerdb is verwijderd. Voorbeeld:

    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. Schaal de replicaset van de controller terug tot 1 replica.

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

    Voorbeeld:

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

Beschadigd opslagscenario

In dit scenario is de opslag die als host fungeert voor de gegevenscontrollergegevens en logboekbestanden, beschadigd en is er een nieuwe opslag ingericht en moet u de controllerdatabase herstellen.

Volg deze stappen om de controllerdatabase te herstellen vanuit een back-up met nieuwe opslag voor de controldb StatefulSet:

  1. Zorg ervoor dat u een back-up hebt van de laatst bekende goede status van de controller database

  2. Schaal de controllerReplicaSet als volgt omlaag naar 0 replica's:

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

    Voorbeeld:

    kubectl scale --replicas=0 rs/control -n arcdataservices
    
  3. Schaal de controldb StatefulSet als volgt omlaag naar 0 replica's:

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

    Voorbeeld:

    kubectl scale --replicas=0 sts/controldb -n arcdataservices`
    
  4. Maak een kubernetes-geheim controller-sa-secret met de volgende YAML:

    apiVersion: v1
    kind: Secret
    metadata:
      name: controller-sa-secret
      namespace: <namespace>
    type: Opaque
    data:
      password: <base64 encoded password>
    
  5. Bewerk de controldb StatefulSet om een controller-sa-secret volume en bijbehorende volumekoppeling (/var/run/secrets/mounts/credentials/mssql-sa-password) in de container op te nemen met behulp van kubectl edit sts controldb -n <namespace> de mssql-server opdracht.

  6. Maak als volgt nieuwe gegevens (data-controldb) en logboeken (logs-controldb) permanente volumeclaims voor de controldb pod:

     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. Schaal de controldb StatefulSet terug naar 1 replica met behulp van:

    kubectl scale --replicas=1 sts/controldb -n <namespace>
    
  8. Maak verbinding met de controldb SQL-server met sa behulp van het wachtwoord in het controller-sa-secret geheim dat u eerder hebt gemaakt.

  9. Maak als volgt een system aanmelding met de rol sysadmin met behulp van het wachtwoord in het controller-system-secret kubernetes-geheim:

    CREATE LOGIN [system] WITH PASSWORD = '<password-from-secret>'
    ALTER SERVER ROLE sysadmin ADD MEMBER [system]
    
  10. Herstel de back-up met behulp van de RESTORE opdracht als volgt:

RESTORE DATABASE [controller] FROM DISK = N'/var/opt/backups/mssql/<controller backup file>.bak' WITH FILE = 1
  1. Maak een controldb-rw-user aanmelding met behulp van het wachtwoord in het controller-db-rw-secret geheim CREATE LOGIN [controldb-rw-user] WITH PASSWORD = '<password-from-secret>' en koppel deze aan de bestaande controldb-rw-user gebruiker in de controllerdatabase ALTER USER [controldb-rw-user] WITH LOGIN = [controldb-rw-user].

  2. Schakel de sa aanmelding uit met behulp van TSQL - ALTER LOGIN [sa] DISABLE.

  3. Bewerk de controldb StatefulSet om het controller-sa-secret volume en de bijbehorende volumekoppeling te verwijderen.

  4. Verwijder het controller-sa-secret geheim.

  5. Schaal de controller ReplicaSet terug tot 1 replica met behulp van de kubectl scale opdracht.

Azure Data Studio-dashboards