Резервное копирование и восстановление базы данных контроллера
При развертывании служб данных 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
.
Восстановление базы данных контроллера
Существует два типа восстановления:
controller
поврежден, и вам просто нужно восстановить базу данных.- Все хранилище, содержащее файлы данных и журналов
controller
, повреждено или удалено, и необходимо восстановить
Сценарий поврежденной базы данных контроллера
В этом сценарии все модули pod выполняются и работают, вы можете подключиться к controldb
SQL Server, и может возникнуть повреждение базы controller
данных. Необходимо просто восстановить базу данных из резервной копии.
Выполните следующие действия, чтобы восстановить базу данных контроллера из резервной копии, если SQL Server по-прежнему работает и работает в pod, и вы можете подключиться к ней controldb
:
Проверьте подключение к 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"
Масштабируйте набор реплик контроллера до 0 реплик следующим образом:
kubectl scale --replicas=0 rs/control -n <namespace>`
Например:
kubectl scale --replicas=0 rs/control -n arcdataservices
Подключитесь к SQL Server, как
system
описано на шагеcontroldb
1.Удалите поврежденную базу данных контроллера с помощью T-SQL:
DROP DATABASE controller
Восстановите базу данных из резервной копии после удаления поврежденной
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
Масштабирование реплики контроллера до 1 реплики.
kubectl scale --replicas=1 rs/control -n <namespace>
Например:
kubectl scale --replicas=1 rs/control -n arcdataservices
Сценарий поврежденного хранилища
В этом сценарии хранилище, в котором размещаются данные контроллера данных и файлы журналов, имеет повреждение и подготовлено новое хранилище, и необходимо восстановить базу данных контроллера.
Выполните следующие действия, чтобы восстановить базу данных контроллера из резервной копии с новым хранилищем controldb
для StatefulSet:
Убедитесь, что у вас есть резервная копия последнего известного хорошего
controller
состояния базы данныхМасштабируйте набор реплик контроллера до 0 реплик следующим образом:
kubectl scale --replicas=0 rs/control -n <namespace>
Например:
kubectl scale --replicas=0 rs/control -n arcdataservices
Выполните масштабирование
controldb
statefulSet до 0 реплик, как показано ниже.kubectl scale --replicas=0 sts/controldb -n <namespace>
Например:
kubectl scale --replicas=0 sts/controldb -n arcdataservices`
Создайте секрет
controller-sa-secret
Kubernetes с именем следующего YAML:apiVersion: v1 kind: Secret metadata: name: controller-sa-secret namespace: <namespace> type: Opaque data: password: <base64 encoded password>
controldb
Измените StatefulSet, чтобы включитьcontroller-sa-secret
том и соответствующее подключение томаmssql-server
(/var/run/secrets/mounts/credentials/mssql-sa-password
) в контейнер с помощьюkubectl edit sts controldb -n <namespace>
команды.Создайте новые данные () и журналы (
data-controldb
logs-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>
Выполните масштабирование StatefulSet до 1 реплики
controldb
с помощью:kubectl scale --replicas=1 sts/controldb -n <namespace>
Подключитесь к
controldb
СЕРВЕРУ SQL Server в качествеsa
пароля в созданном ранее секретеcontroller-sa-secret
.system
Создайте имя входа с ролью sysadmin с помощью пароля в секретеcontroller-system-secret
Kubernetes следующим образом:CREATE LOGIN [system] WITH PASSWORD = '<password-from-secret>' ALTER SERVER ROLE sysadmin ADD MEMBER [system]
Восстановите резервную копию с помощью
RESTORE
команды следующим образом:
RESTORE DATABASE [controller] FROM DISK = N'/var/opt/backups/mssql/<controller backup file>.bak' WITH FILE = 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]
контроллера.sa
Отключите имя входа с помощью TSQL —ALTER LOGIN [sa] DISABLE
.Измените
controldb
statefulSet, чтобы удалить том и соответствующееcontroller-sa-secret
подключение тома.controller-sa-secret
Удалите секрет.Масштабирование реплики контроллера до 1 реплики
kubectl scale
с помощью команды.