Configurar o cluster do RHEL para o Grupo de Disponibilidade do SQL Server
Aplica se a:SQL Server (todas as versões com suporte) – Linux
Este documento explica como criar um cluster do grupo de disponibilidade de três nós para o SQL Server no Red Hat Enterprise Linux. Para alta disponibilidade, um grupo de disponibilidade em Linux exige três nós – consulte Alta disponibilidade e proteção de dados para configurações de grupo de disponibilidade. A camada de clustering baseia-se no complemento de HA do RHEL (Red Hat Enterprise Linux) criado com base no Pacemaker.
Observação
O acesso à documentação completa do Red Hat exige uma assinatura válida.
Para saber mais sobre configuração de cluster, opções de agentes de recursos e gerenciamento, acesse a Documentação de referência do RHEL.
Observação
O SQL Server não é tão totalmente integrado ao Pacemaker no Linux quanto ao clustering de failover do Windows Server. Uma instância do SQL Server não reconhece o cluster. O Pacemaker fornece orquestração de recursos de cluster. Além disso, o nome da rede virtual é específico do clustering de failover do Windows Server – não há um equivalente no Pacemaker. As DMVs (exibições de gerenciamento dinâmico) do grupo de disponibilidade que consultam as informações do cluster retornam linhas vazias em clusters do Pacemaker. Para criar um ouvinte de reconexão transparente após o failover, registre manualmente o nome do ouvinte em DNS com o IP usado para criar o recurso de IP virtual.
As seções a seguir percorrem as etapas para configurar um cluster do Pacemaker e adicionar um grupo de disponibilidade como recurso no cluster para alta disponibilidade.
Roteiro
As etapas para criar um grupo de disponibilidade em servidores Linux para alta disponibilidade são diferentes das etapas em um cluster de failover do Windows Server. A lista a seguir descreve as etapas de alto nível:
Configurar um gerenciador de recursos de cluster, como o Pacemaker. Estas instruções são descritas neste documento.
A maneira de configurar um gerenciador de recursos de cluster depende da distribuição específica do Linux.
Importante
Os ambientes de produção exigem um agente de isolamento, como o STONITH para alta disponibilidade. As demonstrações desta documentação não usam agentes de isolamento. As demonstrações se destinam apenas a teste e validação.
Um cluster do Linux usa o isolamento para retornar o cluster a um estado conhecido. A maneira de configurar o isolamento depende da distribuição e do ambiente. Atualmente, o isolamento não está disponível em alguns ambientes de nuvem. Para saber mais, confira Políticas de suporte para clusters de alta disponibilidade do RHEL – plataformas de virtualização.
Adicione o grupo de disponibilidade como um recurso no cluster.
Configurar a alta disponibilidade do RHEL
Para configurar a alta disponibilidade do RHEL, habilite a assinatura de alta disponibilidade e configure o Pacemaker.
Habilitar a assinatura de alta disponibilidade para RHEL
Cada nó no cluster deve ter uma assinatura apropriada para RHEL e o complemento de alta disponibilidade. Examine os requisitos em Como instalar pacotes de cluster de alta disponibilidade no Red Hat Enterprise Linux. Siga estas etapas para configurar a assinatura e repositórios:
Registre o sistema.
sudo subscription-manager register
Forneça seu nome de usuário e senha.
Liste os pools disponíveis para registro.
sudo subscription-manager list --available
Na lista de pools disponíveis, observe a ID do pool para a assinatura de alta disponibilidade.
Atualize o seguinte script. Substitua
<pool id>
pela ID do pool para alta disponibilidade da etapa anterior. Execute o script para anexar a assinatura.sudo subscription-manager attach --pool=<pool id>
Habilite o repositório.
RHEL 7
sudo subscription-manager repos --enable=rhel-ha-for-rhel-7-server-rpms
RHEL 8
sudo subscription-manager repos --enable=rhel-8-for-x86_64-highavailability-rpms
Para saber mais, confira Pacemaker – O cluster de alta disponibilidade e software livre.
Após configurar a assinatura, conclua as seguintes etapas para configurar o Pacemaker:
Configurar o Pacemaker
Após registrar a assinatura, conclua as etapas a seguir para configurar o Pacemaker:
Em todos os nós de cluster, abra as portas do firewall do Pacemaker. Para abrir essas portas com o
firewalld
, execute o seguinte comando:sudo firewall-cmd --permanent --add-service=high-availability sudo firewall-cmd --reload
Se o firewall não tiver uma configuração de alta disponibilidade interna, abra as portas do Pacemaker a seguir.
- TCP: Portas 2224, 3121 e 21064
- UDP: Porta 5405
Instale os pacotes do Pacemaker em todos os nós.
sudo yum install pacemaker pcs fence-agents-all resource-agents
Defina a senha do usuário padrão criado ao instalar pacotes do Pacemaker e do Corosync. Use a mesma senha em todos os nós.
sudo passwd hacluster
Para que os nós reingressem no cluster após a reinicialização, habilite e inicie o serviço
pcsd
e o Pacemaker. Execute o seguinte comando em todos os nós.sudo systemctl enable pcsd sudo systemctl start pcsd sudo systemctl enable pacemaker
Crie o cluster. Para criar o cluster, execute o seguinte comando:
RHEL 7
sudo pcs cluster auth <node1> <node2> <node3> -u hacluster -p <password for hacluster> sudo pcs cluster setup --name <clusterName> <node1> <node2> <node3> sudo pcs cluster start --all sudo pcs cluster enable --all
RHEL8
Para o RHEL 8, você precisará autenticar os nós separadamente. Insira manualmente o nome de usuário e a senha do hacluster quando solicitado.
sudo pcs host auth <node1> <node2> <node3> sudo pcs cluster setup <clusterName> <node1> <node2> <node3> sudo pcs cluster start --all sudo pcs cluster enable --all
Observação
Se você tiver configurado um cluster anteriormente nos mesmos nós, será necessário usar a opção
--force
ao executarpcs cluster setup
. Essa opção é equivalente a executar opcs cluster destroy
. Para reabilitar o Pacemaker, execute osudo systemctl enable pacemaker
.Instalar o agente do recurso SQL Server para o SQL Server. Execute os seguintes comandos em todos os nós.
sudo yum install mssql-server-ha
Após configurar o Pacemaker, use pcs
para interagir com o cluster. Execute todos os comandos em um nó do cluster.
Configurar isolamento (STONITH)
Os fornecedores do cluster do Pacemaker exigem que o STONITH esteja habilitado e que um dispositivo de isolamento esteja definido para uma configuração de cluster com suporte. STONITH são as iniciais em inglês pra "acertar a cabeça do outro nó". Quando o gerenciador de recursos de cluster não pode determinar o estado de um nó ou de um recurso em um nó, o isolamento coloca o cluster em um estado conhecido novamente.
Um dispositivo STONITH fornece um agente de isolamento. Como configurar o Pacemaker no Red Hat Enterprise Linux no Azure fornece um exemplo de como criar um dispositivo STONITH para esse cluster no Azure. Modifique as instruções de seu ambiente.
O isolamento de nível de recurso verifica se não há dados corrompidos em caso de interrupção por meio da configuração de um recurso. Por exemplo, você poderá usar o isolamento no nível do recurso para marcar o disco em um nó como desatualizado quando o link de comunicação ficar inativo.
O isolamento no nível do nó verifica se um nó não executa nenhum recurso. Isso é feito redefinindo o nó. O Pacemaker dá suporte a uma grande variedade de dispositivos de isolamento. Os exemplos incluem no-break ou cartões de interface de gerenciamento para servidores.
Para saber mais sobre o STONITH e o isolamento, configure os artigos a seguir:
- Clusters do Pacemaker do zero
- Isolamento e STONITH
- Complemento de alta disponibilidade do Red Hat com Pacemaker: isolamento
Observação
Como a configuração de isolamento no nível do nó depende muito do seu ambiente, desabilite-a para este tutorial (ela pode ser configurada posteriormente). O script a seguir desabilita o isolamento no nível do nó:
sudo pcs property set stonith-enabled=false
A desabilitação do STONITH destina-se apenas a fins de teste. Se você pretende usar o Pacemaker em um ambiente de produção, deve planejar uma implementação do STONITH dependendo do ambiente e mantê-lo habilitado.
Defina a propriedade de cluster cluster-recheck-interval
cluster-recheck-interval
indica o intervalo de sondagem segundo o qual o cluster verifica se há alterações nos parâmetros de recurso, restrições ou outras opções de cluster. Se uma réplica ficar inativa, o cluster tentará reiniciar a réplica em um intervalo associado ao valor failure-timeout
e ao valor cluster-recheck-interval
. Por exemplo, se failure-timeout
for definido como 60 segundos e cluster-recheck-interval
for definido como 120 segundos, será realizada uma tentativa de reinicialização em um intervalo superior a 60 segundos, mas inferior a 120 segundos. Recomendamos que você defina failure-timeout como 60 segundos e cluster-recheck-interval com um valor superior a 60 segundos. Não é recomendável definir cluster-recheck-interval como um valor pequeno.
Para atualizar o valor da propriedade para 2 minutes
, execute:
sudo pcs property set cluster-recheck-interval=2min
Importante
Todas as distribuições que usam o pacote mais recente e disponível do Pacemaker 1.1.18-11.el7 apresentam uma alteração de comportamento na configuração de cluster start-failure-is-fatal quando o respectivo valor é falso. Essa alteração afeta o fluxo de trabalho de failover. Se uma réplica primária apresentar uma interrupção, o cluster deverá fazer failover para uma das réplicas secundárias disponíveis. Em vez disso, os usuários observarão que o cluster continua tentando iniciar a réplica primária com falha. Se a primária nunca ficar online (devido a uma interrupção permanente), o cluster nunca fará failover para outra réplica secundária disponível. Devido a essa alteração, a configuração recomendada anteriormente para definir start-failure-is-fatal não é mais válida e a configuração precisa ser revertida de volta para seu valor padrão true
.
Além disso, o recurso do AG precisa ser atualizado para incluir a propriedade failover-timeout
.
Para atualizar o valor da propriedade para true
, execute:
sudo pcs property set start-failure-is-fatal=true
Para atualizar a propriedade failure-timeout
do recurso ag_cluster
para 60s
, execute:
pcs resource update ag_cluster meta failure-timeout=60s
Para saber mais sobre as propriedades de cluster do Pacemaker, confira Propriedades de clusters do Pacemaker.
Criar um logon do SQL Server para o Pacemaker
Em todos os SQL Servers, crie um logon de servidor para Pacemaker. O Transact-SQL a seguir cria um logon:
USE [master] GO CREATE LOGIN [pacemakerLogin] with PASSWORD= N'ComplexP@$$w0rd!'; ALTER SERVER ROLE [sysadmin] ADD MEMBER [pacemakerLogin];
No momento da criação do grupo de disponibilidade, o usuário do Pacemaker precisará das permissões ALTERAR, CONTROLAR e EXIBIR DEFINIÇÃO no grupo de disponibilidade, após ele ser criado mas antes que os nós sejam adicionados a ele.
Em todos os SQL Servers, salve as credenciais do logon do SQL Server.
echo 'pacemakerLogin' >> ~/pacemaker-passwd echo 'ComplexP@$$w0rd!' >> ~/pacemaker-passwd sudo mv ~/pacemaker-passwd /var/opt/mssql/secrets/passwd sudo chown root:root /var/opt/mssql/secrets/passwd sudo chmod 400 /var/opt/mssql/secrets/passwd # Only readable by root
Criar recurso do grupo de disponibilidade
Para criar o recurso do grupo de disponibilidade, use o comando pcs resource create
e defina as propriedades do recurso. O comando a seguir cria um recurso do tipo mestre/subordinado ocf:mssql:ag
para o grupo de disponibilidade com o nome ag1
.
RHEL 7
sudo pcs resource create ag_cluster ocf:mssql:ag ag_name=ag1 meta failure-timeout=60s master notify=true
RHEL 8
Com a disponibilidade do RHEL 8, a sintaxe create foi alterada. Se você está usando o RHEL 8, a terminologia master
foi alterada para promotable
. Use o seguinte comando create em vez do comando acima:
sudo pcs resource create ag_cluster ocf:mssql:ag ag_name=ag1 meta failure-timeout=60s promotable notify=true
Observação
Ao criar o recurso e, depois, periodicamente, o agente de recurso do Pacemaker define automaticamente o valor do REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT
com base na configuração do grupo de disponibilidade. Por exemplo, se o grupo de disponibilidade tem três réplicas síncronas, o agente definirá REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT
como 1
. Para obter detalhes e mais opções de configuração, consulte Alta disponibilidade e proteção de dados para as configurações de grupo de disponibilidade.
Criar recurso de IP virtual
Para criar o recurso de endereço IP virtual, execute o comando a seguir em um nó. Use um endereço IP estático disponível da rede. Substitua o endereço IP entre <10.128.16.240>
por um endereço IP válido.
sudo pcs resource create virtualip ocf:heartbeat:IPaddr2 ip=<10.128.16.240>
Não há nome do servidor virtual equivalente no Pacemaker. Para usar uma cadeia de conexão que aponte para um nome do servidor de cadeia de caracteres, em vez de um endereço IP, registre o endereço de recurso do IP virtual e o nome do servidor virtual desejado no DNS. Para configurações de DR, registre o nome do servidor virtual e o endereço IP desejados com os servidores DNS nos sites primário e de DR.
Adicionar restrição de colocalização
Quase todas as decisões em um cluster do Pacemaker, como escolher o local em que um recurso deve ser executado, são feitas pela comparação de pontuações. As pontuações são calculadas por recurso. O gerenciador de recursos de cluster escolhe o nó com a pontuação mais alta para um recurso específico. Se um nó tiver uma pontuação negativa para um recurso, o recurso não poderá ser executado nesse nó.
Em um cluster do Pacemaker, você pode manipular as decisões do cluster com restrições. As restrições têm uma pontuação. Se uma restrição tiver uma pontuação menor que INFINITY
, o Pacemaker a considerará uma recomendação. A opção de INFINITY
é obrigatória.
Para verificar se a réplica primária e o recurso de IP virtual são executados no mesmo host, defina uma restrição de colocalização com pontuação igual a INFINITY. Para adicionar a restrição de colocalização, execute o comando a seguir em um nó.
RHEL 7
Quando você cria o recurso ag_cluster
no RHEL 7, ele o cria como ag_cluster-master
. Use o seguinte comando para o RHEL 7:
sudo pcs constraint colocation add virtualip ag_cluster-master INFINITY with-rsc-role=Master
RHEL 8
Quando você cria o recurso ag_cluster
no RHEL 8, ele o cria como ag_cluster-clone
. Use o seguinte comando para o RHEL 8:
sudo pcs constraint colocation add virtualip with master ag_cluster-clone INFINITY with-rsc-role=Master
Adicionar restrição de ordenação
A restrição de colocalização tem uma restrição de ordenação implícita. Ela move o recurso de IP virtual antes de mover o recurso de grupo de disponibilidade. Por padrão, a sequência de eventos é:
O usuário emite
pcs resource move
ao grupo de disponibilidade primário do node1 para o node2.O recurso de IP virtual é interrompido no nó 1.
O recurso de IP virtual é iniciado no nó 2.
Observação
Neste ponto, o endereço IP aponta temporariamente para o nó 2, enquanto o nó 2 ainda é um secundário de pré-failover.
O grupo de disponibilidade primário no nó 1 é rebaixado para secundário.
O grupo de disponibilidade secundário no nó 2 é promovido para primário.
Para impedir que o endereço IP aponte temporariamente para o nó com o secundário de pré-failover, adicione uma restrição de ordenação.
Para adicionar uma restrição de ordenação, execute o comando a seguir em um nó:
RHEL 7
sudo pcs constraint order promote ag_cluster-master then start virtualip
RHEL 8
sudo pcs constraint order promote ag_cluster-clone then start virtualip
Importante
Depois de configurar o cluster e adicionar o grupo de disponibilidade como um recurso de cluster, você não poderá usar o Transact-SQL para fazer failover dos recursos de grupo de disponibilidade. Os recursos de cluster do SQL Server em Linux não são acoplados tão firmemente com o sistema operacional como são em um WSFC (cluster de failover do Windows Server). O serviço SQL Server não reconhece a presença do cluster. Toda a orquestração é feita por meio das ferramentas de gerenciamento de cluster. No RHEL ou no Ubuntu, use pcs
e, no SLES, use as ferramentas crm
.
Faça failover manualmente do grupo de disponibilidade com pcs
. Não inicie o failover com Transact-SQL. Para obter instruções, confira Failover.