Aracılığıyla paylaş


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, sağlamayı kaldırma ve güncelleştirme
  • Yükseltmeler, ölçeği genişletme gibi Azure Arc tarafından etkinleştirilen SQL Yönetilen Örneği etkinliklerinin çoğunu düzenleme.
  • 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, pod'a controldb-0 dağıtılan SQL Server örneğinde adlı controller 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 Erişimi destekleyen ReadWriteMany bir depolama sınıfıyla oluşturma:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: backups-controldb
  namespace: <namespace>
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 15Gi
  storageClassName: <storage-class>
  • Özel kaynak belirtimini DataController bir depolama tanımı içerecek şekilde backups 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

.bak Veritabanının controller dosyaları konumundaki backups podun controldb /var/opt/backups/mssqlbiriminde 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 dizi 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 dizi içeriğini almak 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 dizinin yaml dosyasının içeriği bir password ve usernameiç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 system SQL Server'a controldb bağlanın.

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

    DROP DATABASE controller
    
  5. Veritabanını yedekten geri yükleyin; bozuk controllerdb olan 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 çoğaltmaya kadar ö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 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. StatefulSet'i controldb aşağıdaki gibi 0 çoğaltmaya ölçeklendirin:

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

    Örneğin:

    kubectl scale --replicas=0 sts/controldb -n arcdataservices`
    
  4. Aşağıdaki YAML ile adlı controller-sa-secret bir kubernetes gizli dizisi oluşturun:

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

  6. Pod için controldb aşağıdaki gibi yeni veriler (data-controldb) ve günlükler (logs-controldb) kalıcı birim talepleri oluşturun:

     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 çoğaltmaya ölçeklendirin:

    kubectl scale --replicas=1 sts/controldb -n <namespace>
    
  8. controldb Daha önce oluşturulan gizli dizideki parolayı kullanarak SQL sunucusuna sa controller-sa-secret bağlanın.

  9. Aşağıdaki gibi kubernetes gizli dizisindeki controller-system-secret parolayı kullanarak sysadmin rolüyle oturum system açma bilgileri 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. Gizli dizideki controller-db-rw-secret parolayı kullanarak oturum controldb-rw-user açma bilgileri oluşturun ve bunu denetleyici DB'deki mevcut controldb-rw-user kullanıcıyla ilişkilendirinALTER USER [controldb-rw-user] WITH LOGIN = [controldb-rw-user].CREATE LOGIN [controldb-rw-user] WITH PASSWORD = '<password-from-secret>'

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

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

  4. Gizli diziyi controller-sa-secret silin.

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

Azure Data Studio panoları