Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
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ó.
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
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.
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.
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.
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-serverConecte-se ao banco de dados do SQL Server
mastercom a contasae 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 STATEconsulte o estado de saúde comsp_server_diagnostics,setupadmineALTER ANY LINKED SERVERpara atualizar o nome da instância FCI para o nome do recurso, executando os comandossp_dropserveresp_addserver.No nó primário, pare e desative o SQL Server.
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 showDefina 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/hostscomvi.sudo vi /etc/hostsO exemplo a seguir mostra
/etc/hostscom adições para dois nós chamadossqlfcivm1esqlfcivm2.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:
Instalar
nfs-utilssudo yum -y install nfs-utilsAtivar e iniciar
rpcbindsudo systemctl enable rpcbind && sudo systemctl start rpcbindAtivar e iniciar
nfs-serversudo systemctl enable nfs-server && sudo systemctl start nfs-serverEdite
/etc/exportspara 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)Exportar as ações
sudo exportfs -ravVerifique se os caminhos são compartilhados/exportados, executados a partir do servidor NFS
sudo showmount -eAdicionar exceção no SELinux
sudo setsebool -P nfs_export_all_rw 1Abra 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.
Instalar
nfs-utilssudo yum -y install nfs-utilsAbra 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 --reloadVerifique se você pode ver os compartilhamentos NFS em máquinas cliente
sudo showmount -e <IP OF NFS SERVER>Repita essas etapas em todos os nós do cluster.
Para obter mais informações sobre como usar o NFS, consulte os seguintes recursos:
- servidores NFS e firewalld | Stack Exchange
- Montagem de um volume NFS | Guia de administradores de rede Linux
- Configuração do servidor NFS | Portal do Cliente Red Hat
Monte o diretório de arquivos de banco de dados para apontar para o armazenamento compartilhado
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/* exitEm todos os nós do cluster, edite o arquivo
/etc/fstabpara incluir o mount.<IP OF NFS SERVER>:<shared_storage_path> <database_files_directory_path> nfs timeo=14,intrO 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.
Execute o comando
mount -apara que o sistema atualize os caminhos montados.Copie o banco de dados e os arquivos de log que você salvou para
/var/opt/mssql/tmppara 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 localmssql.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/* exitValide 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
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/passwdAtençã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.
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 --reloadSe 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
Instale os pacotes do Pacemaker em cada nó.
sudo yum install pacemaker pcs fence-agents-all resource-agentsDefina 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 haclusterAtive e inicie o serviço
pcsde 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 pacemakerInstale 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
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 --allConfigure 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 cfgPor exemplo, o script a seguir cria um recurso clusterizado do SQL Server chamado
mssqlhae um recurso IP flutuante com endereço IP10.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 cfgDepois que a configuração for enviada por push, o SQL Server será iniciado em um nó.
Verifique se o SQL Server foi iniciado.
sudo pcs statusO 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