Criar e configurar um grupo de disponibilidade para o SQL Server no Linux
Aplica-se a:SQL Server - Linux
Este tutorial aborda como criar e configurar um grupo de disponibilidade (AG) para o SQL Server no Linux. Ao contrário do SQL Server 2016 (13.x) e versões anteriores no Windows, é possível ativar um Grupo de Disponibilidade com ou sem criar previamente o cluster Pacemaker subjacente. A integração com o cluster, se necessário, só é feita mais tarde.
O tutorial inclui as seguintes tarefas:
- Habilite grupos de disponibilidade.
- Crie pontos de extremidade e certificados do grupo de disponibilidade.
- Use o SQL Server Management Studio (SSMS) ou Transact-SQL para criar um grupo de disponibilidade.
- Crie o logon e as permissões do SQL Server para o Pacemaker.
- Crie recursos de grupo de disponibilidade em um cluster do Pacemaker (somente tipo externo).
Pré-requisitos
Implante o cluster de alta disponibilidade do Pacemaker conforme descrito em Implantar um cluster do Pacemaker para SQL Server no Linux.
Ativar o recurso de grupos de disponibilidade
Ao contrário do Windows, você não pode usar o PowerShell ou o SQL Server Configuration Manager para habilitar o recurso de grupos de disponibilidade (AG). No Linux, você deve usar mssql-conf
para habilitar o recurso. Há duas maneiras de habilitar o recurso de grupos de disponibilidade: usar o utilitário mssql-conf
ou editar o arquivo mssql.conf
manualmente.
Importante
O recurso AG deve ser habilitado para réplicas somente de configuração, mesmo no SQL Server Express.
Use o utilitário mssql-conf
Em um prompt, execute o seguinte comando:
sudo /opt/mssql/bin/mssql-conf set hadr.hadrenabled 1
Editar o arquivo mssql.conf
Você também pode modificar o arquivo mssql.conf
, localizado na pasta /var/opt/mssql
, para adicionar as seguintes linhas:
[hadr]
hadr.hadrenabled = 1
Reiniciar o SQL Server
Depois de habilitar grupos de disponibilidade, como no Windows, você deve reiniciar o SQL Server, usando o seguinte comando:
sudo systemctl restart mssql-server
Criar pontos finais e certificados do grupo de disponibilidade
Um grupo de disponibilidade utiliza endpoints TCP para comunicação. No caso do Linux, os pontos finais de um AG só são suportados se os certificados forem usados para autenticação. Você deve restaurar o certificado de uma instância em todas as instâncias restantes que participarão como réplicas no mesmo Grupo de Disponibilidade (AG). O processo de certificado é necessário mesmo para uma réplica somente de configuração.
A criação de pontos de extremidade e a restauração de certificados só podem ser feitas via Transact-SQL. Você também pode usar certificados não gerados pelo SQL Server. Você também precisa de um processo para gerenciar e substituir quaisquer certificados que expiram.
Importante
Se você planeja usar o assistente do SQL Server Management Studio para criar o AG, ainda precisará criar e restaurar os certificados usando Transact-SQL no Linux.
Para obter a sintaxe completa das opções disponíveis para os vários comandos (incluindo segurança), consulte:
- CERTIFICADO DE CÓPIA DE SEGURANÇA
- CRIAR CERTIFICADO
- CRIAR DE PONTO FINAL
Observação
Embora estejas a criar um grupo de disponibilidade, o tipo de ponto de extremidade utiliza FOR DATABASE_MIRRORING
, porque alguns aspetos subjacentes foram anteriormente partilhados com essa funcionalidade agora obsoleta.
Este exemplo cria certificados para uma configuração de três nós. Os nomes de instâncias são LinAGN1
, LinAGN2
e LinAGN3
.
Execute o script a seguir no
LinAGN1
para criar a chave mestra, o certificado e o ponto de extremidade e faça backup do certificado. Neste exemplo, usa-se a porta TCP típica 5022 para o ponto de extremidade.CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<master-key-password>'; GO CREATE CERTIFICATE LinAGN1_Cert WITH SUBJECT = 'LinAGN1 AG Certificate'; GO BACKUP CERTIFICATE LinAGN1_Cert TO FILE = '/var/opt/mssql/data/LinAGN1_Cert.cer'; GO CREATE ENDPOINT AGEP STATE = STARTED AS TCP ( LISTENER_PORT = 5022, LISTENER_IP = ALL ) FOR DATABASE_MIRRORING ( AUTHENTICATION = CERTIFICATE LinAGN1_Cert, ROLE = ALL ); GO
Faça o mesmo em
LinAGN2
:CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<master-key-password>'; GO CREATE CERTIFICATE LinAGN2_Cert WITH SUBJECT = 'LinAGN2 AG Certificate'; GO BACKUP CERTIFICATE LinAGN2_Cert TO FILE = '/var/opt/mssql/data/LinAGN2_Cert.cer'; GO CREATE ENDPOINT AGEP STATE = STARTED AS TCP ( LISTENER_PORT = 5022, LISTENER_IP = ALL ) FOR DATABASE_MIRRORING ( AUTHENTICATION = CERTIFICATE LinAGN2_Cert, ROLE = ALL ); GO
Finalmente, execute a mesma sequência em
LinAGN3
:CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<master-key-password>'; GO CREATE CERTIFICATE LinAGN3_Cert WITH SUBJECT = 'LinAGN3 AG Certificate'; GO BACKUP CERTIFICATE LinAGN3_Cert TO FILE = '/var/opt/mssql/data/LinAGN3_Cert.cer'; GO CREATE ENDPOINT AGEP STATE = STARTED AS TCP ( LISTENER_PORT = 5022, LISTENER_IP = ALL ) FOR DATABASE_MIRRORING ( AUTHENTICATION = CERTIFICATE LinAGN3_Cert, ROLE = ALL ); GO
Usando
scp
ou outro utilitário, copie os backups do certificado para cada nó que fará parte do AG.Para este exemplo:
- Copie
LinAGN1_Cert.cer
paraLinAGN2
eLinAGN3
. - Copie
LinAGN2_Cert.cer
paraLinAGN1
eLinAGN3
. - Copie
LinAGN3_Cert.cer
paraLinAGN1
eLinAGN2
.
- Copie
Altere a propriedade e o grupo associado aos arquivos de certificado copiados para
mssql
.sudo chown mssql:mssql <CertFileName>
Crie os logins e usuários no nível da instância associados ao
LinAGN2
eLinAGN3
noLinAGN1
.CREATE LOGIN LinAGN2_Login WITH PASSWORD = '<password>'; CREATE USER LinAGN2_User FOR LOGIN LinAGN2_Login; GO CREATE LOGIN LinAGN3_Login WITH PASSWORD = '<password>'; CREATE USER LinAGN3_User FOR LOGIN LinAGN3_Login; GO
Atenção
Sua senha deve seguir a política de senha de 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.
Restaure
LinAGN2_Cert
eLinAGN3_Cert
noLinAGN1
. Ter os certificados das outras réplicas é um aspeto importante da comunicação e segurança da AG.CREATE CERTIFICATE LinAGN2_Cert AUTHORIZATION LinAGN2_User FROM FILE = '/var/opt/mssql/data/LinAGN2_Cert.cer'; GO CREATE CERTIFICATE LinAGN3_Cert AUTHORIZATION LinAGN3_User FROM FILE = '/var/opt/mssql/data/LinAGN3_Cert.cer'; GO
Conceda permissão aos logins associados a
LinAG2
eLinAGN3
para se ligarem ao endpoint noLinAGN1
.GRANT CONNECT ON ENDPOINT::AGEP TO LinAGN2_Login; GO GRANT CONNECT ON ENDPOINT::AGEP TO LinAGN3_Login; GO
Crie os logins ao nível da instância e os utilizadores associados ao
LinAGN1
eLinAGN3
noLinAGN2
.CREATE LOGIN LinAGN1_Login WITH PASSWORD = '<password>'; CREATE USER LinAGN1_User FOR LOGIN LinAGN1_Login; GO CREATE LOGIN LinAGN3_Login WITH PASSWORD = '<password>'; CREATE USER LinAGN3_User FOR LOGIN LinAGN3_Login; GO
Restaure
LinAGN1_Cert
eLinAGN3_Cert
noLinAGN2
.CREATE CERTIFICATE LinAGN1_Cert AUTHORIZATION LinAGN1_User FROM FILE = '/var/opt/mssql/data/LinAGN1_Cert.cer'; GO CREATE CERTIFICATE LinAGN3_Cert AUTHORIZATION LinAGN3_User FROM FILE = '/var/opt/mssql/data/LinAGN3_Cert.cer'; GO
Conceda aos logins associados ao
LinAG1
eLinAGN3
permissão para se conectar ao endpoint emLinAGN2
.GRANT CONNECT ON ENDPOINT::AGEP TO LinAGN1_Login; GO GRANT CONNECT ON ENDPOINT::AGEP TO LinAGN3_Login; GO
Crie logins e usuários ao nível da instância associados ao
LinAGN1
eLinAGN2
noLinAGN3
.CREATE LOGIN LinAGN1_Login WITH PASSWORD = '<password>'; CREATE USER LinAGN1_User FOR LOGIN LinAGN1_Login; GO CREATE LOGIN LinAGN2_Login WITH PASSWORD = '<password>'; CREATE USER LinAGN2_User FOR LOGIN LinAGN2_Login; GO
Restaure
LinAGN1_Cert
eLinAGN2_Cert
noLinAGN3
.CREATE CERTIFICATE LinAGN1_Cert AUTHORIZATION LinAGN1_User FROM FILE = '/var/opt/mssql/data/LinAGN1_Cert.cer'; GO CREATE CERTIFICATE LinAGN2_Cert AUTHORIZATION LinAGN2_User FROM FILE = '/var/opt/mssql/data/LinAGN2_Cert.cer'; GO
Conceda aos logins associados ao
LinAG1
eLinAGN2
permissão para se conectar ao ponto de extremidade emLinAGN3
.GRANT CONNECT ON ENDPOINT::AGEP TO LinAGN1_Login; GO GRANT CONNECT ON ENDPOINT::AGEP TO LinAGN2_Login; GO
Criar o grupo de disponibilidade
Esta seção aborda como usar o SQL Server Management Studio (SSMS) ou Transact-SQL para criar o grupo de disponibilidade para o SQL Server.
Utilize o SQL Server Management Studio
Esta seção mostra como criar um Grupo de Disponibilidade com um tipo de cluster externo usando SSMS com o Assistente de Novo Grupo de Disponibilidade.
No SSMS, expanda Always On Alta Disponibilidade, clique com o botão direito do rato em Grupos de Disponibilidadee selecione Assistente para Novo Grupo de Disponibilidade.
Na caixa de diálogo Introdução, selecione Avançar.
Na caixa de diálogo Especificar Opções do Grupo de Disponibilidade, insira um nome para o grupo de disponibilidade e selecione um tipo de cluster de
EXTERNAL
ouNONE
na lista suspensa. Externo deve ser usado quando o Pacemaker será implantado. Nenhuma é escolhida para cenários especializados, como o aumento da capacidade de leitura. Selecionar a opção para a verificação de integridade a nível da base de dados é opcional. Para obter mais informações sobre esta opção, consulte a opção de alternância de deteção de integridade ao nível do banco de dados do grupo de disponibilidade . Selecione Avançar.Na caixa de diálogo Selecionar bancos de dados, selecione os bancos de dados que participarão do AG. Antes de ser adicionado a um grupo de disponibilidade (AG), cada base de dados deve ter uma cópia de segurança completa. Selecione Avançar.
Na caixa de diálogo Especificar réplicas, selecione Adicionar réplica.
Na caixa de diálogo Conectar ao Servidor, digite o nome da instância Linux do SQL Server que será a réplica secundária e as credenciais para se conectar. Selecione Conectar.
Repita as duas etapas anteriores para a instância que conterá uma réplica somente de configuração ou outra réplica secundária.
Todas as três instâncias agora devem ser listadas na caixa de diálogo Especificar Réplicas. Se estiver usando um tipo de cluster Externo, para a réplica secundária que será uma verdadeira secundária, verifique se o Modo de Disponibilidade corresponde ao da réplica primária e o modo de failover está definido como Externo. Para a réplica apenas de configuração, selecione um modo de disponibilidade apenas de Configuração.
O exemplo a seguir mostra um AG com duas réplicas, um tipo de cluster Externo, e uma réplica apenas de configuração.
O exemplo a seguir mostra um AG com duas réplicas, tipo de cluster Nenhum, e uma réplica apenas de configuração.
Se quiser alterar as preferências de backup, selecione o separador Preferências de Backup. Para obter mais informações sobre preferências de backup com AGs, consulte Configurar backups em réplicas secundárias de um grupo de disponibilidade Always On.
Se estiver usando secundários legíveis ou criando um AG com um tipo de cluster Nenhum para escala de leitura, você poderá criar um ouvinte selecionando a guia Ouvinte. Um ouvinte também pode ser adicionado mais tarde. Para criar um ouvinte, escolha a opção Criar um de ouvinte do grupo de disponibilidade e insira um nome, uma porta TCP/IP e se deseja usar um endereço IP DHCP estático ou atribuído automaticamente. Lembre-se de que, para um AG com tipo de cluster do tipo Nenhum, o IP deve ser estático e definido como o endereço IP do primário.
Se um ouvinte for criado para cenários legíveis, o SSMS 17.3 ou posterior permitirá a criação do roteamento somente leitura no assistente. Ele também pode ser adicionado posteriormente via SSMS ou Transact-SQL. Para adicionar roteamento somente leitura agora:
Selecione a guia Encaminhamento Read-Only.
Insira as URLs para as réplicas somente leitura. Essas URLs são semelhantes aos pontos de extremidade, mas utilizam a porta da instância em vez do ponto de extremidade.
Selecione cada URL e, na parte inferior, selecione as réplicas legíveis. Para selecionar várias vezes, mantenha pressionada a tecla SHIFT ou arraste com a tecla select-drag.
Selecione Avançar.
Escolha como as réplicas secundárias serão inicializadas. O padrão é usar de semeadura automática, que requer o mesmo caminho em todos os servidores que participam do AG. Você também pode fazer com que o assistente faça um backup, copie e restaure (a segunda opção); junte-o se você tiver feito backup, copiado e restaurado manualmente o banco de dados nas réplicas (terceira opção); ou adicione o banco de dados mais tarde (última opção). Assim como acontece com os certificados, se você estiver fazendo backups manualmente e copiando-os, as permissões nos arquivos de backup precisarão ser definidas nas outras réplicas. Selecione Avançar.
Na caixa de diálogo Validação, se nem tudo indicar Sucesso, investigue. Alguns avisos são aceitáveis e não são fatais, como se não criares um ouvinte. Selecione Avançar.
Na caixa de diálogo Resumo, selecione Concluir. Começa agora o processo de criação da AG.
Quando a criação do AG estiver concluída, selecione Fechar nos Resultados. Agora você pode ver o AG nas réplicas nas exibições de gerenciamento dinâmico e na pasta Always On High Availability no SSMS.
Use Transact-SQL
Esta seção mostra exemplos de criação de um AG usando Transact-SQL. O listener e o roteamento de acesso apenas para leitura podem ser configurados após a criação do AG. O AG em si pode ser modificado com ALTER AVAILABILITY GROUP
, mas a alteração do tipo de cluster não pode ser feita no SQL Server 2017 (14.x). Se você não pretendia criar um AG com um tipo de cluster de Externo, deverá excluí-lo e recriá-lo com um tipo de cluster de Nenhum. Mais informações e outras opções podem ser encontradas nos seguintes links:
- CRIAR GRUPO DE DISPONIBILIDADE (Transact-SQL)
- GRUPO ALTERAR DISPONIBILIDADE (Transact-SQL)
- Configurar o roteamento de apenas leitura para um grupo de disponibilidade Always On
- Configurar um ouvinte para um grupo de disponibilidade Always On
Exemplo A: Duas réplicas com uma réplica somente de configuração (tipo de cluster externo)
Este exemplo mostra como criar um AG de duas réplicas que utiliza uma réplica apenas de configuração.
Execute no nó que será a réplica primária contendo a cópia integral legível e gravável dos bancos de dados. Este exemplo usa a semeadura automática.
CREATE AVAILABILITY GROUP [<AGName>] WITH (CLUSTER_TYPE = EXTERNAL) FOR DATABASE <DBName> REPLICA ON N'LinAGN1' WITH ( ENDPOINT_URL = N' TCP://LinAGN1.FullyQualified.Name:5022', FAILOVER_MODE = EXTERNAL, AVAILABILITY_MODE = SYNCHRONOUS_COMMIT), N'LinAGN2' WITH ( ENDPOINT_URL = N'TCP://LinAGN2.FullyQualified.Name:5022', FAILOVER_MODE = EXTERNAL, AVAILABILITY_MODE = SYNCHRONOUS_COMMIT, SEEDING_MODE = AUTOMATIC), N'LinAGN3' WITH ( ENDPOINT_URL = N'TCP://LinAGN3.FullyQualified.Name:5022', AVAILABILITY_MODE = CONFIGURATION_ONLY); GO
Em uma janela de consulta conectada à outra réplica, execute o seguinte para unir a réplica ao AG e iniciar o processo de propagação da réplica primária para a réplica secundária.
ALTER AVAILABILITY GROUP [<AGName>] JOIN WITH (CLUSTER_TYPE = EXTERNAL); GO ALTER AVAILABILITY GROUP [<AGName>] GRANT CREATE ANY DATABASE; GO
Em uma janela de consulta conectada à réplica de configuração apenas, adicione-a ao AG.
ALTER AVAILABILITY GROUP [<AGName>] JOIN WITH (CLUSTER_TYPE = EXTERNAL); GO
Exemplo B: Três réplicas com encaminhamento de leitura somente (tipo de cluster externo)
Este exemplo mostra três réplicas completas e como o roteamento somente leitura pode ser configurado como parte da criação inicial do AG.
Execute no nó que será a réplica primária que contém a leitura/gravação completa dos bancos de dados. Este exemplo usa a semeadura automática.
CREATE AVAILABILITY GROUP [<AGName>] WITH (CLUSTER_TYPE = EXTERNAL) FOR DATABASE < DBName > REPLICA ON N'LinAGN1' WITH ( ENDPOINT_URL = N'TCP://LinAGN1.FullyQualified.Name:5022', FAILOVER_MODE = EXTERNAL, AVAILABILITY_MODE = SYNCHRONOUS_COMMIT, PRIMARY_ROLE(ALLOW_CONNECTIONS = READ_WRITE, READ_ONLY_ROUTING_LIST = ( ( 'LinAGN2.FullyQualified.Name', 'LinAGN3.FullyQualified.Name' ) )), SECONDARY_ROLE(ALLOW_CONNECTIONS = ALL, READ_ONLY_ROUTING_URL = N'TCP://LinAGN1.FullyQualified.Name:1433') ), N'LinAGN2' WITH ( ENDPOINT_URL = N'TCP://LinAGN2.FullyQualified.Name:5022', FAILOVER_MODE = EXTERNAL, SEEDING_MODE = AUTOMATIC, AVAILABILITY_MODE = SYNCHRONOUS_COMMIT, PRIMARY_ROLE(ALLOW_CONNECTIONS = READ_WRITE, READ_ONLY_ROUTING_LIST = ( ( 'LinAGN1.FullyQualified.Name', 'LinAGN3.FullyQualified.Name' ) )), SECONDARY_ROLE(ALLOW_CONNECTIONS = ALL, READ_ONLY_ROUTING_URL = N'TCP://LinAGN2.FullyQualified.Name:1433') ), N'LinAGN3' WITH ( ENDPOINT_URL = N'TCP://LinAGN3.FullyQualified.Name:5022', FAILOVER_MODE = EXTERNAL, SEEDING_MODE = AUTOMATIC, AVAILABILITY_MODE = SYNCHRONOUS_COMMIT, PRIMARY_ROLE(ALLOW_CONNECTIONS = READ_WRITE, READ_ONLY_ROUTING_LIST = ( ( 'LinAGN1.FullyQualified.Name', 'LinAGN2.FullyQualified.Name' ) )), SECONDARY_ROLE(ALLOW_CONNECTIONS = ALL, READ_ONLY_ROUTING_URL = N'TCP://LinAGN3.FullyQualified.Name:1433') ) LISTENER '<ListenerName>' ( WITH IP = ('<IPAddress>', '<SubnetMask>'), Port = 1433 ); GO
Algumas coisas a observar sobre essa configuração:
-
AGName
é o nome do grupo de disponibilidade. -
DBName
é o nome do banco de dados usado com o grupo de disponibilidade. Também pode ser uma lista de nomes separados por vírgulas. -
ListenerName
é um nome que é diferente de qualquer um dos servidores/nós subjacentes. Será registado no DNS juntamente comIPAddress
. -
IPAddress
é um endereço IP associado aListenerName
. Também é único e não é o mesmo que qualquer um dos servidores / nós. Aplicativos e usuários finais usamListenerName
ouIPAddress
para se conectar ao AG. -
SubnetMask
é a máscara de sub-rede doIPAddress
. No SQL Server 2019 (15.x) e versões anteriores, isso é255.255.255.255
. No SQL Server 2022 (16.x) e versões posteriores, isso é0.0.0.0
.
-
Em uma janela de consulta conectada à outra réplica, execute o seguinte para unir a réplica ao AG e iniciar o processo de propagação da réplica primária para a réplica secundária.
ALTER AVAILABILITY GROUP [<AGName>] JOIN WITH (CLUSTER_TYPE = EXTERNAL); GO ALTER AVAILABILITY GROUP [<AGName>] GRANT CREATE ANY DATABASE; GO
Repita a etapa 2 para a terceira réplica.
Exemplo C: Duas réplicas com roteamento somente leitura (Nenhum tipo de cluster)
Este exemplo mostra a criação de uma configuração de duas réplicas usando um tipo de cluster de None. Ele é usado para o cenário de escala de leitura em que nenhum failover é esperado. Isso cria o listener, que é na verdade a réplica primária, e o roteamento somente leitura, utilizando a funcionalidade Round Robin.
- Execute no nó que será a réplica primária que contém a cópia de leitura/gravação completa dos bancos de dados. Este exemplo usa a semeadura automática.
CREATE AVAILABILITY
GROUP [<AGName>]
WITH (CLUSTER_TYPE = NONE)
FOR DATABASE <DBName> REPLICA ON
N'LinAGN1' WITH (
ENDPOINT_URL = N'TCP://LinAGN1.FullyQualified.Name: <PortOfEndpoint>',
FAILOVER_MODE = MANUAL,
AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,
PRIMARY_ROLE(
ALLOW_CONNECTIONS = READ_WRITE,
READ_ONLY_ROUTING_LIST = (('LinAGN1.FullyQualified.Name'.'LinAGN2.FullyQualified.Name'))
),
SECONDARY_ROLE(
ALLOW_CONNECTIONS = ALL,
READ_ONLY_ROUTING_URL = N'TCP://LinAGN1.FullyQualified.Name:<PortOfInstance>'
)
),
N'LinAGN2' WITH (
ENDPOINT_URL = N'TCP://LinAGN2.FullyQualified.Name:<PortOfEndpoint>',
FAILOVER_MODE = MANUAL,
SEEDING_MODE = AUTOMATIC,
AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,
PRIMARY_ROLE(ALLOW_CONNECTIONS = READ_WRITE, READ_ONLY_ROUTING_LIST = (
('LinAGN1.FullyQualified.Name',
'LinAGN2.FullyQualified.Name')
)),
SECONDARY_ROLE(ALLOW_CONNECTIONS = ALL, READ_ONLY_ROUTING_URL = N'TCP://LinAGN2.FullyQualified.Name:<PortOfInstance>')
),
LISTENER '<ListenerName>' (WITH IP = (
'<PrimaryReplicaIPAddress>',
'<SubnetMask>'),
Port = <PortOfListener>
);
GO
Onde:
-
AGName
é o nome do grupo de disponibilidade. -
DBName
é o nome do banco de dados que será usado com o grupo de disponibilidade. Também pode ser uma lista de nomes separados por vírgulas. -
PortOfEndpoint
é o número da porta usado pelo ponto de extremidade criado. -
PortOfInstance
é o número da porta usado pela instância do SQL Server. -
ListenerName
é um nome diferente de qualquer uma das réplicas subjacentes, mas não é realmente usado. -
PrimaryReplicaIPAddress
é o endereço IP da réplica primária. -
SubnetMask
é a máscara de sub-rede doIPAddress
. No SQL Server 2019 (15.x) e versões anteriores, isso é255.255.255.255
. No SQL Server 2022 (16.x) e versões posteriores, isso é0.0.0.0
.
Junte a réplica secundária ao AG e inicie a semeadura automática.
ALTER AVAILABILITY GROUP [<AGName>] JOIN WITH (CLUSTER_TYPE = NONE); GO ALTER AVAILABILITY GROUP [<AGName>] GRANT CREATE ANY DATABASE; GO
Criar o logon e as permissões do SQL Server para o Pacemaker
Um cluster de alta disponibilidade do Pacemaker subjacente ao SQL Server no Linux precisa de acesso à instância do SQL Server e permissões no próprio grupo de disponibilidade. Essas etapas criam o logon e as permissões associadas, juntamente com um arquivo que informa ao Pacemaker como fazer logon no SQL Server.
Em uma janela de consulta conectada à primeira réplica, execute o seguinte script:
CREATE LOGIN PMLogin WITH PASSWORD ='<password>'; GO GRANT VIEW SERVER STATE TO PMLogin; GO GRANT ALTER, CONTROL, VIEW DEFINITION ON AVAILABILITY GROUP::<AGThatWasCreated> TO PMLogin; GO
No nó 1, digite o comando
sudo emacs /var/opt/mssql/secrets/passwd
Isso abre o editor Emacs.
Insira as duas linhas a seguir no editor:
PMLogin <password>
Mantenha pressionada a tecla
Ctrl
, pressioneX
e, em seguida,C
, para sair e salvar o arquivo.Executar
sudo chmod 400 /var/opt/mssql/secrets/passwd
para bloquear o ficheiro.
Repita as etapas de 1 a 5 nos outros servidores que servirão como réplicas.
Criar os recursos do grupo de disponibilidade no cluster do Pacemaker (somente externo)
Depois que um grupo de disponibilidade é criado no SQL Server, os recursos correspondentes devem ser criados no Pacemaker, quando um tipo de cluster Externo é especificado. Existem dois recursos associados a uma AG: a própria AG e um endereço IP. A configuração do recurso de endereço IP é opcional se você não estiver usando a funcionalidade de ouvinte, mas é recomendada.
O recurso AG que você criou é um tipo de recurso chamado clone. O recurso AG essencialmente tem cópias em cada nó, e há um recurso de controle chamado master. O mestre está associado ao servidor que hospeda a réplica primária. Os outros recursos hospedam réplicas secundárias (regulares ou somente configuração) e podem ser promovidos a mestre em um failover.
Observação
Comunicação sem preconceitos
Este artigo contém referências ao termo slave, um termo que a Microsoft considera ofensivo quando usado neste contexto. O termo aparece neste artigo porque aparece atualmente no software. Quando o termo for removido do software, iremos removê-lo do artigo.
Crie o recurso AG com a seguinte sintaxe:
sudo pcs resource create <NameForAGResource> ocf:mssql:ag ag_name=<AGName> meta failure-timeout=30s --master meta notify=true
Onde
NameForAGResource
é o nome exclusivo dado a esse recurso de cluster para o AG eAGName
é o nome do AG que foi criado.No RHEL 7.7 e Ubuntu 18.04, e versões posteriores, você pode encontrar um aviso com o uso de
--master
, ou um erro comosqlag_monitor_0 on ag1 'not configured' (6): call=6, status=complete, exitreason='Resource must be configured with notify=true'
. Para evitar esta situação, utilize:sudo pcs resource create <NameForAGResource> ocf:mssql:ag ag_name=<AGName> meta failure-timeout=30s master notify=true
Crie o recurso de endereço IP para o AG que será associado à funcionalidade do ouvinte.
sudo pcs resource create <NameForIPResource> ocf:heartbeat:IPaddr2 ip=<IPAddress> cidr_netmask=<Netmask>
Onde
NameForIPResource
é o nome exclusivo para o recurso IP eIPAddress
é o endereço IP estático atribuído ao recurso.Para garantir que o endereço IP e o recurso AG estejam sendo executados no mesmo nó, uma restrição de colocation deve ser configurada.
sudo pcs constraint colocation add <NameForIPResource> <NameForAGResource>-master INFINITY with-rsc-role=Master
Onde
NameForIPResource
é o nome do recurso IP eNameForAGResource
é o nome do recurso AG.Crie uma restrição de ordenação para garantir que o recurso AG esteja ativo e funcionando antes do endereço IP. Embora a restrição de colocation implique uma restrição de ordenação, esta reforça-a.
sudo pcs constraint order promote <NameForAGResource>-master then start <NameForIPResource>
Onde
NameForIPResource
é o nome do recurso IP eNameForAGResource
é o nome do recurso AG.
Próximo passo
Neste tutorial, você aprendeu como criar e configurar um grupo de disponibilidade para o SQL Server no Linux. Você aprendeu a:
- Habilite grupos de disponibilidade.
- Crie pontos finais e certificados AG.
- Utilize o SQL Server Management Studio (SSMS) ou Transact-SQL para criar um AG.
- Crie o logon e as permissões do SQL Server para o Pacemaker.
- Crie recursos AG em um cluster Pacemaker.
Para a maioria das tarefas de administração AG, incluindo upgrades e failover, consulte: