Bagikan melalui


Mencadangkan dan memulihkan database pengontrol

Saat Anda menyebarkan layanan data Azure Arc, Pengontrol Data Azure Arc adalah salah satu komponen paling penting yang disebarkan. Fungsi pengontrol data meliputi:

  • Menyediakan, mendeprovisi, dan memperbarui sumber daya
  • Mengatur sebagian besar aktivitas untuk SQL Managed Instance yang diaktifkan oleh Azure Arc seperti peningkatan, peluasan skala, dll.
  • Ambil informasi penagihan dan penggunaan setiap instans terkelola Arc SQL.

Untuk melakukan fungsi di atas, pengontrol Data perlu menyimpan inventaris semua instans terkelola Arc SQL saat ini, penagihan, penggunaan, dan status saat ini dari semua instans terkelola SQL ini. Semua data ini disimpan dalam database yang disebut controller dalam instans SQL Server yang disebarkan ke controldb-0 dalam pod.

Artikel ini menjelaskan cara mencadangkan database pengontrol.

Mencadangkan database pengontrol data

Sebagai bagian dari kemampuan bawaan, database controller Pengontrol data secara otomatis dicadangkan setiap 5 menit setelah cadangan diaktifkan. Untuk mengaktifkan pencadangan:

  • Buat backups-controldbPersistentVolumeClaim dengan kelas penyimpanan yang mendukung ReadWriteMany akses:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: backups-controldb
  namespace: <namespace>
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 15Gi
  storageClassName: <storage-class>
  • DataController Edit spesifikasi sumber daya kustom untuk menyertakan backups definisi penyimpanan:
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

File .bak untuk controller database disimpan pada backups volume controldb pod di /var/opt/backups/mssql.

Memulihkan database pengontrol

Ada dua jenis pemulihan yang mungkin:

  1. controller rusak dan Anda hanya perlu memulihkan database
  2. seluruh penyimpanan yang berisi controller data dan file log rusak/hilang dan Anda perlu memulihkan

Skenario database pengontrol rusak

Dalam skenario ini, semua pod aktif dan berjalan, Anda dapat terhubung ke controldb SQL Server, dan mungkin ada kerusakan dengan controller database. Anda hanya perlu memulihkan database dari cadangan.

Ikuti langkah-langkah ini untuk memulihkan database pengontrol dari cadangan, jika SQL Server masih aktif dan berjalan di controldb pod, dan Anda dapat terhubung ke sana:

  1. Verifikasi konektivitas ke pod SQL Server yang menghosting controller database.

    • Pertama, ambil kredensial untuk rahasia. controller-system-secret adalah rahasia yang menyimpan kredensial untuk system akun pengguna yang dapat digunakan untuk terhubung ke instans SQL. Jalankan perintah berikut untuk mengambil konten rahasia:

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

      Contohnya:

      kubectl get secret controller-system-secret --namespace arcdataservices -o yaml
      
    • Dekode kredensial yang dikodekan base64. Isi file yaml rahasia controller-system-secret berisi password dan username. Anda dapat menggunakan alat dekoder base64 apa pun untuk mendekode konten password.

    • Verifikasi konektivitas: Dengan kredensial yang didekodekan, jalankan perintah seperti SELECT @@SERVERNAME untuk memverifikasi konektivitas ke 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. Turunkan skala ReplicaSet pengontrol ke 0 replika sebagai berikut:

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

    Contohnya:

    kubectl scale --replicas=0 rs/control -n arcdataservices
    
  3. Koneksi ke controldb SQL Server seperti system yang dijelaskan di langkah 1.

  4. Hapus database pengontrol yang rusak menggunakan T-SQL:

    DROP DATABASE controller
    
  5. Pulihkan database dari cadangan - setelah rusak dihilangkan controllerdb . Contohnya:

    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. Skalakan ReplicaSet pengontrol Cadangkan hingga 1 replika.

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

    Contohnya:

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

Skenario penyimpanan yang rusak

Dalam skenario ini, penyimpanan yang menghosting data pengontrol data dan file log, mengalami kerusakan dan penyimpanan baru disediakan dan Anda perlu memulihkan database pengontrol.

Ikuti langkah-langkah ini untuk memulihkan database pengontrol dari cadangan dengan penyimpanan baru untuk controldb StatefulSet:

  1. Pastikan Anda memiliki cadangan status baik database terakhir yang controller diketahui

  2. Turunkan skala ReplicaSet pengontrol ke 0 replika sebagai berikut:

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

    Contohnya:

    kubectl scale --replicas=0 rs/control -n arcdataservices
    
  3. Turunkan controldb Skala StatefulSet ke 0 replika, sebagai berikut:

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

    Contohnya:

    kubectl scale --replicas=0 sts/controldb -n arcdataservices`
    
  4. Buat rahasia kubernetes bernama controller-sa-secret dengan YAML berikut:

    apiVersion: v1
    kind: Secret
    metadata:
      name: controller-sa-secret
      namespace: <namespace>
    type: Opaque
    data:
      password: <base64 encoded password>
    
  5. controldb Edit StatefulSet untuk menyertakan controller-sa-secret volume dan pemasangan volume yang sesuai (/var/run/secrets/mounts/credentials/mssql-sa-password) dalam mssql-server kontainer, dengan menggunakan kubectl edit sts controldb -n <namespace> perintah .

  6. Buat data baru (data-controldb) dan log (logs-controldb) klaim volume persisten untuk controldb pod sebagai berikut:

     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. Skalakan controldb StatefulSet kembali ke 1 replika menggunakan:

    kubectl scale --replicas=1 sts/controldb -n <namespace>
    
  8. Koneksi ke controldb Server SQL seperti sa menggunakan kata sandi dalam rahasia yang controller-sa-secret dibuat sebelumnya.

  9. Buat system login dengan peran sysadmin menggunakan kata sandi di controller-system-secret rahasia kubernetes sebagai berikut:

    CREATE LOGIN [system] WITH PASSWORD = '<password-from-secret>'
    ALTER SERVER ROLE sysadmin ADD MEMBER [system]
    
  10. Pulihkan cadangan menggunakan RESTORE perintah sebagai berikut:

RESTORE DATABASE [controller] FROM DISK = N'/var/opt/backups/mssql/<controller backup file>.bak' WITH FILE = 1
  1. Buat controldb-rw-user login menggunakan kata sandi di controller-db-rw-secret rahasia CREATE LOGIN [controldb-rw-user] WITH PASSWORD = '<password-from-secret>' dan kaitkan dengan pengguna yang ada controldb-rw-user di pengontrol DB ALTER USER [controldb-rw-user] WITH LOGIN = [controldb-rw-user].

  2. sa Nonaktifkan login menggunakan TSQL - ALTER LOGIN [sa] DISABLE.

  3. controldb Edit StatefulSet untuk menghapus controller-sa-secret volume dan pemasangan volume yang sesuai.

  4. controller-sa-secret Hapus rahasia.

  5. Skalakan ReplicaSet pengontrol Cadangkan hingga 1 replika menggunakan kubectl scale perintah .

Dasbor Azure Data Studio