Поделиться через


Резервное копирование и восстановление базы данных контроллера

При развертывании служб данных Azure Arc контроллер данных Azure Arc является одним из наиболее важных компонентов, которые развертываются. К функциям контроллера данных относятся следующие функции:

  • Подготовка, отмена подготовки и обновления ресурсов
  • Оркестрируйте большинство действий для Управляемый экземпляр SQL, включенных Azure Arc, таких как обновления, горизонтальное масштабирование и т. д.
  • Захватить сведения о выставлении счетов и использовании каждого управляемого экземпляра Arc SQL.

Для выполнения указанных выше функций контроллер данных должен хранить инвентаризацию всех текущих управляемых экземпляров Arc SQL, выставления счетов, использования и текущего состояния всех этих управляемых экземпляров SQL. Все эти данные хранятся в базе данных, вызываемой controller в экземпляре SQL Server, развернутом в модуле controldb-0 pod.

В этой статье объясняется, как создать резервную копию базы данных контроллера.

Резервное копирование базы данных контроллера данных

В рамках встроенных возможностей база данных контроллера данных controller автоматически выполняет резервное копирование каждые 5 минут после включения резервного копирования. Чтобы включить резервные копии, выполните приведенные далее действия.

  • backups-controldb PersistentVolumeClaim Создайте класс хранилища, поддерживающий ReadWriteMany доступ:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: backups-controldb
  namespace: <namespace>
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 15Gi
  storageClassName: <storage-class>
  • Измените DataController настраиваемую backups спецификацию ресурсов, чтобы включить определение хранилища:
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 для controller базы данных хранятся в backups томе controldb модуля pod по адресу /var/opt/backups/mssql.

Восстановление базы данных контроллера

Существует два типа восстановления:

  1. controller поврежден, и вам просто нужно восстановить базу данных.
  2. Все хранилище, содержащее файлы данных и журналов controller , повреждено или удалено, и необходимо восстановить

Сценарий поврежденной базы данных контроллера

В этом сценарии все модули pod выполняются и работают, вы можете подключиться к controldb SQL Server, и может возникнуть повреждение базы controller данных. Необходимо просто восстановить базу данных из резервной копии.

Выполните следующие действия, чтобы восстановить базу данных контроллера из резервной копии, если SQL Server по-прежнему работает и работает в pod, и вы можете подключиться к ней controldb :

  1. Проверьте подключение к pod SQL Server, на котором размещена controller база данных.

    • Сначала получите учетные данные для секрета. controller-system-secret — секрет, содержащий учетные данные для учетной записи пользователя, которую можно использовать для system подключения к экземпляру SQL. Выполните следующую команду, чтобы получить содержимое секрета:

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

      Например:

      kubectl get secret controller-system-secret --namespace arcdataservices -o yaml
      
    • Декодирование учетных данных в кодировке Base64. Содержимое yaml-файла секрета controller-system-secret содержит и password username. Для декодирования содержимого passwordдекодировщика base64 можно использовать любое средство декодирования base64.

    • Проверка подключения: с декодированных учетных данных выполните команду, например SELECT @@SERVERNAME , чтобы проверить подключение к 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. Масштабируйте набор реплик контроллера до 0 реплик следующим образом:

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

    Например:

    kubectl scale --replicas=0 rs/control -n arcdataservices
    
  3. Подключитесь к SQL Server, как system описано на шаге controldb 1.

  4. Удалите поврежденную базу данных контроллера с помощью T-SQL:

    DROP DATABASE controller
    
  5. Восстановите базу данных из резервной копии после удаления поврежденной controllerdb базы данных. Например:

    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. Масштабирование реплики контроллера до 1 реплики.

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

    Например:

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

Сценарий поврежденного хранилища

В этом сценарии хранилище, в котором размещаются данные контроллера данных и файлы журналов, имеет повреждение и подготовлено новое хранилище, и необходимо восстановить базу данных контроллера.

Выполните следующие действия, чтобы восстановить базу данных контроллера из резервной копии с новым хранилищем controldb для StatefulSet:

  1. Убедитесь, что у вас есть резервная копия последнего известного хорошего controller состояния базы данных

  2. Масштабируйте набор реплик контроллера до 0 реплик следующим образом:

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

    Например:

    kubectl scale --replicas=0 rs/control -n arcdataservices
    
  3. Выполните масштабирование controldb statefulSet до 0 реплик, как показано ниже.

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

    Например:

    kubectl scale --replicas=0 sts/controldb -n arcdataservices`
    
  4. Создайте секрет controller-sa-secret Kubernetes с именем следующего YAML:

    apiVersion: v1
    kind: Secret
    metadata:
      name: controller-sa-secret
      namespace: <namespace>
    type: Opaque
    data:
      password: <base64 encoded password>
    
  5. controldb Измените StatefulSet, чтобы включить controller-sa-secret том и соответствующее подключение тома mssql-server (/var/run/secrets/mounts/credentials/mssql-sa-password) в контейнер с помощью kubectl edit sts controldb -n <namespace> команды.

  6. Создайте новые данные () и журналы (data-controldblogs-controldb) утверждения сохраняемого тома для controldb модуля pod следующим образом:

     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 до 1 реплики controldb с помощью:

    kubectl scale --replicas=1 sts/controldb -n <namespace>
    
  8. Подключитесь к controldb СЕРВЕРУ SQL Server в качестве sa пароля в созданном ранее секрете controller-sa-secret .

  9. system Создайте имя входа с ролью sysadmin с помощью пароля в секрете controller-system-secret Kubernetes следующим образом:

    CREATE LOGIN [system] WITH PASSWORD = '<password-from-secret>'
    ALTER SERVER ROLE sysadmin ADD MEMBER [system]
    
  10. Восстановите резервную копию с помощью RESTORE команды следующим образом:

RESTORE DATABASE [controller] FROM DISK = N'/var/opt/backups/mssql/<controller backup file>.bak' WITH FILE = 1
  1. controldb-rw-user Создайте имя входа с помощью пароля в секрете CREATE LOGIN [controldb-rw-user] WITH PASSWORD = '<password-from-secret>' controller-db-rw-secret и свяжите его с существующим controldb-rw-user пользователем в базе данных ALTER USER [controldb-rw-user] WITH LOGIN = [controldb-rw-user]контроллера.

  2. sa Отключите имя входа с помощью TSQL — ALTER LOGIN [sa] DISABLE.

  3. Измените controldb statefulSet, чтобы удалить том и соответствующее controller-sa-secret подключение тома.

  4. controller-sa-secret Удалите секрет.

  5. Масштабирование реплики контроллера до 1 реплики kubectl scale с помощью команды.

Панели мониторинга Azure Data Studio