Configurar a instância de cluster de failover – SQL Server em Linux (RHEL)

Aplica-se a: SQL Server - Linux

Uma instância de cluster de failover de disco compartilhado de dois nós do SQL Server fornece redundância no nível do servidor para alta disponibilidade. Neste tutorial, você aprenderá a criar uma instância de cluster de failover de dois nós do SQL Server em Linux. As etapas específicas que serão concluídas incluem:

  • Instalar e configurar o Linux
  • Instalar e configurar o SQL Server
  • Configurar o arquivo de hosts
  • Configurar o armazenamento compartilhado e mover os arquivos de banco de dados
  • Instalar e configurar o Pacemaker em cada nó de cluster
  • Configurar a instância de cluster de failover

Este artigo explica como criar uma FCI (instância de cluster de failover) de disco compartilhado de dois nós para o SQL Server. O artigo inclui instruções e exemplos de script para o RHEL (Red Hat Enterprise Linux). As distribuições do Ubuntu são semelhantes ao RHEL, portanto, os exemplos de script normalmente também funcionarão no Ubuntu.

Para obter informações conceituais, confira FCI (instância de cluster de failover) do SQL Server no Linux.

Pré-requisitos

Para concluir o cenário de ponta a ponta a seguir, você precisará de dois computadores para implantar o cluster de dois nós e outro servidor para armazenamento. As etapas abaixo descrevem como esses servidores serão configurados.

Instalar e configurar o Linux

A primeira etapa é configurar o sistema operacional nos nós de cluster. Em cada nó no cluster, configure uma distribuição do Linux. Use a mesma distribuição e versão em ambos os nós. Use uma ou outra das seguintes distribuições:

  • RHEL com uma assinatura válida para o complemento de HA

Instalar e configurar o SQL Server

  1. Instale e configure o SQL Server em ambos os nós. Para obter instruções detalhadas, confira Instalar o SQL Server em Linux.

  2. Designe um nó como primário e o outro como secundário para fins de configuração. Use esses termos para seguir este guia.

  3. No nó secundário, interrompa e desabilite o SQL Server. O seguinte exemplo interrompe 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. Como é uma conta local, a identidade dela não é compartilhada entre os nós. Portanto, você precisa copiar a chave de criptografia do nó primário para cada nó secundário, de modo que cada conta mssql local possa acessá-la para descriptografar a Chave Mestra do Servidor.

  4. 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 master do SQL Server com a conta SA e execute o seguinte:

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

    Alternativamente, você pode definir as permissões em um nível mais granular. O logon do Pacemaker exige que VIEW SERVER STATE consulte o status de integridade com sp_server_diagnostics, setupadmin e ALTER ANY LINKED SERVER para atualizar o nome da instância de FCI com o nome do recurso executando sp_dropserver e sp_addserver.

  5. No nó primário, interrompa e desabilite o SQL Server.

Configurar o arquivo de hosts

Em cada nó de cluster, configure o arquivo de hosts. O arquivo de hosts precisa incluir o endereço IP e o nome de cada nó de cluster.

  1. Verifique o endereço IP de cada nó. O script a seguir mostra o endereço IP do nó atual.

    sudo ip addr show
    
  2. Defina o nome do computador em cada nó. Dê a cada nó um nome exclusivo que tenha 15 caracteres ou menos. Defina o nome do computador adicionando-o a /etc/hosts. O script a seguir permite que você edite /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
    

Configurar o armazenamento e mover arquivos de banco de dados

Você precisa fornecer um armazenamento ao qual ambos os nós possam ter acesso. Você pode usar o iSCSI, o NFS ou o SMB. Configure o armazenamento, apresente o armazenamento para os nós de cluster e, em seguida, mova os arquivos de banco de dados para o novo armazenamento. Os seguintes artigos explicam as etapas para cada tipo de armazenamento:

Instalar e configurar o Pacemaker em cada nó de cluster

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

    O comando a seguir cria e popula este arquivo:

    sudo touch /var/opt/mssql/secrets/passwd
    sudo echo '<loginName>' >> /var/opt/mssql/secrets/passwd
    sudo echo '<loginPassword>' >> /var/opt/mssql/secrets/passwd
    sudo chown root:root /var/opt/mssql/secrets/passwd
    sudo chmod 600 /var/opt/mssql/secrets/passwd
    
  2. Em ambos os nós de cluster, abra as portas de 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 você estiver usando outro firewall que não tenha uma configuração de alta disponibilidade interna, as portas a seguir precisarão ser abertas para que o Pacemaker possa se comunicar com outros nós no cluster:

    • TCP: portas 2224, 3121 e 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 do usuário padrão criado ao instalar pacotes do Pacemaker e do Corosync. Use a mesma senha em ambos os nós.

    sudo passwd hacluster
    
  5. Habilite 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 comando a seguir em ambos os nós.

    sudo systemctl enable pcsd
    sudo systemctl start pcsd
    sudo systemctl enable pacemaker
    
  6. Instalar o agente do recurso FCI para SQL Server. Execute os comandos a seguir em ambos os nós.

    sudo yum install mssql-server-ha
    

Configurar a instância de cluster de failover

A FCI será criada em um grupo de recursos. Isso é ligeiramente mais fácil, pois o grupo de recursos atenua a necessidade de restrições. No entanto, adicione os recursos ao grupo de recursos na ordem em que eles devem ser iniciados. A ordem em que eles devem ser iniciados é:

  1. Recurso de armazenamento
  2. Recurso de rede
  3. Recurso de aplicativo

Este exemplo cria uma FCI no grupo NewLinFCIGrp. O nome do grupo de recursos precisa ser exclusivo em qualquer recurso criado no Pacemaker.

  1. Crie o recurso de disco. Você não receberá nenhuma resposta se não houver nenhum problema. A maneira de criar o recurso de disco depende do tipo de armazenamento. A seguinte seção mostra exemplos para cada tipo de armazenamento (iSCSI, NFS e SMB). Use o exemplo que se aplica ao tipo de armazenamento do armazenamento clusterizado.

    sudo pcs resource create <iSCSIDiskResourceName> Filesystem device="/dev/<VolumeGroupName>/<LogicalVolumeName>" directory="<FolderToMountiSCSIDisk>" fstype="<FileSystemType>" --group RGName
    
    • <iSCSIDIskResourceName> é o nome do recurso associado ao disco iSCSI
    • <VolumeGroupName> é o nome do grupo de volume
    • <LogicalVolumeName> é o nome do volume lógico que foi criado
    • <FolderToMountiSCSIDIsk> é a pasta para montar o disco (para bancos de dados do sistema e a localização padrão, ela é /var/opt/mssql/data)
    • <FileSystemType> seria EXT4 ou XFS, dependendo de como tudo estava formatado e ao que a distribuição dá suporte.

  1. Crie o endereço IP que será usado pela FCI. Você não receberá nenhuma resposta se não houver nenhum problema.

    sudo pcs resource create <IPResourceName> ocf:heartbeat:IPaddr2 ip=<IPAddress> nic=<NetworkCard> cidr_netmask=<NetMask> --group <RGName>
    
    • <IPResourceName> é o nome do recurso associado ao endereço IP
    • <IPAddress> é o endereço IP da FCI
    • <NetworkCard> é a placa de rede associada à sub-rede (ou seja, eth0)
    • <NetMask> é a máscara de rede da sub-rede (ou seja, 24)
    • <RGName> é o nome do grupo de recursos
  2. Crie o recurso da FCI. Você não receberá nenhuma resposta se não houver nenhum problema.

    sudo pcs resource create FCIResourceName ocf:mssql:fci op defaults timeout=60s --group RGName
    
    • <FCIResourceName> não é apenas o nome do recurso, mas o nome amigável associado à FCI. Isso é o que os usuários e os aplicativos usam para se conectar.
    • <RGName> é o nome do grupo de recursos.
  3. Execute o comando sudo pcs resource. A FCI deve estar online.

  4. Conecte-se à FCI com o SSMS ou o sqlcmd usando o nome de recurso/DNS da FCI.

  5. Emita a instrução SELECT @@SERVERNAME. Ela deverá retornar o nome da FCI.

  6. Emita a instrução SELECT SERVERPROPERTY('ComputerNamePhysicalNetBIOS'). Ela deverá retornar o nome do nó no qual a FCI está sendo executada.

  7. Faça failover manual da FCI para os outros nós. Confira as instruções em Operar a instância de cluster de failover– SQL Server em Linux.

  8. Por fim, faça failback da FCI para o nó original e remova a restrição de colocalização.

Resumo

Neste tutorial, você concluiu as tarefas a seguir.

  • Instalar e configurar o Linux
  • Instalar e configurar o SQL Server
  • Configurar o arquivo de hosts
  • Configurar o armazenamento compartilhado e mover os arquivos de banco de dados
  • Instalar e configurar o Pacemaker em cada nó de cluster
  • Configurar a instância de cluster de failover