Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Aplica-se a: SQL Server 2017 (14.x) e versões posteriores
Este artigo explica as etapas para criar um grupo de disponibilidade Always On (AG) com uma réplica em um servidor Windows e a outra réplica em um servidor Linux.
Importante
Os grupos de disponibilidade entre plataformas do SQL Server, que incluem réplicas heterogêneas com suporte completo de alta disponibilidade e recuperação de desastres, estão disponíveis com o DH2i DxEnterprise. Para obter mais informações, consulte Grupos de disponibilidade do SQL Server com sistemas operacionais mistos.
Veja o vídeo a seguir para saber mais sobre grupos de disponibilidade entre plataformas com DH2i.
Essa configuração é multiplataforma porque as réplicas estão em sistemas operacionais diferentes. Use essa configuração para migração de uma plataforma para a outra ou recuperação de desastres (DR). Esta configuração não suporta alta disponibilidade.
Antes de continuar, você deve estar familiarizado com a instalação e a configuração de instâncias do SQL Server no Windows e Linux.
Cenário
Nesse cenário, dois servidores estão em sistemas operacionais diferentes. Um Windows Server 2022 chamado WinSQLInstance hospeda a réplica primária. Um servidor Linux chamado LinuxSQLInstance hospeda a réplica secundária.
Configurar o AG
As etapas para criar o AG são as mesmas que as etapas para criar um AG para cargas de trabalho escala de leitura. O tipo de cluster AG é NONE, já que não há um gestor de cluster.
Para os scripts neste artigo, parênteses angulares < e > identificam os valores que deve substituir para o seu ambiente. Os parênteses angulares em si não são necessários para os scripts.
Instale o SQL Server 2022 (16.x) no Windows Server 2022, habilite de Grupos de Disponibilidade Always On do SQL Server Configuration Manager e defina a autenticação de modo misto.
Dica
Se estiver a validar esta solução no Azure, coloque ambos os servidores no mesmo conjunto de disponibilidade para garantir que estão separados no centro de dados.
Habilitar grupos de disponibilidade
Para obter instruções, consulte Ativar ou desativar o recurso de grupo de disponibilidade Always On.
O Gestor de Configurações do SQL Server indica que o computador não é um nó em um cluster de failover.
Depois de habilitar os Grupos de Disponibilidade, reinicie o SQL Server.
Definir autenticação de modo misto
Para obter instruções, consulte Alterar o modo de autenticação do servidor.
Instale o SQL Server 2022 (16.x) no Linux. Para obter instruções, consulte Diretrizes de instalação do SQL Server no Linux. Habilite
hadrcom mssql-conf.Para habilitar
hadrpor meio de mssql-conf a partir de um prompt de shell, execute o seguinte comando:sudo /opt/mssql/bin/mssql-conf set hadr.hadrenabled 1Depois de habilitar o
hadr, reinicie a instância do SQL Server:sudo systemctl restart mssql-server.serviceConfigure o arquivo
hostsem ambos os servidores ou registre os nomes dos servidores com o DNS.Abra portas de firewall para TCP 1433 e 5022 no Windows e Linux.
Na réplica primária, crie um login e uma senha do banco de dados.
CREATE LOGIN dbm_login WITH PASSWORD = '<password>'; CREATE USER dbm_user FOR LOGIN dbm_login; GOAtenção
A sua palavra-passe deve seguir a política de palavra-passe padrão do SQL Server . Por padrão, a senha deve ter pelo menos oito caracteres e conter caracteres de três dos quatro conjuntos a seguir: letras maiúsculas, letras minúsculas, dígitos de base 10 e símbolos. As palavras-passe podem ter até 128 caracteres. Use senhas tão longas e complexas quanto possível.
Na réplica primária, crie uma chave mestra e um certificado e, em seguida, faça backup do certificado com uma chave privada.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<master-key-password>'; CREATE CERTIFICATE dbm_certificate WITH SUBJECT = 'dbm'; BACKUP CERTIFICATE dbm_certificate TO FILE = 'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\DATA\dbm_certificate.cer' WITH PRIVATE KEY ( FILE = 'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\DATA\dbm_certificate.pvk', ENCRYPTION BY PASSWORD = '<private-key-password>' ); GOAtenção
A sua palavra-passe deve seguir a política de palavra-passe padrão do SQL Server . Por padrão, a senha deve ter pelo menos oito caracteres e conter caracteres de três dos quatro conjuntos a seguir: letras maiúsculas, letras minúsculas, dígitos de base 10 e símbolos. As palavras-passe podem ter até 128 caracteres. Use senhas tão longas e complexas quanto possível.
Copie o certificado e a chave privada para o servidor Linux (réplica secundária) em
/var/opt/mssql/data. Você pode usarpscppara copiar os arquivos para o servidor Linux.Defina o grupo e a propriedade da chave privada e do certificado como
mssql:mssql.O script a seguir define o grupo e a propriedade dos arquivos.
sudo chown mssql:mssql /var/opt/mssql/data/dbm_certificate.pvk sudo chown mssql:mssql /var/opt/mssql/data/dbm_certificate.cerNo diagrama a seguir, a propriedade e o grupo são definidos corretamente para o certificado e a chave.
Na réplica secundária, crie um login e senha de banco de dados e crie uma chave mestra.
CREATE LOGIN dbm_login WITH PASSWORD = '<password>'; CREATE USER dbm_user FOR LOGIN dbm_login; GO CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<master-key-password>'; GOAtenção
A sua palavra-passe deve seguir a política de palavra-passe padrão do SQL Server . Por padrão, a senha deve ter pelo menos oito caracteres e conter caracteres de três dos quatro conjuntos a seguir: letras maiúsculas, letras minúsculas, dígitos de base 10 e símbolos. As palavras-passe podem ter até 128 caracteres. Use senhas tão longas e complexas quanto possível.
Na réplica secundária, restaure o certificado copiado para
/var/opt/mssql/data.CREATE CERTIFICATE dbm_certificate AUTHORIZATION dbm_user FROM FILE = '/var/opt/mssql/data/dbm_certificate.cer' WITH PRIVATE KEY ( FILE = '/var/opt/mssql/data/dbm_certificate.pvk', DECRYPTION BY PASSWORD = '<private-key-password>' ); GONo exemplo anterior, substitua
<private-key-password>pela mesma senha usada ao criar o certificado na réplica primária.Na réplica primária, crie um ponto de extremidade.
CREATE ENDPOINT [Hadr_endpoint] AS TCP ( LISTENER_IP = (0.0.0.0), LISTENER_PORT = 5022 ) FOR DATABASE_MIRRORING ( ROLE = ALL, AUTHENTICATION = CERTIFICATE dbm_certificate, ENCRYPTION = REQUIRED ALGORITHM AES ); ALTER ENDPOINT [Hadr_endpoint] STATE = STARTED; GRANT CONNECT ON ENDPOINT::[Hadr_endpoint] TO [dbm_login]; GOImportante
O firewall deve estar aberto para a porta TCP do ouvinte. No script anterior, a porta é 5022. Use qualquer porta TCP disponível.
Na réplica secundária, crie o ponto de extremidade. Repita o script precedentemente mencionado na réplica secundária para definir o ponto final.
Na réplica primária, crie o AG com
CLUSTER_TYPE = NONE. O script de exemplo usaSEEDING_MODE = AUTOMATICpara criar o AG.Observação
Quando a instância do Windows do SQL Server usa caminhos diferentes para dados e arquivos de log, a propagação automática falha para a instância Linux do SQL Server, porque esses caminhos não existem na réplica secundária. Para usar o script a seguir para um AG de plataforma cruzada, o banco de dados requer o mesmo caminho para os dados e arquivos de log no servidor Windows. Como alternativa, você pode atualizar o script para definir
SEEDING_MODE = MANUALe, em seguida, fazer backup e restaurar o banco de dados comNORECOVERYpara semear o banco de dados.Esse comportamento se aplica às imagens do Azure Marketplace.
Para obter mais informações sobre a propagação automática, consulte Automatic Seeding - Disk Layout.
Antes de executar o script, atualize os valores para os seus AGs.
Substitua
<WinSQLInstance>pelo nome do servidor da instância primária da réplica do SQL Server.Substitua
<LinuxSQLInstance>pelo nome do servidor da instância secundária de réplica do SQL Server.
Para criar o AG, atualize os valores e execute o script na réplica primária.
CREATE AVAILABILITY GROUP [ag1] WITH (CLUSTER_TYPE = NONE) FOR REPLICA ON N'<WinSQLInstance>' WITH ( ENDPOINT_URL = N'tcp://<WinSQLInstance>:5022', AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT, SEEDING_MODE = AUTOMATIC, FAILOVER_MODE = MANUAL, SECONDARY_ROLE(ALLOW_CONNECTIONS = ALL) ), N'<LinuxSQLInstance>' WITH ( ENDPOINT_URL = N'tcp://<LinuxSQLInstance>:5022', AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT, SEEDING_MODE = AUTOMATIC, FAILOVER_MODE = MANUAL, SECONDARY_ROLE(ALLOW_CONNECTIONS = ALL); ) GOPara obter mais informações, consulte CREATE AVAILABILITY GROUP.
Na réplica secundária, junte-se ao AG.
ALTER AVAILABILITY GROUP [ag1] JOIN WITH (CLUSTER_TYPE = NONE); ALTER AVAILABILITY GROUP [ag1] GRANT CREATE ANY DATABASE; GOCrie um banco de dados para o AG. As etapas de exemplo usam um banco de dados chamado
TestDB. Se você estiver usando a propagação automática, defina o mesmo caminho para os dados e os arquivos de log.Antes de executar o script, atualize os valores do banco de dados.
Substitua
TestDBpelo nome do seu banco de dados.Substitua
<F:\Path>pelo caminho do banco de dados e dos arquivos de log. Use o mesmo caminho para o banco de dados e os arquivos de log.
Você também pode usar os caminhos padrão.
Para criar seu banco de dados, execute o script.
CREATE DATABASE [TestDB] CONTAINMENT = NONE ON PRIMARY(NAME = N'TestDB', FILENAME = N'<F:\Path>\TestDB.mdf') LOG ON (NAME = N'TestDB_log', FILENAME = N'<F:\Path>\TestDB_log.ldf'); GOFaça um backup completo do banco de dados.
Se você não estiver usando a propagação automática, restaure o banco de dados no servidor de réplica secundária (Linux). Migrar um banco de dados SQL Server do Windows para o Linux usando backup e restauração. Restaure o banco de dados
WITH NORECOVERYna réplica secundária.Adicione o banco de dados ao AG. Atualize o script de exemplo. Substitua
TestDBpelo nome do seu banco de dados. Na réplica primária, execute a consulta T-SQL para adicionar o banco de dados ao AG.ALTER AG [ag1] ADD DATABASE TestDB; GOVerifique se o banco de dados está sendo preenchido na réplica secundária.
Failover da réplica principal
Cada grupo de disponibilidade tem apenas uma réplica primária. A réplica primária permite leituras e gravações. Para alterar qual réplica é a primária, pode efetuar um failover. Em um grupo de disponibilidade típico, o gerenciador de cluster automatiza o processo de failover. Em um grupo de disponibilidade com cluster tipo NONE, o processo de failover é manual.
Há duas maneiras de fazer failover da réplica primária em um grupo de disponibilidade com o tipo de cluster NONE:
- Failover manual sem perda de dados
- Failover manual forçado com perda de dados
Failover manual sem perda de dados
Use esse método quando a réplica primária estiver disponível, mas você precisará alterar temporária ou permanentemente qual instância hospeda a réplica primária. Para evitar possíveis perdas de dados, antes de emitir o failover manual, verifique se a réplica secundária de destino está atualizada.
Para fazer failover manualmente sem perda de dados:
Torne a réplica primária atual a secundária de destino
SYNCHRONOUS_COMMIT.ALTER AVAILABILITY GROUP [AGRScale] MODIFY REPLICA ON N'<node2>' WITH (AVAILABILITY_MODE = SYNCHRONOUS_COMMIT);Para identificar que as transações ativas estão comprometidas com a réplica primária e pelo menos uma réplica secundária síncrona, execute a seguinte consulta:
SELECT ag.name, drs.database_id, drs.group_id, drs.replica_id, drs.synchronization_state_desc, ag.sequence_number FROM sys.dm_hadr_database_replica_states drs, sys.availability_groups ag WHERE drs.group_id = ag.group_id;A réplica secundária é sincronizada quando
synchronization_state_descéSYNCHRONIZED.Atualize
REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMITpara 1.O script a seguir define
REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMITcomo 1 em um grupo de disponibilidade chamadoag1. Antes de executar o seguinte script, substituaag1pelo nome do seu grupo de disponibilidade:ALTER AVAILABILITY GROUP [AGRScale] SET (REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT = 1);Essa configuração garante que cada transação ativa seja confirmada para a réplica primária e pelo menos uma réplica secundária síncrona.
Observação
Essa configuração não é específica para failover e deve ser definida com base nos requisitos do ambiente.
Defina a réplica primária e a(s) réplica(s) secundária(s) que não participa(m) do failover offline para se prepararem para a alteração de função:
ALTER AVAILABILITY GROUP [AGRScale] OFFLINEPromova a réplica secundária de destino para primária.
ALTER AVAILABILITY GROUP AGRScale FORCE_FAILOVER_ALLOW_DATA_LOSS;Atualize o papel do antigo primário e dos outros secundários para
SECONDARY, execute o seguinte comando na instância do SQL Server que hospeda a réplica primária antiga:ALTER AVAILABILITY GROUP [AGRScale] SET (ROLE = SECONDARY);Observação
Para excluir um grupo de disponibilidade, use DROP AVAILABILITY GROUP. Para um grupo de disponibilidade criado com o tipo de cluster NONE ou EXTERNAL, execute o comando em todas as réplicas que fazem parte do grupo de disponibilidade.
Retome a movimentação de dados, execute o seguinte comando para cada banco de dados no grupo de disponibilidade na instância do SQL Server que hospeda a réplica primária:
ALTER DATABASE [db1] SET HADR RESUMERecrie qualquer ouvinte que tenha sido criado para fins de escalonamento de leitura e que não seja gerido por um gestor de cluster. Se o ouvinte original apontar para a primária antiga, solte-a e recrie-a para apontar para a nova primária.
Failover manual forçado com perda de dados
Se a réplica primária não estiver disponível e não puder ser recuperada imediatamente, será necessário forçar um failover para a réplica secundária com perda de dados. No entanto, se a réplica primária original se recuperar após o failover, ela assumirá a função principal. Para evitar que cada réplica esteja em um estado diferente, remova o primário original do grupo de disponibilidade após um failover forçado com perda de dados. Quando o primário original voltar a ficar online, remova totalmente o grupo de disponibilidade.
Para forçar um failover manual com perda de dados da réplica primária N1 para a réplica secundária N2, siga estas etapas:
Na réplica secundária (N2), inicie o failover forçado:
ALTER AVAILABILITY GROUP [AGRScale] FORCE_FAILOVER_ALLOW_DATA_LOSS;Na nova réplica primária (N2), remova a primária original (N1):
ALTER AVAILABILITY GROUP [AGRScale] REMOVE REPLICA ON N'N1';Valide se todo o tráfego do aplicativo está apontado para o ouvinte e/ou para a nova réplica primária.
Se o primário original (N1) ficar online, coloque imediatamente o grupo de disponibilidade AGRScale offline no primário original (N1):
ALTER AVAILABILITY GROUP [AGRScale] OFFLINESe houver dados ou alterações não sincronizadas, preserve esses dados por meio de backups ou outras opções de replicação de dados que atendam às suas necessidades de negócios.
Em seguida, remova o grupo de disponibilidade do servidor primário original (N1):
DROP AVAILABILITY GROUP [AGRScale];Elimine a base de dados do grupo de disponibilidade na réplica primária original (N1):
USE [master] GO DROP DATABASE [AGDBRScale] GO(Opcional) Se desejar, agora você pode adicionar N1 novamente como uma nova réplica secundária ao grupo de disponibilidade AGRScale.
Este artigo analisou as etapas para criar um AG multiplataforma para dar suporte à migração ou cargas de trabalho em escala de leitura. Ele pode ser usado para recuperação manual de desastres. Também explicou como fazer o failover da AG. Um AG multiplataforma usa o tipo de cluster NONE e não suporta alta disponibilidade.