Partilhar via


Configurar a instância de cluster de failover RHEL para o SQL Server

Aplica-se a:SQL Server em Linux

Este guia fornece instruções para criar um cluster de failover de dois nós com disco compartilhado para o SQL Server no Red Hat Enterprise Linux. A camada de clustering é baseada no complemento Red Hat Enterprise Linux (RHEL) HA construído sobre Pacemaker. A instância do SQL Server está ativa em um nó ou no outro.

Observação

O acesso ao complemento e à documentação do Red Hat HA requer uma assinatura.

Como mostra o diagrama a seguir, o armazenamento é apresentado para dois servidores. Os componentes de clustering - Corosync e Pacemaker - coordenam as comunicações e a gestão de recursos. Um dos servidores tem a conexão ativa com os recursos de armazenamento e o SQL Server. Quando o Pacemaker deteta uma falha, os componentes de agrupamento são responsáveis por mover os recursos para o outro nó.

Diagrama do cluster SQL Server de disco compartilhado Red Hat Enterprise Linux 7.

Para obter mais informações sobre configuração de cluster, opções de agentes de recursos e gerenciamento, visite documentação de referência do RHEL.

Neste ponto, a integração do SQL Server com o Pacemaker não está tão acoplada quanto com o WSFC no Windows. De dentro do SQL Server, não há conhecimento sobre a presença do cluster, toda a orquestração é feita de fora para dentro e o serviço é controlado como uma instância independente pelo Pacemaker. Também, por exemplo, o cluster dmvs sys.dm_os_cluster_nodes e sys.dm_os_cluster_properties não terão registros.

Para usar uma cadeia de conexão que aponte para um nome de servidor de cadeia de caracteres e não usar o IP, eles terão que registrar em seu servidor DNS o IP usado para criar o recurso IP virtual (conforme explicado nas seções a seguir) com o nome do servidor escolhido.

As seções a seguir percorrem as etapas para configurar uma solução de cluster de failover.

Pré-requisitos

Para concluir o seguinte cenário de ponta a ponta, você precisa de duas máquinas para implantar o cluster de dois nós e outro servidor para configurar o servidor NFS. As etapas a seguir descrevem como esses servidores serão configurados.

Instalar e configurar o sistema operacional em cada nó de cluster

A primeira etapa é configurar o sistema operacional nos nós do cluster. Para este passo a passo, use o RHEL com uma assinatura válida para o complemento HA.

Instalar e configurar o SQL Server em cada nó de cluster

  1. Instale e configure o SQL Server em ambos os nós. Para obter instruções detalhadas, consulte Diretrizes de instalação do SQL Server no Linux.

  2. Designe um nó como primário e o outro como secundário, para fins de configuração. Esteja atento a estes termos para o guia a seguir.

  3. No nó secundário, pare e desative o SQL Server.

    O exemplo a seguir para e desabilita o SQL Server:

    sudo systemctl stop mssql-server
    sudo systemctl disable mssql-server
    

Observação

No momento da instalação, uma Chave Mestra do Servidor é gerada para a instância do SQL Server e colocada em /var/opt/mssql/secrets/machine-key. No Linux, o SQL Server sempre é executado como uma conta local chamada mssql. Por ser uma conta local, a sua identidade não é compartilhada entre nodos. Portanto, você precisa copiar a chave de criptografia do nó primário para cada nó secundário para que cada conta mssql local possa acessá-la para descriptografar a Chave Mestra do Servidor.

  1. No nó primário, crie um logon do SQL Server para o Pacemaker e conceda a permissão de logon para executar sp_server_diagnostics. O Pacemaker usa essa conta para verificar qual nó está executando o SQL Server.

    sudo systemctl start mssql-server
    

    Conecte-se ao banco de dados do SQL Server master com a conta sa e execute o seguinte:

    USE [master];
    GO
    
    CREATE LOGIN [<loginName>]
        WITH PASSWORD = N'<password>';
    
    ALTER SERVER ROLE [sysadmin] ADD MEMBER [<loginName>];
    

    Atenção

    A sua palavra-passe deve seguir a política padrão de senha 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.

    Como alternativa, você pode definir as permissões em um nível mais granular. O login do Pacemaker requer que VIEW SERVER STATE consulte o estado de saúde com sp_server_diagnostics, setupadmin e ALTER ANY LINKED SERVER para atualizar o nome da instância FCI para o nome do recurso, executando os comandos sp_dropserver e sp_addserver.

  2. No nó primário, pare e desative o SQL Server.

  3. Configurar o ficheiro de hosts para cada nó do cluster. O arquivo host deve incluir o endereço IP e o nome de cada nó de cluster.

    Verifique o endereço IP de cada nó. O seguinte script mostra o endereço IP do seu nó atual.

    sudo ip addr show
    

    Defina o nome do computador em cada nó. Dê a cada nó um nome exclusivo com 15 caracteres ou menos. Defina o nome do computador adicionando-o a /etc/hosts. O script a seguir permite editar /etc/hosts com vi.

    sudo vi /etc/hosts
    

    O exemplo a seguir mostra /etc/hosts com adições para dois nós chamados sqlfcivm1 e sqlfcivm2.

    127.0.0.1   localhost localhost4 localhost4.localdomain4
    ::1       localhost localhost6 localhost6.localdomain6
    10.128.18.128 sqlfcivm1
    10.128.16.77 sqlfcivm2
    

Na próxima seção, você configurará o armazenamento compartilhado e moverá seus arquivos de banco de dados para esse armazenamento.

Configurar armazenamento compartilhado e mover arquivos de banco de dados

Existem várias soluções para fornecer armazenamento compartilhado. Este passo a passo demonstra a configuração do armazenamento compartilhado com NFS. Recomendamos seguir as práticas recomendadas e usar Kerberos para proteger o NFS. Para obter um exemplo, consulte RHEL7: Usar Kerberos para controlar o acesso a compartilhamentos de rede NFS.

Advertência

Se você não proteger o NFS, qualquer pessoa que possa acessar sua rede e falsificar o endereço IP de um nó SQL poderá acessar seus arquivos de dados. Como sempre, certifique-se de que modele ameaças para o seu sistema antes de usá-lo em produção. Outra opção de armazenamento é usar o compartilhamento de arquivos SMB.

Configurar armazenamento compartilhado com NFS

Importante

A hospedagem de arquivos de banco de dados em um servidor NFS com a versão <4 não é suportada nesta versão. Isso inclui o uso de NFS para clustering de failover de disco compartilhado, bem como bancos de dados em instâncias não clusterizadas. Estamos trabalhando para habilitar outras versões do servidor NFS nas próximas versões.

No servidor NFS, execute as seguintes etapas:

  1. Instalar nfs-utils

    sudo yum -y install nfs-utils
    
  2. Ativar e iniciar rpcbind

    sudo systemctl enable rpcbind && sudo systemctl start rpcbind
    
  3. Ativar e iniciar nfs-server

    sudo systemctl enable nfs-server && sudo systemctl start nfs-server
    
  4. Edite /etc/exports para exportar o diretório que você deseja compartilhar. Você precisa de uma linha para cada compartilhamento desejado. Por exemplo:

    /mnt/nfs  10.8.8.0/24(rw,sync,no_subtree_check,no_root_squash)
    
  5. Exportar as ações

    sudo exportfs -rav
    
  6. Verifique se os caminhos são compartilhados/exportados, executados a partir do servidor NFS

    sudo showmount -e
    
  7. Adicionar exceção no SELinux

    sudo setsebool -P nfs_export_all_rw 1
    
  8. Abra o firewall do servidor.

    sudo firewall-cmd --permanent --add-service=nfs
    sudo firewall-cmd --permanent --add-service=mountd
    sudo firewall-cmd --permanent --add-service=rpc-bind
    sudo firewall-cmd --reload
    

Configurar todos os nós de cluster para se conectarem ao armazenamento compartilhado NFS

Execute as etapas a seguir em todos os nós do cluster.

  1. Instalar nfs-utils

    sudo yum -y install nfs-utils
    
  2. Abra o firewall em clientes e servidor NFS

    sudo firewall-cmd --permanent --add-service=nfs
    sudo firewall-cmd --permanent --add-service=mountd
    sudo firewall-cmd --permanent --add-service=rpc-bind
    sudo firewall-cmd --reload
    
  3. Verifique se você pode ver os compartilhamentos NFS em máquinas cliente

    sudo showmount -e <IP OF NFS SERVER>
    
  4. Repita essas etapas em todos os nós do cluster.

Para obter mais informações sobre como usar o NFS, consulte os seguintes recursos:

Monte o diretório de arquivos de banco de dados para apontar para o armazenamento compartilhado

  1. Somente no nó primário, salve os arquivos de banco de dados em um local temporário. O script a seguir cria um novo diretório temporário, copia os arquivos de banco de dados para o novo diretório e remove os arquivos de banco de dados antigos. Como o SQL Server é executado como usuário local mssql, você precisa certificar-se de que, após a transferência de dados para o compartilhamento montado, o usuário local tenha acesso de leitura e gravação ao compartilhamento.

    sudo su mssql
    mkdir /var/opt/mssql/tmp
    cp /var/opt/mssql/data/* /var/opt/mssql/tmp
    rm /var/opt/mssql/data/*
    exit
    
  2. Em todos os nós do cluster, edite o arquivo /etc/fstab para incluir o mount.

    <IP OF NFS SERVER>:<shared_storage_path> <database_files_directory_path> nfs timeo=14,intr
    

    O script a seguir mostra um exemplo da edição.

    10.8.8.0:/mnt/nfs /var/opt/mssql/data nfs timeo=14,intr
    

Observação

Se estiver usando um recurso de sistema de arquivos (FS) como recomendado aqui, não há necessidade de preservar o comando de montagem em /etc/fstab. O Pacemaker cuidará da montagem da pasta quando iniciar o recurso clusterizado FS. Com a ajuda de uma vedação, garantirá que o FS nunca seja montado duas vezes.

  1. Execute o comando mount -a para que o sistema atualize os caminhos montados.

  2. Copie o banco de dados e os arquivos de log que você salvou para /var/opt/mssql/tmp para o compartilhamento recém-montado /var/opt/mssql/data. Esta etapa só precisa ser feita no nó primário. Certifique-se de conceder permissões de leitura e escrita ao utilizador local mssql.

    sudo chown mssql /var/opt/mssql/data
    sudo chgrp mssql /var/opt/mssql/data
    sudo su mssql
    cp /var/opt/mssql/tmp/* /var/opt/mssql/data/
    rm /var/opt/mssql/tmp/*
    exit
    
  3. Valide se o SQL Server é iniciado com êxito com o novo caminho de arquivo. Faça isso em cada nó. Neste ponto, apenas um nó deve executar o SQL Server por vez. Ambos não podem ser executados ao mesmo tempo porque ambos tentarão acessar os arquivos de dados simultaneamente (para evitar iniciar acidentalmente o SQL Server em ambos os nós, use um recurso de cluster do Sistema de Arquivos para garantir que o compartilhamento não seja montado duas vezes pelos nós diferentes). Os comandos a seguir iniciam o SQL Server, verificam o status e param o SQL Server.

    sudo systemctl start mssql-server
    sudo systemctl status mssql-server
    sudo systemctl stop mssql-server
    

Neste ponto, ambas as instâncias do SQL Server estão configuradas para serem executadas com os arquivos de banco de dados no armazenamento compartilhado. A próxima etapa é configurar o SQL Server para Pacemaker.

Instalar e configurar o Pacemaker em cada nó do cluster

  1. Em ambos os nós do cluster, crie um arquivo para armazenar o nome de usuário e a senha do SQL Server para o logon do Pacemaker. O comando a seguir cria e preenche esse arquivo:

    sudo touch /var/opt/mssql/secrets/passwd
    echo '<loginName>' | sudo tee -a /var/opt/mssql/secrets/passwd
    echo '<password>' | sudo tee -a /var/opt/mssql/secrets/passwd
    sudo chown root:root /var/opt/mssql/secrets/passwd
    sudo chmod 600 /var/opt/mssql/secrets/passwd
    

    Atenção

    A sua palavra-passe deve seguir a política padrão de senha 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.

  2. Em ambos os nós do cluster, abra as portas de firewall do Pacemaker. Para abrir essas portas com firewalld, execute o seguinte comando:

    sudo firewall-cmd --permanent --add-service=high-availability
    sudo firewall-cmd --reload
    

    Se você estiver usando outro firewall que não tenha uma configuração interna de alta disponibilidade, as seguintes portas precisarão ser abertas para que o Pacemaker possa se comunicar com outros nós no cluster:

    • TCP: portas 2224, 3121, 21064
    • UDP: porta 5405
  3. Instale os pacotes do Pacemaker em cada nó.

    sudo yum install pacemaker pcs fence-agents-all resource-agents
    
  4. Defina a senha para o usuário padrão que é criado ao instalar os pacotes Pacemaker e Corosync. Use a mesma senha em ambos os nós.

    sudo passwd hacluster
    
  5. Ative e inicie o serviço pcsd e o Pacemaker. Isso permitirá que os nós reingressem no cluster após a reinicialização. Execute o seguinte comando em ambos os nós.

    sudo systemctl enable pcsd
    sudo systemctl start pcsd
    sudo systemctl enable pacemaker
    
  6. Instale o agente de recursos FCI para SQL Server. Execute os seguintes comandos em ambos os nós.

    sudo yum install mssql-server-ha
    

Configurar agente de esgrima

Um dispositivo STONITH fornece um agente de isolamento. Configurando 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 para o seu ambiente.

Criar o cluster

  1. Em um dos nós, crie o cluster.

    sudo pcs cluster auth <nodeName1 nodeName2 ...> -u hacluster
    sudo pcs cluster setup --name <clusterName> <nodeName1 nodeName2 ...>
    sudo pcs cluster start --all
    
  2. Configure os recursos de cluster para SQL Server, Sistema de Arquivos e recursos IP virtuais e envie a configuração para o cluster. Você precisa das seguintes informações:

    • Nome do Recurso do SQL Server: Um nome para o recurso clusterizado do SQL Server.
    • Floating IP Resource Name: Um nome para o recurso de endereço IP virtual.
    • Endereço IP: O endereço IP que os clientes usam para se conectar à instância clusterizada do SQL Server.
    • Nome do Recurso do Sistema de Ficheiros: Um nome para o recurso do sistema de ficheiros.
    • dispositivo: O caminho de compartilhamento NFS
    • dispositivo: O caminho local onde está montado no compartilhamento
    • fstype: Tipo de compartilhamento de arquivos (ou seja, nfs)

    Atualize os valores do script a seguir para seu ambiente. Execute apenas num nó para configurar e iniciar o serviço em cluster.

    sudo pcs cluster cib cfg
    sudo pcs -f cfg resource create <sqlServerResourceName> ocf:mssql:fci
    sudo pcs -f cfg resource create <floatingIPResourceName> ocf:heartbeat:IPaddr2 ip=<ip Address>
    sudo pcs -f cfg resource create <fileShareResourceName> Filesystem device=<networkPath> directory=<localPath> fstype=<fileShareType>
    sudo pcs -f cfg constraint colocation add <virtualIPResourceName> <sqlResourceName>
    sudo pcs -f cfg constraint colocation add <fileShareResourceName> <sqlResourceName>
    sudo pcs cluster cib-push cfg
    

    Por exemplo, o script a seguir cria um recurso clusterizado do SQL Server chamado mssqlhae um recurso IP flutuante com endereço IP 10.0.0.99. Ele também cria um recurso Filesystem e adiciona restrições para que todos os recursos sejam colocalizados no mesmo nó que o recurso SQL.

    sudo pcs cluster cib cfg
    sudo pcs -f cfg resource create mssqlha ocf:mssql:fci
    sudo pcs -f cfg resource create virtualip ocf:heartbeat:IPaddr2 ip=10.0.0.99
    sudo pcs -f cfg resource create fs Filesystem device="10.8.8.0:/mnt/nfs" directory="/var/opt/mssql/data" fstype="nfs"
    sudo pcs -f cfg constraint colocation add virtualip mssqlha
    sudo pcs -f cfg constraint colocation add fs mssqlha
    sudo pcs cluster cib-push cfg
    

    Depois que a configuração for enviada por push, o SQL Server será iniciado em um nó.

  3. Verifique se o SQL Server foi iniciado.

    sudo pcs status
    

    O exemplo a seguir mostra os resultados quando o Pacemaker iniciou com êxito uma instância clusterizada do SQL Server.

    fs     (ocf::heartbeat:Filesystem):    Started sqlfcivm1
    virtualip     (ocf::heartbeat:IPaddr2):      Started sqlfcivm1
    mssqlha  (ocf::mssql:fci): Started sqlfcivm1
    
    PCSD Status:
     sqlfcivm1: Online
     sqlfcivm2: Online
    
    Daemon Status:
     corosync: active/disabled
     pacemaker: active/enabled
     pcsd: active/enabled