Udostępnij za pośrednictwem


Tworzenie kopii zapasowej i odzyskiwanie bazy danych kontrolera

Podczas wdrażania usług danych usługi Azure Arc kontroler danych usługi Azure Arc jest jednym z najważniejszych składników, które są wdrażane. Funkcje kontrolera danych obejmują:

  • Aprowizacja, anulowanie aprowizacji i aktualizowanie zasobów
  • Organizowanie większości działań dla usługi SQL Managed Instance włączonej przez usługę Azure Arc, takich jak uaktualnienia, skalowanie w poziomie itp.
  • Przechwyć informacje dotyczące rozliczeń i użycia każdego wystąpienia zarządzanego usługi Arc SQL.

Aby móc wykonywać powyższe funkcje, kontroler danych musi przechowywać spis wszystkich bieżących wystąpień zarządzanych usługi Arc SQL, rozliczeń, użycia i bieżącego stanu wszystkich tych wystąpień zarządzanych SQL. Wszystkie te dane są przechowywane w bazie danych o nazwie controller w wystąpieniu programu SQL Server wdrożonym w zasobniku controldb-0 .

W tym artykule wyjaśniono, jak utworzyć kopię zapasową bazy danych kontrolera.

Tworzenie kopii zapasowej bazy danych kontrolera danych

W ramach wbudowanych funkcji baza danych controller kontrolera danych jest automatycznie tworzona co 5 minut po włączeniu kopii zapasowych. Aby włączyć kopie zapasowe:

  • Utwórz element backups-controldb PersistentVolumeClaim z klasą magazynu, która obsługuje ReadWriteMany dostęp:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: backups-controldb
  namespace: <namespace>
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 15Gi
  storageClassName: <storage-class>
  • Edytuj specyfikację zasobu niestandardowego, DataController aby uwzględnić definicję backups magazynu:
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

Pliki .bak bazy controller danych są przechowywane na backups woluminie controldb zasobnika pod adresem /var/opt/backups/mssql.

Odzyskiwanie bazy danych kontrolera

Możliwe są dwa typy odzyskiwania:

  1. controller jest uszkodzony i wystarczy przywrócić bazę danych
  2. cały magazyn zawierający controller dane i pliki dziennika jest uszkodzony/zniknął i musisz odzyskać

Scenariusz uszkodzonej bazy danych kontrolera

W tym scenariuszu wszystkie zasobniki są uruchomione, można nawiązać połączenie z controldb controller programem SQL Server i może wystąpić uszkodzenie bazy danych. Wystarczy przywrócić bazę danych z kopii zapasowej.

Wykonaj następujące kroki, aby przywrócić bazę danych kontrolera z kopii zapasowej, jeśli program SQL Server jest nadal uruchomiony na zasobniku controldb i możesz nawiązać z nim połączenie:

  1. Sprawdź łączność z zasobnikami programu SQL Server hostem controller bazy danych.

    • Najpierw pobierz poświadczenia dla wpisu tajnego. controller-system-secret to wpis tajny, który przechowuje poświadczenia dla system konta użytkownika, które może służyć do nawiązywania połączenia z wystąpieniem SQL. Uruchom następujące polecenie, aby pobrać zawartość wpisu tajnego:

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

      Na przykład:

      kubectl get secret controller-system-secret --namespace arcdataservices -o yaml
      
    • Zdekoduj poświadczenia zakodowane w formacie base64. Zawartość pliku yaml wpisu tajnego controller-system-secret zawiera element password i username. Aby zdekodować zawartość pliku , można użyć dowolnego narzędzia dekodera passwordbase64.

    • Sprawdź łączność: za pomocą dekodowanych poświadczeń uruchom polecenie, takie jak SELECT @@SERVERNAME weryfikowanie łączności z programem 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. Przeprowadź skalowanie kontrolera ReplicaSet w dół do 0 replik w następujący sposób:

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

    Na przykład:

    kubectl scale --replicas=0 rs/control -n arcdataservices
    
  3. Połącz się z programem controldb SQL Server zgodnie system z opisem w kroku 1.

  4. Usuń uszkodzoną bazę danych kontrolera przy użyciu języka T-SQL:

    DROP DATABASE controller
    
  5. Przywróć bazę danych z kopii zapasowej — po usunięciu uszkodzonej controllerdb bazy danych. Na przykład:

    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. Przeprowadź skalowanie repliki kontroleraKonskaluj kopię zapasową do 1 repliki.

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

    Na przykład:

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

Uszkodzony scenariusz magazynu

W tym scenariuszu magazyn obsługujący dane i pliki dziennika kontrolera danych ma uszkodzenie, a nowy magazyn został aprowizowany i trzeba przywrócić bazę danych kontrolera.

Wykonaj następujące kroki, aby przywrócić bazę danych kontrolera z kopii zapasowej z nowym magazynem dla zestawu controldb StatefulSet:

  1. Upewnij się, że masz kopię zapasową ostatniego znanego dobrego controller stanu bazy danych

  2. Przeprowadź skalowanie kontrolera ReplicaSet w dół do 0 replik w następujący sposób:

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

    Na przykład:

    kubectl scale --replicas=0 rs/control -n arcdataservices
    
  3. Przeprowadź skalowanie elementu controldb StatefulSet w dół do 0 replik w następujący sposób:

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

    Na przykład:

    kubectl scale --replicas=0 sts/controldb -n arcdataservices`
    
  4. Utwórz wpis tajny kubernetes o nazwie z controller-sa-secret następującym kodem YAML:

    apiVersion: v1
    kind: Secret
    metadata:
      name: controller-sa-secret
      namespace: <namespace>
    type: Opaque
    data:
      password: <base64 encoded password>
    
  5. Edytuj element StatefulSet, controldb aby uwzględnić wolumin i odpowiednią instalację controller-sa-secret woluminu (/var/run/secrets/mounts/credentials/mssql-sa-password) w kontenerze mssql-server przy użyciu kubectl edit sts controldb -n <namespace> polecenia .

  6. Utwórz nowe dane (data-controldb) i dzienniki (logs-controldb) trwałe oświadczenia woluminu controldb dla zasobnika w następujący sposób:

     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. Przeprowadź skalowanie zestawu controldb StatefulSet z powrotem do 1 repliki przy użyciu:

    kubectl scale --replicas=1 sts/controldb -n <namespace>
    
  8. Połącz się z serwerem controldb SQL jako sa przy użyciu hasła w wpisie tajnym controller-sa-secret utworzonym wcześniej.

  9. system Utwórz identyfikator logowania z rolą sysadmin przy użyciu hasła w kluczu tajnym controller-system-secret kubernetes w następujący sposób:

    CREATE LOGIN [system] WITH PASSWORD = '<password-from-secret>'
    ALTER SERVER ROLE sysadmin ADD MEMBER [system]
    
  10. Przywróć kopię zapasową przy użyciu polecenia w RESTORE następujący sposób:

RESTORE DATABASE [controller] FROM DISK = N'/var/opt/backups/mssql/<controller backup file>.bak' WITH FILE = 1
  1. controldb-rw-user Utwórz identyfikator logowania przy użyciu hasła w kluczu tajnym controller-db-rw-secret CREATE LOGIN [controldb-rw-user] WITH PASSWORD = '<password-from-secret>' i skojarz go z istniejącym controldb-rw-user użytkownikiem w bazie danych ALTER USER [controldb-rw-user] WITH LOGIN = [controldb-rw-user]kontrolera .

  2. sa Wyłącz logowanie przy użyciu języka TSQL — ALTER LOGIN [sa] DISABLE.

  3. Edytuj element StatefulSet, controldb aby usunąć wolumin i odpowiednią instalację controller-sa-secret woluminu.

  4. Usuń wpis controller-sa-secret tajny.

  5. Przeprowadź skalowanie repliki kontroleraKonskaluj kopię zapasową do 1 repliki kubectl scale przy użyciu polecenia .

Pulpity nawigacyjne usługi Azure Data Studio