Zálohování a obnovení databáze kontroleru

Při nasazování datových služeb Azure Arc je kontroler dat Azure Arc jednou z nejdůležitějších komponent, které se nasazují. Mezi funkce kontroleru dat patří:

  • Zřízení, zrušení zřízení a aktualizace prostředků
  • Orchestrace většiny aktivit pro spravovanou instanci SQL povolenou službou Azure Arc, jako jsou upgrady, horizontální navýšení kapacity atd.
  • Zachyťte informace o fakturaci a využití každé spravované instance Arc SQL.

Aby bylo možné provádět výše uvedené funkce, musí kontroler dat ukládat inventář všech aktuálních instancí spravovaných službou Arc SQL, fakturaci, využití a aktuální stav všech těchto spravovaných instancí SQL. Všechna tato data jsou uložena v databázi volané controller v instanci SQL Serveru, která je nasazena do podu controldb-0 .

Tento článek vysvětluje, jak zálohovat databázi kontroleru.

Zálohování databáze kontroleru dat

V rámci integrovaných funkcí se databáze controller kontroleru dat automaticky zálohuje každých 5 minut, jakmile se povolí zálohování. Povolení záloh:

  • Vytvořte s backups-controldbPersistentVolumeClaim třídou úložiště, která podporuje ReadWriteMany přístup:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: backups-controldb
  namespace: <namespace>
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 15Gi
  storageClassName: <storage-class>
  • Upravte specifikaci vlastního DataController prostředku tak, aby obsahovala definici backups úložiště:
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

Soubory .bak databáze controller jsou uloženy na backups svazku podu controldb na adrese /var/opt/backups/mssql.

Obnovení databáze kontroleru

Existují dva typy možného obnovení:

  1. controller je poškozen a stačí obnovit databázi.
  2. celé úložiště, které obsahuje controller data a soubory protokolů, jsou poškozené nebo pryč a potřebujete provést obnovení.

Scénář databáze poškozeného kontroleru

V tomto scénáři jsou všechny pody spuštěné, můžete se připojit k controldb SQL Serveru a může dojít k poškození controller databáze. Stačí obnovit databázi ze zálohy.

Pokud je sql Server stále v provozu a běží na podu controldb , obnovte databázi kontroleru ze zálohy a můžete se k ní připojit:

  1. Ověřte připojení k podu SQL Serveru, který je hostitelem controller databáze.

    • Nejprve načtěte přihlašovací údaje pro tajný klíč. controller-system-secret je tajný klíč, který obsahuje přihlašovací údaje pro system uživatelský účet, který lze použít pro připojení k instanci SQL. Spuštěním následujícího příkazu načtěte obsah tajného kódu:

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

      Příklad:

      kubectl get secret controller-system-secret --namespace arcdataservices -o yaml
      
    • Dekódujte přihlašovací údaje zakódované v base64. Obsah souboru yaml tajného klíče controller-system-secret obsahuje a passwordusername. K dekódování obsahu passworddekódovače base64 můžete použít jakýkoli dekódovací nástroj base64 .

    • Ověřte připojení: Pomocí dekódovaných přihlašovacích údajů spusťte příkaz, například SELECT @@SERVERNAME k ověření připojení k SQL Serveru.

      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. Škálujte sadu replik kontroleru na 0 replik následujícím způsobem:

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

    Příklad:

    kubectl scale --replicas=0 rs/control -n arcdataservices
    
  3. Připojení na controldb SQL Server, jak system je popsáno v kroku 1.

  4. Odstraňte poškozenou databázi kontroleru pomocí T-SQL:

    DROP DATABASE controller
    
  5. Obnovte databázi ze zálohy – po vyřazení poškozené controllerdb databáze. Příklad:

    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. Škálujte repliku repliky kontroleru zpět na 1 repliku.

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

    Příklad:

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

Scénář poškozeného úložiště

V tomto scénáři má úložiště hostující data kontroleru dat a soubory protokolů poškození a nové úložiště bylo zřízeno a potřebujete obnovit databázi kontroleru.

Následujícím postupem obnovíte databázi kontroleru ze zálohy s novým úložištěm pro controldb StatefulSet:

  1. Ujistěte se, že máte zálohu posledního známého dobrého controller stavu databáze.

  2. Škálujte sadu replik kontroleru na 0 replik následujícím způsobem:

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

    Příklad:

    kubectl scale --replicas=0 rs/control -n arcdataservices
    
  3. Škálujte controldb stavovou sadu dolů na 0 replik, a to následujícím způsobem:

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

    Příklad:

    kubectl scale --replicas=0 sts/controldb -n arcdataservices`
    
  4. Vytvořte tajný kód Kubernetes s názvem controller-sa-secret s následujícím YAML:

    apiVersion: v1
    kind: Secret
    metadata:
      name: controller-sa-secret
      namespace: <namespace>
    type: Opaque
    data:
      password: <base64 encoded password>
    
  5. controldb Upravte StatefulSet tak, aby zahrnoval controller-sa-secret svazek a odpovídající připojení svazku (/var/run/secrets/mounts/credentials/mssql-sa-password) v kontejneru mssql-server pomocí kubectl edit sts controldb -n <namespace> příkazu.

  6. Vytvořte nová data (data-controldb) a protokoly (logs-controldb) deklarace trvalých svazků pro pod controldb následujícím způsobem:

     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. Škálujte controldb StatefulSet zpět na 1 repliku pomocí:

    kubectl scale --replicas=1 sts/controldb -n <namespace>
    
  8. Připojení na controldb SQL Server jako sa heslo v dříve vytvořeném tajném controller-sa-secret kódu.

  9. Pomocí hesla v tajném controller-system-secret kódu Kubernetes vytvořte system přihlašovací jméno s rolí sysadmin následujícím způsobem:

    CREATE LOGIN [system] WITH PASSWORD = '<password-from-secret>'
    ALTER SERVER ROLE sysadmin ADD MEMBER [system]
    
  10. Pomocí následujícího příkazu obnovte zálohu RESTORE :

RESTORE DATABASE [controller] FROM DISK = N'/var/opt/backups/mssql/<controller backup file>.bak' WITH FILE = 1
  1. controldb-rw-user Vytvořte přihlášení pomocí hesla v tajném controller-db-rw-secret kódu CREATE LOGIN [controldb-rw-user] WITH PASSWORD = '<password-from-secret>' a přidružte ho k existujícímu controldb-rw-user uživateli v databázi kontroleru ALTER USER [controldb-rw-user] WITH LOGIN = [controldb-rw-user].

  2. Zakažte sa přihlášení pomocí TSQL – ALTER LOGIN [sa] DISABLE.

  3. controldb Upravte StatefulSet tak, aby se odebral controller-sa-secret svazek a odpovídající připojení svazku.

  4. controller-sa-secret Odstraňte tajný kód.

  5. Pomocí příkazu škálujte repliku repliky kontroleru na 1 repliku kubectl scale .

Řídicí panely nástroje Azure Data Studio