Denetleyici veritabanını yedekleme ve kurtarma

Azure Arc veri hizmetlerini dağıttığınızda Azure Arc Veri Denetleyicisi dağıtılan en kritik bileşenlerden biridir. Veri denetleyicisinin işlevleri şunlardır:

  • Kaynakları sağlama, kaldırma ve güncelleştirme
  • Azure Arc tarafından etkinleştirilen SQL Yönetilen Örnek için yükseltmeler, ölçeği genişletme gibi etkinliklerin çoğunu koordine etme.
  • Arc SQL yönetilen örneklerinin faturalama ve kullanım bilgilerini yakalayın.

Yukarıdaki işlevleri gerçekleştirmek için Veri denetleyicisinin tüm geçerli Arc SQL yönetilen örneklerinin, faturalamanın, kullanımın ve tüm bu SQL yönetilen örneklerinin geçerli durumunun bir envanterini depolaması gerekir. Tüm bu veriler, controldb-0 pod'una dağıtılan SQL Server örneğindeki controller adlı bir veritabanında depolanır.

Bu makalede denetleyici veritabanını yedekleme açıklanmaktadır.

Veri denetleyicisi veritabanını yedekleme

Yerleşik özelliklerin bir parçası olarak, yedeklemeler etkinleştirildikten sonra Veri denetleyicisi veritabanı controller her 5 dakikada bir otomatik olarak yedeklenir. Yedeklemeleri etkinleştirmek için:

  • backups-controldb PersistentVolumeClaim oluşturun, ReadWriteMany erişimini destekleyen bir depolama sınıfıyla:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: backups-controldb
  namespace: <namespace>
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 15Gi
  storageClassName: <storage-class>
  • Özel kaynak belirtimini DataControllerbackups bir depolama tanımını içerecek şekilde düzenleyin.
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

controller veritabanı için .bak dosyalar, /var/opt/backups/mssql'deki controldb podunun backups biriminde depolanır.

Denetleyici veritabanını kurtarma

İki tür kurtarma mümkündür:

  1. controller bozuk ve yalnızca veritabanını geri yüklemeniz gerekiyor
  2. veri ve günlük dosyalarını içeren controller tüm depolama alanı bozuk/yok ve kurtarmanız gerekiyor

Bozuk denetleyici veritabanı senaryosu

Bu senaryoda tüm podlar çalışır durumdadır, SQL Server'a controldb bağlanabilirsiniz ve veritabanında bir bozulma controller olabilir. Veritabanını yedekten geri yüklemeniz yeterlidir.

SQL Server pod üzerinde controldb çalışmaya devam ediyorsa ve buna bağlanabiliyorsanız denetleyici veritabanını yedekten geri yüklemek için şu adımları izleyin:

  1. Veritabanını barındıran SQL Server podunun controller bağlantısını doğrulayın.

    • İlk olarak, gizli anahtar için kimlik bilgilerini alın. controller-system-secret , SQL örneğine bağlanmak için system kullanılabilecek kullanıcı hesabının kimlik bilgilerini tutan gizli dizidir. Gizli içeriği elde etmek için aşağıdaki komutu çalıştırın:

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

      Örneğin:

      kubectl get secret controller-system-secret --namespace arcdataservices -o yaml
      
    • base64 kodlanmış kimlik bilgilerinin kodunu çözme. Gizli controller-system-secret öğesinin yaml dosyasının içeriği bir password ve username içerir. içeriğinin kodunu passwordçözmek için herhangi bir base64 kod çözücü aracını kullanabilirsiniz.

    • Bağlantıyı doğrulama: Kodu çözülen kimlik bilgileriyle, SQL Server bağlantısını doğrulamak için gibi SELECT @@SERVERNAME bir komut çalıştırın.

      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. ReplicaSet denetleyicisini aşağıdaki gibi 0 çoğaltmaya ölçeklendirin:

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

    Örneğin:

    kubectl scale --replicas=0 rs/control -n arcdataservices
    
  3. 1. adımda açıklandığı gibi controldb SQL Server'a system bağlanın.

  4. Bozuk denetleyici veritabanını T-SQL kullanarak silin:

    DROP DATABASE controller
    
  5. Veritabanını yedekten geri yükleyin, bozuk controllerdb bırakıldıktan sonra. Örneğin:

    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. ReplicaSet denetleyicisini 1 kopyaya geri ölçeklendirin.

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

    Örneğin:

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

Bozuk depolama senaryosu

Bu senaryoda, Veri denetleyicisi verilerini ve günlük dosyalarını barındıran depolamada bozulma var ve yeni bir depolama alanı sağlandı ve denetleyici veritabanını geri yüklemeniz gerekiyor.

StatefulSet için yeni depolama alanıyla denetleyici veritabanını yedekten geri yüklemek için controldb şu adımları izleyin:

  1. Veritabanının bilinen son iyi durumunun yedeğine sahip olduğunuzdan controller emin olun

  2. ReplicaSet Denetleyici’yi 0 özdeş kopyaya ölçeklendirin:

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

    Örneğin:

    kubectl scale --replicas=0 rs/control -n arcdataservices
    
  3. StatefulSet'i controldb 0 kopyaya aşağıdaki gibi ölçeklendirin.

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

    Örneğin:

    kubectl scale --replicas=0 sts/controldb -n arcdataservices`
    
  4. controller-sa-secret adında bir kubernetes gizli nesnesi oluşturmak için aşağıdaki YAML'ı kullanın:

    apiVersion: v1
    kind: Secret
    metadata:
      name: controller-sa-secret
      namespace: <namespace>
    type: Opaque
    data:
      password: <base64 encoded password>
    
  5. StatefulSet'i controldb düzenleyin, kubectl edit sts controldb -n <namespace> komutunu kullanarak controller-sa-secret biriminin ve karşılık gelen birim bağlamasının /var/run/secrets/mounts/credentials/mssql-sa-password, mssql-server kapsayıcıda yer almasını sağlayın.

  6. Yeni veri (data-controldb) ve günlükler (logs-controldb) kalıcı birim talepleri oluşturmak için controldb pod'u aşağıdaki gibi yapılandırın:

     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. StatefulSet'i controldb kullanarak yeniden 1 kopyaya geri ölçeklendirin.

    kubectl scale --replicas=1 sts/controldb -n <namespace>
    
  8. SQL sunucusuna sa şeklinde bağlanmak için daha önce oluşturulan controller-sa-secret gizli bölümündeki parolayı kullanın.

  9. Kubernetes gizli anahtarındaki controller-system-secret parolayı kullanarak system sysadmin rolüne sahip bir oturum oluşturun:

    CREATE LOGIN [system] WITH PASSWORD = '<password-from-secret>'
    ALTER SERVER ROLE sysadmin ADD MEMBER [system]
    
  10. Aşağıdaki komutu kullanarak yedeklemeyi RESTORE geri yükleyin:

RESTORE DATABASE [controller] FROM DISK = N'/var/opt/backups/mssql/<controller backup file>.bak' WITH FILE = 1
  1. controldb-rw-user Gizli controller-db-rw-secret dizideki parolayı kullanarak bir oturum açma bilgisi oluşturun ve bunu denetleyici DB controldb-rw-user'deki mevcut kullanıcıyla ilişkilendirin ALTER USER [controldb-rw-user] WITH LOGIN = [controldb-rw-user].

  2. sa TSQL kullanarak oturum açmayı devre dışı bırakın - ALTER LOGIN [sa] DISABLE.

  3. StatefulSet'i controldb düzenleyerek controller-sa-secret hacmi ve ilgili hacim bağlamasını kaldırın.

  4. Gizli anahtarı controller-sa-secret silin.

  5. kubectl scale komutunu kullanarak ReplicaSet denetleyicisini tekrar 1 çoğaltmaya ölçeklendirin.