Partilhar via


Criar e configurar um grupo de disponibilidade para o SQL Server no Linux

Aplica-se a:SQL Server em Linux

Este tutorial mostra como criar e configurar um grupo de disponibilidade (AG) para SQL Server no Linux. Ao contrário do SQL Server 2016 (13.x) e versões anteriores no Windows, pode ativar um AG com ou sem criar primeiro o cluster Pacemaker subjacente. A integração com o cluster, se necessário, acontece 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, pode ativar a funcionalidade de grupos de disponibilidade de duas formas: usar a utilidade mssql-conf ou editar o mssql.conf ficheiro manualmente.

Importante

Tem de ativar a funcionalidade AG para réplicas apenas de configuração, mesmo no SQL Server Express.

Use o utilitário mssql-conf

No terminal, execute o seguinte comando:

sudo /opt/mssql/bin/mssql-conf set hadr.hadrenabled 1

Editar o arquivo mssql.conf

Também pode modificar o mssql.conf ficheiro, localizado na /var/opt/mssql pasta. Adicione as seguintes linhas:

[hadr]

hadr.hadrenabled = 1

Reiniciar o SQL Server

Depois de ativar os grupos de disponibilidade, deve reiniciar o SQL Server. Use 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. Deve restaurar o certificado de uma instância em todas as outras instâncias que participam como réplicas no mesmo Grupo de Disponibilidade (AG). O processo de certificado é necessário mesmo para uma réplica somente de configuração.

Só pode criar endpoints e restaurar certificados usando o Transact-SQL. Também pode usar certificados gerados por servidores não SQL. 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:

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, LinAGN2e LinAGN3.

  1. 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
    
  2. 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
    
  3. 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
    
  4. 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 para LinAGN2 e LinAGN3.
    • Copie LinAGN2_Cert.cer para LinAGN1 e LinAGN3.
    • Copie LinAGN3_Cert.cer para LinAGN1 e LinAGN2.
  5. Altere a propriedade e o grupo associado aos arquivos de certificado copiados para mssql.

    sudo chown mssql:mssql <CertFileName>
    
  6. Crie os logins e usuários no nível da instância associados ao LinAGN2 e LinAGN3 no LinAGN1.

    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.

  7. Restaure LinAGN2_Cert e LinAGN3_Cert no LinAGN1. 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
    
  8. Conceda permissão aos logins associados a LinAGN2 e LinAGN3 para se ligarem ao endpoint no LinAGN1.

    GRANT CONNECT ON ENDPOINT::AGEP TO LinAGN2_Login;
    GRANT CONNECT ON ENDPOINT::AGEP TO LinAGN3_Login;
    
  9. Crie os logins e usuários no nível da instância associados ao LinAGN1 e LinAGN3 no LinAGN2.

    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
    
  10. Restaure LinAGN1_Cert e LinAGN3_Cert no LinAGN2.

    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
    
  11. Conceda permissão aos logins associados a LinAGN1 e LinAGN3 para se ligarem ao endpoint no LinAGN2.

    GRANT CONNECT ON ENDPOINT::AGEP TO LinAGN1_Login;
    GRANT CONNECT ON ENDPOINT::AGEP TO LinAGN3_Login;
    GO
    
  12. Crie os logins e usuários no nível da instância associados ao LinAGN1 e LinAGN2 no LinAGN3.

    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
    
  13. Restaure LinAGN1_Cert e LinAGN2_Cert no LinAGN3.

    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
    
  14. Conceda permissão aos logins associados a LinAG1 e LinAGN2 para se ligarem ao endpoint no LinAGN3.

    GRANT CONNECT ON ENDPOINT::AGEP TO LinAGN1_Login;
    GRANT CONNECT ON ENDPOINT::AGEP TO LinAGN2_Login;
    GO
    

Criar o grupo de disponibilidade

Esta secção mostra como usar o SQL Server Management Studio (SSMS) ou Transact-SQL para criar o grupo de disponibilidade do 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.

  1. 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.

  2. Na caixa de diálogo Introdução, selecione Avançar.

  3. 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 ou NONE na lista suspensa. Use EXTERNAL quando usar o Pacemaker. Utilize NONE para cenários especializados, como escalamento de leitura. Selecionar a opção para detecçã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.

    Captura de ecrã de Criar grupo de disponibilidade mostrando o tipo de cluster.

  4. Na caixa de diálogo Selecionar bancos de dados, selecione os bancos de dados que participarão do AG. Cada base de dados deve ter um backup completo antes de a poderes adicionar a um AG. Selecione Avançar.

  5. Na caixa de diálogo Especificar réplicas, selecione Adicionar réplica.

  6. 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.

  7. Repita as duas etapas anteriores para a instância que conterá uma réplica somente de configuração ou outra réplica secundária.

  8. As três instâncias aparecem no diálogo Especificar Réplicas. Se utilizar um tipo de cluster Externo, para a réplica secundária que será verdadeiramente secundária, certifique-se de que o Modo de Disponibilidade esteja alinhado com o da réplica primária e que o modo de failover esteja definido para 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.

    Captura de tela de Criar grupo de disponibilidade mostrando a opção secundária legível.

    O exemplo a seguir mostra um AG com duas réplicas, tipo de cluster Nenhum, e uma réplica apenas de configuração.

    Captura de ecrã de Criar grupo de disponibilidade mostrando a página Réplicas.

  9. 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.

  10. Se usar secundários legíveis ou criar um AG com um cluster tipo None para escala de leitura, pode criar um listener selecionando o separador Listener. Também pode adicionar um listener mais tarde. Para criar um ouvinte, escolha a opção Criar um grupo de disponibilidade e insira um nome, uma porta TCP/IP, e se deve usar um endereço IP DHCP estático ou atribuído automaticamente. Para um AG com um tipo de cluster Nenhum, o IP deve ser estático e ser configurado para coincidir com o endereço IP do primário.

    Captura de tela de Criar Grupo de Disponibilidade mostrando a opção de ouvinte.

  11. Se criares um ouvinte para cenários legíveis, o SSMS permite a criação do encaminhamento só de leitura no assistente. Também podes adicioná-lo mais tarde via SSMS ou Transact-SQL. Para adicionar roteamento somente leitura agora:

    1. Selecione a guia Encaminhamento Read-Only.

    2. 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.

    3. 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.

  12. Selecione Avançar.

  13. Escolha como as réplicas secundárias sã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). Tal como nos certificados, se estiveres a fazer backups manualmente e a copiá-los, define permissões nos ficheiros de backup das outras réplicas. Selecione Avançar.

  14. 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.

  15. Na caixa de diálogo Resumo, selecione Concluir. Começa agora o processo de criação da AG.

  16. 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.

Utilize o Transact-SQL

Esta seção mostra exemplos de criação de um AG usando Transact-SQL. Podes configurar o ouvinte e o encaminhamento só de leitura depois de criares o AG. Pode modificar o próprio AG usando ALTER AVAILABILITY GROUP, mas não pode alterar o tipo de cluster 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. Para mais informações e outras opções, consulte os seguintes links:

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.

  1. Execute a seguinte instrução no nó que atuará como réplica primária e contém a cópia totalmente lida/escrita das bases 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
    
  2. Numa janela de consulta ligada à outra réplica, execute a seguinte instrução para ligar a réplica ao AG e iniciar o processo de seed da réplica primária para a secundária.

    ALTER AVAILABILITY GROUP [<AGName>]
    JOIN WITH (CLUSTER_TYPE = EXTERNAL);
    GO
    
    ALTER AVAILABILITY GROUP [<AGName>]
    GRANT CREATE ANY DATABASE;
    GO
    
  3. Numa janela de consulta ligada à réplica apenas de configuração, execute a seguinte instrução para a ligar 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 é que pode configurar o roteamento de leitura apenas como parte da criação inicial do AG.

  1. Execute a seguinte instrução no nó que atuará como réplica primária e contém a cópia totalmente lida/escrita das bases 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 da base de dados que usa 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 ou nós subjacentes. Está registado no DNS juntamente com IPAddress.
    • IPAddress é um endereço IP associado a ListenerName. Também é único e não é igual a nenhum dos servidores ou nós. Aplicativos e usuários finais usam ListenerName ou IPAddress para se conectar ao AG.
      • SubnetMask é a máscara de sub-rede do IPAddress. No SQL Server 2019 (15.x) e versões anteriores, este valor é 255.255.255.255. No SQL Server 2022 (16.x) e versões posteriores, este valor é 0.0.0.0.
  2. Numa janela de consulta ligada à outra réplica, execute a seguinte instrução para adicionar a réplica ao Grupo de Disponibilidade (AG) e iniciar o processo de inicializaçã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
    
  3. 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. Use esta configuração para o cenário de escala de leitura onde não se espera failover. Esta etapa cria o listener que é na verdade a réplica principal e implementa o roteamento de apenas leitura, utilizando a funcionalidade round robin.

  1. Execute a seguinte instrução no nó que atuará como réplica primária e contém a cópia de leitura e escrita completa da base 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
    

    Neste exemplo:

    • AGName é o nome do grupo de disponibilidade.
    • DBName é o nome da base de dados que usa com o grupo de disponibilidade. Também pode ser uma lista de nomes separados por vírgulas.
    • PortOfEndpoint é o número de porta usado pelo endpoint que crias.
      • PortOfInstance é o número da porta usado pela instância do SQL Server.
    • ListenerName é um nome distinto de qualquer uma das réplicas subjacentes, mas que efetivamente não é utilizado.
    • PrimaryReplicaIPAddress é o endereço IP da réplica primária.
      • SubnetMask é a máscara de sub-rede do IPAddress. No SQL Server 2019 (15.x) e versões anteriores, este valor é 255.255.255.255. No SQL Server 2022 (16.x) e versões posteriores, este valor é 0.0.0.0.
  2. 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 que utiliza SQL Server no Linux precisa de acesso à instância do SQL Server e de permissões sobre o 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.

  1. 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
    
  2. No Node 1, introduza o comando:

    sudo emacs /var/opt/mssql/secrets/passwd
    

    Este comando abre o editor do Emacs.

  3. Insira as duas linhas a seguir no editor:

    PMLogin
    
    <password>
    
  4. Mantenha pressionada a tecla Ctrl, pressione Xe, em seguida, C, para sair e salvar o arquivo.

  5. Execute:

    sudo chmod 400 /var/opt/mssql/secrets/passwd
    

    para bloquear o ficheiro.

  6. Repita os Passos 1-5 nos outros servidores que servem como réplicas.

Criar os recursos do grupo de disponibilidade no cluster do Pacemaker (somente externo)

Depois de criar um grupo de disponibilidade no SQL Server, deve criar os recursos correspondentes no Pacemaker quando especificar um tipo de cluster como 'External'. Dois recursos estão associados a um grupo de disponibilidade: o próprio grupo de disponibilidade e um endereço IP. Configurar o recurso do endereço IP é opcional se não estiver a usar a funcionalidade de listener, mas é recomendado.

O recurso AG que crias é um tipo de recurso chamado clone. O recurso AG tem cópias em cada nó e um recurso controlador 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.

  1. Crie o recurso AG com a seguinte sintaxe:

    sudo pcs resource create <NameForAGResource> ocf:mssql:ag ag_name=<AGName> meta failure-timeout=30s promotable notify=true
    

    Neste exemplo, NameForAGResource é o nome único que atribui a este recurso de cluster do AG, e AGName é o nome do AG que criou.

  2. Crie o recurso de endereço IP para o AG que você associa à funcionalidade listener.

    sudo pcs resource create <NameForIPResource> ocf:heartbeat:IPaddr2 ip=<IPAddress> cidr_netmask=<Netmask>
    

    Neste exemplo, NameForIPResource é o nome único do recurso IP, e IPAddress é o endereço IP estático que atribui ao recurso.

  3. Para garantir que o endereço IP e o recurso AG correm no mesmo nó, configure uma restrição de colocation.

    sudo pcs constraint colocation add <NameForIPResource> with promoted <NameForAGResource>-clone INFINITY
    

    Neste exemplo, NameForIPResource é o nome do recurso IP, e NameForAGResource é o nome do recurso AG.

  4. 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 colocação implique uma restrição de ordenação, este passo reforça-a.

    sudo pcs constraint order promote <NameForAGResource>-clone then start <NameForIPResource>
    

    Neste exemplo, NameForIPResource é o nome do recurso IP, e NameForAGResource é 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: