Dela via


Säkerhetskopiera och återställa kontrollantdatabas

När du distribuerar Azure Arc-datatjänster är Azure Arc-datakontrollanten en av de mest kritiska komponenterna som distribueras. Datakontrollantens funktioner omfattar:

  • Etablera, avetablera och uppdatera resurser
  • Samordna de flesta aktiviteterna för SQL Managed Instance som aktiveras av Azure Arc, till exempel uppgraderingar, utskalning osv.
  • Samla in fakturerings- och användningsinformation för varje Arc SQL-hanterad instans.

För att kunna utföra ovanstående funktioner måste datakontrollanten lagra en inventering av alla aktuella Arc SQL-hanterade instanser, fakturering, användning och det aktuella tillståndet för alla dessa SQL-hanterade instanser. Alla dessa data lagras i en databas som anropas controller i SQL Server-instansen controldb-0 som distribueras till podden.

Den här artikeln beskriver hur du säkerhetskopierar kontrollantdatabasen.

Säkerhetskopiera datastyrenhetsdatabas

Som en del av de inbyggda funktionerna säkerhetskopieras datastyrenhetens databas controller automatiskt var 5:e minut när säkerhetskopior har aktiverats. Så här aktiverar du säkerhetskopior:

  • Skapa en backups-controldb PersistentVolumeClaim med en lagringsklass som stöder ReadWriteMany åtkomst:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: backups-controldb
  namespace: <namespace>
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 15Gi
  storageClassName: <storage-class>
  • Redigera den DataController anpassade resursspecifikationen så att den innehåller en backups lagringsdefinition:
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

Filerna .bak för controller databasen lagras på backups poddens controldb volym på /var/opt/backups/mssql.

Återställa kontrollantdatabas

Det finns två typer av återställning:

  1. controller är skadad och du behöver bara återställa databasen
  2. hela lagringen som innehåller controller data och loggfiler är skadad/borta och du måste återställa

Scenario med skadad kontrollantdatabas

I det här scenariot är alla poddar igång, du kan ansluta till controldb SQL Server och det kan finnas en skada i controller databasen. Du behöver bara återställa databasen från en säkerhetskopia.

Följ dessa steg för att återställa kontrollantdatabasen från en säkerhetskopia, om SQL Server fortfarande är igång på controldb podden och du kan ansluta till den:

  1. Kontrollera anslutningen till SQL Server-podden som är värd för controller databasen.

    • Hämta först autentiseringsuppgifterna för hemligheten. controller-system-secret är hemligheten som innehåller autentiseringsuppgifterna system för användarkontot som kan användas för att ansluta till SQL-instansen. Kör följande kommando för att hämta det hemliga innehållet:

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

      Till exempel:

      kubectl get secret controller-system-secret --namespace arcdataservices -o yaml
      
    • Avkoda de base64-kodade autentiseringsuppgifterna. Innehållet i yaml-filen i hemligheten controller-system-secret innehåller en password och username. Du kan använda valfritt base64-avkodningsverktyg för att avkoda innehållet i password.

    • Verifiera anslutningen: Kör ett kommando med de avkodade autentiseringsuppgifterna, till exempel SELECT @@SERVERNAME för att verifiera anslutningen till 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. Skala ned styrenhetsreplikuppsättningen till 0 repliker enligt följande:

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

    Till exempel:

    kubectl scale --replicas=0 rs/control -n arcdataservices
    
  3. Anslut till SQL Server system enligt beskrivningen controldb i steg 1.

  4. Ta bort den skadade kontrollantdatabasen med hjälp av T-SQL:

    DROP DATABASE controller
    
  5. Återställ databasen från säkerhetskopian – när den skadade har tagits controllerdb bort. Till exempel:

    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. Skala upp styrenhetsreplikuppsättningen till 1 replik.

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

    Till exempel:

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

Skadat lagringsscenario

I det här scenariot har lagringen som är värd för data- och loggfilerna för datakontrollanten skadats och en ny lagring har etablerats och du måste återställa kontrollantdatabasen.

Följ dessa steg för att återställa kontrollantdatabasen från en säkerhetskopia med ny lagring för controldb StatefulSet:

  1. Se till att du har en säkerhetskopia av databasens senast kända goda tillstånd controller

  2. Skala ned styrenhetsreplikuppsättningen till 0 repliker enligt följande:

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

    Till exempel:

    kubectl scale --replicas=0 rs/control -n arcdataservices
    
  3. controldb Skala ned StatefulSet till 0 repliker enligt följande:

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

    Till exempel:

    kubectl scale --replicas=0 sts/controldb -n arcdataservices`
    
  4. Skapa en kubernetes-hemlighet med namnet controller-sa-secret med följande YAML:

    apiVersion: v1
    kind: Secret
    metadata:
      name: controller-sa-secret
      namespace: <namespace>
    type: Opaque
    data:
      password: <base64 encoded password>
    
  5. controldb Redigera StatefulSet för att inkludera en controller-sa-secret volym och motsvarande volymmontering (/var/run/secrets/mounts/credentials/mssql-sa-password) i containern mssql-server med hjälp kubectl edit sts controldb -n <namespace> av kommandot .

  6. Skapa nya data (data-controldb) och loggar (logs-controldb) beständiga volymanspråk för controldb podden på följande sätt:

     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. controldb Skala tillbaka StatefulSet till 1 replik med hjälp av:

    kubectl scale --replicas=1 sts/controldb -n <namespace>
    
  8. Anslut till controldb SQL-servern som att använda lösenordet i hemligheten controller-sa-secret som sa skapades tidigare.

  9. Skapa en system inloggning med sysadmin-rollen med hjälp av lösenordet i kubernetes-hemligheten controller-system-secret enligt följande:

    CREATE LOGIN [system] WITH PASSWORD = '<password-from-secret>'
    ALTER SERVER ROLE sysadmin ADD MEMBER [system]
    
  10. Återställ säkerhetskopieringen med hjälp av RESTORE kommandot på följande sätt:

RESTORE DATABASE [controller] FROM DISK = N'/var/opt/backups/mssql/<controller backup file>.bak' WITH FILE = 1
  1. Skapa en controldb-rw-user inloggning med lösenordet i hemligheten controller-db-rw-secret CREATE LOGIN [controldb-rw-user] WITH PASSWORD = '<password-from-secret>' och associera den med den befintliga controldb-rw-user användaren i kontrollantdatabasen ALTER USER [controldb-rw-user] WITH LOGIN = [controldb-rw-user].

  2. Inaktivera inloggningen sa med TSQL – ALTER LOGIN [sa] DISABLE.

  3. controldb Redigera StatefulSet för att ta bort controller-sa-secret volymen och motsvarande volymmontering.

  4. Ta bort hemligheten controller-sa-secret .

  5. Skala styrenhetsreplikuppsättningen upp till 1 replik med kommandot kubectl scale .

Azure Data Studio-instrumentpaneler