Fazer backup e recuperar o banco de dados do controlador
Quando você implanta os serviços de dados do Azure Arc, o Controlador de Dados do Azure Arc é um dos componentes mais críticos implantados. As funções do responsável pelo tratamento de dados incluem:
- Provisionamento, desprovisionamento e atualização de recursos
- Orquestre a maioria das atividades da Instância Gerenciada SQL habilitada pelo Azure Arc, como atualizações, dimensionamento, etc.
- Capture as informações de faturamento e uso de cada instância gerenciada do Arc SQL.
Para executar as funções acima, o controlador de dados precisa armazenar um inventário de todas as instâncias gerenciadas atuais do Arc SQL, faturamento, uso e o estado atual de todas essas instâncias gerenciadas pelo SQL. Todos esses dados são armazenados em um banco de dados chamado controller
dentro da instância do SQL Server que é implantada controldb-0
no pod.
Este artigo explica como fazer backup do banco de dados do controlador.
Fazer backup do banco de dados do controlador de dados
Como parte dos recursos internos, o backup do banco de dados controller
do controlador de dados é feito automaticamente a cada 5 minutos, uma vez que os backups são ativados. Para habilitar backups:
- Crie um
backups-controldb
PersistentVolumeClaim
com uma classe de armazenamento que ofereça suporte aoReadWriteMany
acesso:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: backups-controldb
namespace: <namespace>
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 15Gi
storageClassName: <storage-class>
- Edite a especificação de
DataController
recurso personalizada para incluir uma definição debackups
armazenamento:
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
Os .bak
arquivos para o controller
banco de dados são armazenados no backups
volume do controldb
pod em /var/opt/backups/mssql
.
Recuperar banco de dados do controlador
Existem dois tipos de recuperação possíveis:
controller
está corrompido e você só precisa restaurar o banco de dados- Todo o armazenamento que contém os dados e arquivos de
controller
log está corrompido / desaparecido e você precisa recuperar
Cenário de banco de dados do controlador corrompido
Nesse cenário, todos os pods estão ativos e em execução, você é capaz de se conectar ao controldb
SQL Server e pode haver uma corrupção com o controller
banco de dados. Você só precisa restaurar o banco de dados a partir de um backup.
Siga estas etapas para restaurar o banco de dados do controlador a partir de um backup, se o SQL Server ainda estiver ativo e em execução no controldb
pod e você puder se conectar a ele:
Verifique a conectividade com o pod do SQL Server que hospeda o
controller
banco de dados.Primeiro, recupere as credenciais do segredo.
controller-system-secret
é o segredo que contém as credenciais dasystem
conta de usuário que pode ser usada para se conectar à instância SQL. Execute o seguinte comando para recuperar o conteúdo secreto:kubectl get secret controller-system-secret --namespace [namespace] -o yaml
Por exemplo:
kubectl get secret controller-system-secret --namespace arcdataservices -o yaml
Decodifice as credenciais codificadas em base64. O conteúdo do arquivo yaml do segredo
controller-system-secret
contém umpassword
eusername
. Você pode usar qualquer ferramenta de decodificador base64 para decodificar o conteúdo dopassword
.Verificar conectividade: com as credenciais decodificadas, execute um comando como
SELECT @@SERVERNAME
verificar a conectividade com o 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"
Dimensione o controlador ReplicaSet para 0 réplicas da seguinte maneira:
kubectl scale --replicas=0 rs/control -n <namespace>`
Por exemplo:
kubectl scale --replicas=0 rs/control -n arcdataservices
Conecte-se ao
controldb
SQL Server conformesystem
descrito na etapa 1.Exclua o banco de dados do controlador corrompido usando T-SQL:
DROP DATABASE controller
Restaure o banco de dados a partir do backup - depois que o corrompido
controllerdb
for descartado. Por exemplo: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
Dimensione o controlador ReplicaSet de volta para 1 réplica.
kubectl scale --replicas=1 rs/control -n <namespace>
Por exemplo:
kubectl scale --replicas=1 rs/control -n arcdataservices
Cenário de armazenamento corrompido
Nesse cenário, o armazenamento que hospeda os dados do controlador de dados e arquivos de log, tem corrupção e um novo armazenamento foi provisionado e você precisa restaurar o banco de dados do controlador.
Siga estas etapas para restaurar o banco de dados do controlador a partir de um backup com novo armazenamento para o controldb
StatefulSet:
Certifique-se de ter um backup do último estado válido conhecido do
controller
banco de dadosDimensione o controlador ReplicaSet para 0 réplicas da seguinte maneira:
kubectl scale --replicas=0 rs/control -n <namespace>
Por exemplo:
kubectl scale --replicas=0 rs/control -n arcdataservices
Dimensione o
controldb
StatefulSet para 0 réplicas, da seguinte maneira:kubectl scale --replicas=0 sts/controldb -n <namespace>
Por exemplo:
kubectl scale --replicas=0 sts/controldb -n arcdataservices`
Crie um segredo de kubernetes nomeado
controller-sa-secret
com o seguinte YAML:apiVersion: v1 kind: Secret metadata: name: controller-sa-secret namespace: <namespace> type: Opaque data: password: <base64 encoded password>
Edite o
controldb
StatefulSet para incluir um volume e acontroller-sa-secret
montagem de volume correspondente (/var/run/secrets/mounts/credentials/mssql-sa-password
) no contêiner, usandokubectl edit sts controldb -n <namespace>
omssql-server
comando.Crie novas declarações de volume persistentes de dados (
data-controldb
) e logs (logs-controldb
) para ocontroldb
pod da seguinte maneira: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>
Dimensione o
controldb
StatefulSet de volta para 1 réplica usando:kubectl scale --replicas=1 sts/controldb -n <namespace>
Conecte-se ao
controldb
servidor SQL comosa
usando acontroller-sa-secret
senha no segredo criado anteriormente.Crie um
system
login com a função sysadmin usando a senha no segredo docontroller-system-secret
kubernetes da seguinte maneira:CREATE LOGIN [system] WITH PASSWORD = '<password-from-secret>' ALTER SERVER ROLE sysadmin ADD MEMBER [system]
Restaure o backup usando o
RESTORE
comando da seguinte maneira:
RESTORE DATABASE [controller] FROM DISK = N'/var/opt/backups/mssql/<controller backup file>.bak' WITH FILE = 1
Crie um
controldb-rw-user
login usando acontroller-db-rw-secret
senha no segredoCREATE LOGIN [controldb-rw-user] WITH PASSWORD = '<password-from-secret>'
e associe-o ao usuário existentecontroldb-rw-user
no banco de dadosALTER USER [controldb-rw-user] WITH LOGIN = [controldb-rw-user]
do controlador.Desative o
sa
login usando TSQL -ALTER LOGIN [sa] DISABLE
.Edite o
controldb
StatefulSet para remover o volume e a montagem docontroller-sa-secret
volume correspondente.Exclua o
controller-sa-secret
segredo.Dimensione o controlador ReplicaSet de volta para até 1 réplica usando o
kubectl scale
comando.