Configurar o cluster de disco compartilhado SLES para SQL Server

Aplica-se a:SQL Server em Linux

Este guia fornece instruções para criar um cluster de discos partilhados de dois nós para SQL Server no SUSE Linux Enterprise Server (SLES). A camada de agrupamento é baseada na SUSE High Availability Extension (HAE) construída sobre Pacemaker.

Note

A partir do SQL Server 2025 (17.x), o SUSE Linux Enterprise Server (SLES) não é suportado. Para o SQL Server 2022 (16.x) e versões anteriores, apenas o SLES 15 é suportado.

Para obter mais informações sobre configuração de cluster, opções do agente de recursos, gerenciamento, práticas recomendadas e recomendações, consulte SUSE Linux Enterprise High Availability Extension 15.

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 compartilhamento NFS. As etapas a seguir descrevem como configurar esses servidores.

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

A primeira etapa é configurar o sistema operacional nos nós do cluster. Para este tutorial, use o SLES com uma subscrição válida para o add-on 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. Use estes termos ao longo deste guia.

  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
    

    Note

    No momento da configuração, uma chave mestra do servidor (SMK) é 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. Tens de copiar a chave de encriptação do nó primário para o nó secundário para que a conta local mssql possa aceder e desencriptar o SMK.

  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
    

    Ligue-se à base de dados SQL Server master com a sa conta e execute o seguinte script:

    USE master;
    GO
    
    CREATE LOGIN [<loginName>] with PASSWORD = N'<password>';
    GRANT VIEW SERVER STATE TO <loginName>;
    

    Atenção

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

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

  6. Siga os passos na documentação do SUSE para configurar e atualizar o ficheiro hosts para cada nó de cluster. O ficheiro hosts deve incluir o endereço IP e o nome de cada nó de cluster.

    Para verificares o endereço IP do nó atual, executa:

    sudo ip addr show
    

    Defina o nome de computador em cada um dos nós. Dê a cada nó um nome exclusivo com 15 caracteres ou menos. Defina o nome do computador adicionando-o a /etc/hostname usando YaST ou manualmente.

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

    127.0.0.1      localhost
    10.128.18.128  SLES1
    10.128.16.77   SLES2
    

    Todos os nós do cluster devem ter acesso SSH sem palavra-passe uns aos outros. Caso contrário, ferramentas como hb_report, crm_report, e o Explorador de História do Hawk só podem recolher dados do nó local. Se usar uma porta SSH não padrão, use a -X opção (veja Outros Requisitos e Recomendações). Por exemplo, se a porta SSH for 3479, invoque crm_report com:

    crm_report -X "-p 3479" [...]
    

    Para obter mais informações, consulte o Guia de Administração.

Na secção seguinte, configura o armazenamento partilhado e move os ficheiros da base de dados para esse armazenamento.

Configurar armazenamento compartilhado e mover arquivos de banco de dados

Pode usar várias soluções para fornecer armazenamento partilhado. Esta explicação demonstra como configurar o armazenamento partilhado com o NFS. Siga as melhores práticas e use o Kerberos para garantir o NFS:

Se não seguires esta orientação, qualquer pessoa que possa aceder à tua rede e falsificar o endereço IP de um nó SQL pode aceder aos teus ficheiros de dados. Como sempre, faça modelação de ameaças no seu sistema antes de o usar em produção.

Outra opção de armazenamento é usar o compartilhamento de arquivos SMB:

Configurar um servidor NFS

Para configurar um servidor NFS, consulte as seguintes etapas na documentação do SUSE: Configurando o Servidor NFS.

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

Antes de configurares o NFS do cliente para montar o caminho dos ficheiros de base de dados SQL Server para apontar para a localização partilhada, certifica-te de que guardas os ficheiros da base de dados numa localização temporária para os poderes copiar mais tarde para a partilha:

  1. Apenas no nó primário, guarde os arquivos de base de dados numa localização temporária. O script seguinte cria um novo diretório temporário, copia os ficheiros da base de dados para o novo diretório e remove os ficheiros antigos da base de dados. 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.

    su mssql
    mkdir /var/opt/mssql/tmp
    cp /var/opt/mssql/data/* /var/opt/mssql/tmp
    rm /var/opt/mssql/data/*
    exit
    

    Configure o cliente NFS em todos os nós do cluster:

    Note

    Para as melhores práticas e recomendações do SUSE relativamente ao armazenamento NFS altamente disponível, consulte Armazenamento NFS Altamente Disponível com DRBD e Pacemaker.

  2. Em cada nó, valide que o SQL Server inicia com sucesso com o novo caminho do ficheiro. Neste momento, apenas um nó deve executar o SQL Server de cada vez. Não podem correr ambos ao mesmo tempo porque tentam aceder aos ficheiros de dados simultaneamente.

    Para evitar que o SQL Server inicie em ambos os nós, utilize um recurso de cluster de Sistema de Ficheiros para garantir que a partilha é montada apenas por um nó de cada vez.

    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 ficheiro para armazenar o nome de login e a palavra-passe do SQL Server para o login 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 de palavra-passe 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.

  2. Todos os nós do cluster devem aceder uns aos outros através de SSH. Ferramentas como hb_report ou crm_report (para resolução de problemas) e o History Explorer do Hawk requerem acesso SSH sem palavra-passe entre os nós. Caso contrário, só podem recolher dados do nó atual. Se usar uma porta SSH não padrão, use a -X opção (ver man página). Por exemplo, se a porta SSH for 3479, invoque crm_report com:

    crm_report -X "-p 3479" [...]
    

    Para obter mais informações, consulte Requisitos e recomendações do sistema na documentação do SUSE.

  3. Instale a extensão de alta disponibilidade. Para instalar a extensão, siga as etapas no seguinte artigo da SUSE:

    Início Rápido de Instalação e Configuração

  4. Instale o agente de recursos FCI para SQL Server. Execute os seguintes comandos em ambos os nós:

    sudo zypper addrepo -fc https://packages.microsoft.com/config/sles/15/mssql-server-2022.repo
    sudo zypper --gpg-auto-import-keys refresh
    sudo zypper install mssql-server-ha
    
  5. Configure automaticamente o primeiro nó. Configure um cluster de um nó em execução configurando o primeiro nó, SLES1. Siga as instruções no artigo da SUSE, Configurando o primeiro nó.

    Quando terminar, verifique o estado do cluster com crm status:

    crm status
    

    Mostra que um nó, SLES1, está configurado.

  6. Adicione o segundo nó ao cluster existente. Em seguida, ligue o nó SLES2 ao cluster. Siga as instruções no artigo da SUSE, Adição do Segundo Nó.

    Quando terminar, verifique o estado do cluster com estado do crm. Se adicionares com sucesso um segundo nó, a saída é semelhante ao seguinte exemplo:

    2 nodes configured
    1 resource configured
    Online: [ SLES1 SLES2 ]
    Full list of resources:
    admin_addr     (ocf::heartbeat:IPaddr2):       Started SLES1
    

    Note

    admin_addr é o recurso virtual de IP do cluster que se configura durante a configuração inicial de um cluster de um único nó.

  7. Procedimentos de remoção. Se precisar remover um nó do cluster, use o script de inicialização ha-cluster-remove bootstrap. Para obter mais informações, consulte Visão geral dos scripts de bootstrap.

Configurar os recursos de cluster para o SQL Server

As etapas a seguir explicam como configurar o recurso de cluster para o SQL Server. Personalize as seguintes duas definições:

  • Nome do Recurso do SQL Server: Um nome para o recurso clusterizado do SQL Server.
  • Valor de tempo limite: O valor de tempo limite é a quantidade de tempo que o cluster aguarda enquanto um recurso é colocado online. Para o SQL Server, este valor representa o tempo que se espera que o SQL Server demore para colocar a master base de dados online.

Atualize os valores no script seguinte para o seu ambiente. Executa o script num nó para configurar e iniciar o serviço clusterizado.

sudo crm configure
primitive <sqlServerResourceName> ocf:mssql:fci op start timeout=<timeout_in_seconds>
colocation <constraintName> inf: <virtualIPResourceName> <sqlServerResourceName>
show
commit
exit

Por exemplo, o script a seguir cria um recurso clusterizado do SQL Server chamado mssqlha.

sudo crm configure
primitive mssqlha ocf:mssql:fci op start timeout=60s
colocation admin_addr_mssqlha inf: admin_addr mssqlha
show
commit
exit

Depois de comprometeres a configuração, o SQL Server começa no mesmo nó do recurso IP virtual.

Para obter mais informações, consulte Configurando e gerenciando recursos de cluster (linha de comando).

Verifique se o SQL Server foi iniciado

Para verificar se o SQL Server foi iniciado, execute o comando crm status:

crm status

O exemplo seguinte mostra os resultados quando o Pacemaker arranca com sucesso como recurso agrupado.

2 nodes configured
2 resources configured

Online: [ SLES1 SLES2 ]

Full list of resources:

 admin_addr     (ocf::heartbeat:IPaddr2):       Started SLES1
 mssqlha        (ocf::mssql:fci):       Started SLES1

Gerenciar recursos de cluster

Para gerenciar seus recursos de cluster, consulte o seguinte artigo da SUSE: Managing Cluster Resources

Comutação Manual

Embora os recursos estejam configurados para fazer failover ou migrar automaticamente para o outro nó do cluster em caso de falha de hardware ou software, também pode movê-los manualmente usando a interface gráfica do Pacemaker ou a linha de comandos.

Use o migrate comando para esta tarefa. Por exemplo, para migrar o recurso SQL para um nó de cluster chamado SLES2, execute:

crm resource
migrate mssqlha SLES2