Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Aplica-se a:SQL Server no Linux
Este artigo explica como configurar o armazenamento iSCSI para uma FCI (instância de cluster de failover) no Linux.
Configurar iSCSI
O iSCSI usa a rede para apresentar discos de um servidor conhecido como um destino para servidores. Os servidores que se conectam ao destino iSCSI exigem que um iniciador iSCSI esteja configurado. Os discos no destino recebem permissões explícitas, de forma que somente os iniciadores que devem poder acessá-los conseguem fazer isso. O próprio alvo deve ter alta disponibilidade e ser confiável.
Informações importantes de destino iSCSI
Embora esta seção não aborde como configurar um destino iSCSI, uma vez que ele é específico ao tipo de fonte que você usará, verifique se a segurança dos discos que serão usados pelos nós de cluster está configurada.
O destino nunca deverá ser configurado em nenhum dos nós FCI se estiver usando um destino iSCSI baseado em Linux. Para desempenho e disponibilidade, as redes iSCSI devem ser separadas das redes usadas pelo tráfego de rede regular nos servidores de origem e de cliente. As redes usadas para o iSCSI devem ser rápidas. Lembre-se de que a rede consome alguma largura de banda do processador, portanto, planeje adequadamente se estiver usando um servidor normal.
O mais importante a ser concluído no destino é garantir que os discos criados tenham as permissões apropriadas para que somente os servidores que participam do FCI tenham acesso a eles. Um exemplo é mostrado aqui do destino iSCSI do Microsoft, em que linuxnodes1 é o nome criado e, nesse caso, os endereços IP dos nós são atribuídos para que NewFCIDisk1.vhdx seja visível a eles.
Instruções
Esta seção explicará como configurar um iniciador iSCSI nos servidores que atuarão como nós para o FCI. As instruções devem funcionar como estão no Red Hat Enterprise Linux (RHEL) e no Ubuntu.
Para obter mais informações sobre o iniciador iSCSI para as distribuições compatíveis, confira os links a seguir:
Observação
A partir do SQL Server 2025 (17.x), não há suporte para SLES (SUSE Linux Enterprise Server).
Escolha um dos servidores que participarão da configuração da FCI. Não importa qual. O iSCSI deve estar em uma rede dedicada, portanto, configure o iSCSI para reconhecer e usar essa rede. Execute
sudo iscsiadm -m iface -I <iSCSIIfaceName> -o new, em que<iSCSIIfaceName>é o nome exclusivo ou amigável para a rede. O exemplo a seguir usaiSCSINIC:sudo iscsiadm -m iface -I iSCSINIC -o newAqui está a saída esperada.
New interface iSCSINIC addedEdite
/var/lib/iscsi/ifaces/iSCSIIfaceName. Verifique se ele tem os seguintes valores preenchidos completamente:-
iface.net_ifacenameé o nome da placa de rede como visto no SO. -
iface.hwaddressé o endereço MAC do nome exclusivo que será criado para a interface a seguir. iface.ipaddressiface.subnet_Mask
Consulte o seguinte exemplo:
-
Localize o destino iSCSI.
sudo iscsiadm -m discovery -t sendtargets -I <iSCSINetName> -p <TargetIPAddress>:<TargetPort><iSCSINetName>é o nome exclusivo/amigável para a rede,<TargetIPAddress>é o endereço IP do destino iSCSI e<TargetPort>é a porta do destino iSCSI.Aqui está a saída esperada.
10.181.182.1:3260,1 iqn.1991-05.com.contoso:dcl-linuxnodes1-target 10.201.202.1:3260,1 iqn.1991-05.com.contoso:dc1-linuxnodes1-target [2002:b4b5:b601::b4b5:b601]:3260,1 iqn.1991-05.com.contoso:dcl-linuxnodes1-target [2002:8c9:ca01::c8c9:ca01]:3260,1 iqn.1991-05.com.contoso:dcl-linuxnodes1-targetFaça login no alvo.
sudo iscsiadm -m node -I <iSCSIIfaceName> -p TargetIPAddress -l<iSCSIIfaceName>é o nome exclusivo/amigável para a rede e<TargetIPAddress>é o endereço IP do destino iSCSI.Aqui está a saída esperada.
Logging in to [iface: iSCSINIC, target: ian.1991-05.com.contoso:dcl-linuxnodesl-tar get, portal: 10.181.182.1,3260] (multiple) Login to [iface: iSCSINIC, target: ian.1991-05.com.contoso:dcl-linuxnodesl-tar get, portal: 10.181.182.1,3260] successful.Verifique se há uma conexão com o destino iSCSI.
sudo iscsiadm -m sessionA saída deve ser semelhante ao seguinte exemplo:
tcp: [1] 10.105.16.7:3260,1 iqn.1991-05.com.contoso:dcl-linuxnodes1-target (non-flash)Verifique discos conectados ao iSCSI.
sudo grep "Attached SCSI" /var/log/messages
Crie um volume físico no disco iSCSI.
sudo pvcreate /dev/<devicename><devicename>é o nome do dispositivo da etapa anterior.Crie um grupo de volumes no disco iSCSI. Os discos atribuídos a um único grupo de volumes são vistos como um pool ou uma coleção.
sudo vgcreate <VolumeGroupName> /dev/devicename<VolumeGroupName>é o nome do grupo de volumes e<devicename>é o nome do dispositivo da Etapa 6.Crie e verifique o volume lógico do disco.
sudo lvcreate -Lsize -n <LogicalVolumeName> <VolumeGroupName><size>é o tamanho do volume a ser criado e pode ser especificado com G (gigabytes), T (terabytes) etc.;<LogicalVolumeName>é o nome do volume lógico e<VolumeGroupName>é o nome do grupo de volumes da etapa anterior.Aqui está a saída esperada.
Logical volume "FCIDataLV1" created.O exemplo a seguir cria um volume de 25 GB.
Execute
sudo lvspara ver o LVM que foi criado.Formate o volume lógico com um sistema de arquivos com suporte. Para ext4, use o seguinte exemplo:
sudo mkfs.ext4 /dev/<VolumeGroupName>/<LogicalVolumeName><VolumeGroupName>é o nome do grupo de volumes da etapa anterior.<LogicalVolumeName>é o nome do volume lógico da etapa anterior.Para bancos de dados do sistema ou qualquer item armazenado na localização de dados padrão, siga estas etapas. Caso contrário, vá para a etapa 13.
Verifique se SQL Server está parado no servidor no qual você está trabalhando.
sudo systemctl stop mssql-server sudo systemctl status mssql-serverTorne-se totalmente superusuário. Se tiver êxito, você não receberá nenhuma confirmação.
sudo -iAltere para ser o usuário
mssql. Se tiver êxito, você não receberá nenhuma confirmação.su mssqlCrie um diretório temporário para armazenar os dados SQL Server e arquivos de log. Se tiver êxito, você não receberá nenhuma confirmação.
mkdir <TempDir><TempDir>é o nome da pasta. O exemplo a seguir cria uma pasta chamada /var/opt/mssql/TempDir.mkdir /var/opt/mssql/TempDirCopie os dados SQL Server e os arquivos de log para o diretório temporário. Se tiver êxito, você não receberá nenhuma confirmação.
cp /var/opt/mssql/data/* <TempDir><TempDir>é o nome da pasta da etapa anterior.Verifique se os arquivos estão no diretório.
ls <TempDir><TempDir>é o nome da pasta da etapa anterior.Exclua os arquivos do diretório de dados SQL Server existente. Se tiver êxito, você não receberá nenhuma confirmação.
rm - f /var/opt/mssql/data/*Verifique se os arquivos foram excluídos. A figura a seguir mostra um exemplo de toda a sequência de c até h.
ls /var/opt/mssql/dataDigite
exitpara voltar ao usuário deroot.Monte o volume lógico iSCSI na pasta de dados SQL Server. Se tiver êxito, você não receberá nenhuma confirmação.
mount /dev/<VolumeGroupName>/<LogicalVolumeName> /var/opt/mssql/data<VolumeGroupName>é o nome do grupo de volume e<LogicalVolumeName>é o nome do volume lógico que foi criado. A sintaxe de exemplo a seguir corresponde ao grupo de volumes e ao volume lógico do comando anterior.mount /dev/FCIDataVG1/FCIDataLV1 /var/opt/mssql/dataAltere o proprietário do ponto de montagem para
mssql. Se tiver êxito, você não receberá nenhuma confirmação.chown mssql /var/opt/mssql/dataAltere a propriedade do grupo da montagem para
mssql. Se tiver êxito, você não receberá nenhuma confirmação.chgrp mssql /var/opt/mssql/dataAlterne para o usuário
mssql. Se tiver êxito, você não receberá nenhuma confirmação.su mssqlCopie os arquivos do diretório temporário
/var/opt/mssql/data. Se tiver êxito, você não receberá nenhuma confirmação.cp /var/opt/mssql/TempDir/* /var/opt/mssql/dataVerifique se os arquivos estão lá.
ls /var/opt/mssql/dataInsira
exitpara não sermssql.Insira
exitpara não serroot.Inicie SQL Server. Se tudo foi copiado corretamente e a segurança aplicada corretamente, o SQL Server deve ser exibido como iniciado.
sudo systemctl start mssql-server sudo systemctl status mssql-serverDesligue o SQL Server e verifique se ele foi desligado corretamente.
sudo systemctl stop mssql-server sudo systemctl status mssql-server
Para outros itens que não os bancos de dados do sistema, como bancos de dados de usuário ou backups, siga estas etapas. Se estiver usando apenas a localização padrão, vá para a Etapa 14.
Mude para o superusuário. Se tiver êxito, você não receberá nenhuma confirmação.
sudo -iCrie uma pasta a ser usada por SQL Server.
mkdir <FolderName><FolderName>é o nome da pasta. O caminho completo da pasta precisará ser especificado se não estiver na localização correta. O exemplo a seguir cria uma pasta chamada /var/opt/mssql/userdata.mkdir /var/opt/mssql/userdataMonte o volume lógico iSCSI na pasta que foi criada na etapa anterior. Se tiver êxito, você não receberá nenhuma confirmação.
mount /dev/<VolumeGroupName>/<LogicalVolumeName> <FolderName><VolumeGroupName>é o nome do grupo de volume,<LogicalVolumeName>é o nome do volume lógico que foi criado e<FolderName>é o nome da pasta. A sintaxe de exemplo é mostrada aqui.mount /dev/FCIDataVG2/FCIDataLV2 /var/opt/mssql/userdataAltere a propriedade da pasta criada para
mssql. Se tiver êxito, você não receberá nenhuma confirmação.chown mssql <FolderName><FolderName>é o nome da pasta que foi criada. Um exemplo é mostrado aqui.chown mssql /var/opt/mssql/userdataAltere o grupo da pasta criada para
mssql. Se tiver êxito, você não receberá nenhuma confirmação.chown mssql <FolderName><FolderName>é o nome da pasta que foi criada. Um exemplo é mostrado aqui.chown mssql /var/opt/mssql/userdataDigite
exitpara deixar de ser o superusuário.Para testar, crie um banco de dados nessa pasta. O script a seguir cria um banco de dados, alterna o contexto para ele, verifica se os arquivos existem no nível do sistema operacional e, em seguida, exclui a localização temporária. É possível usar o SSMS ou o sqlcmd para executar esse script.
DROP DATABASE TestDB; GO CREATE DATABASE TestDB ON (NAME = TestDB_Data, FILENAME = '/var/opt/mssql/userdata/TestDB_Data.mdf') LOG ON (NAME = TestDB_Log, FILENAME = '/var/opt/mssql/userdata/TestDB_Log.ldf'); GO USE TestDB; GOExecute o comando a seguir no shell para ver os novos arquivos de banco de dados.
sudo ls /var/opt/mssal/userdataEsta é a saída esperada.
lost+found TestDB_Data.mdf TestDB_Log.ldfExclua o banco de dados para limpar.
DROP DATABASE TestDB; GOsudo ls /var/opt/mssal/userdataVeja a saída esperada.
lost+foundDesmontar o compartilhamento
sudo umount /dev/<VolumeGroupName>/<LogicalVolumeName> <FolderName><VolumeGroupName>é o nome do grupo de volume,<LogicalVolumeName>é o nome do volume lógico que foi criado e<FolderName>é o nome da pasta. A sintaxe de exemplo é mostrada aqui.sudo umount /dev/FCIDataVG2/FCIDataLV2 /var/opt/mssql/userdata
Configure o servidor para que somente o Pacemaker possa ativar o grupo de volumes.
sudo lvmconf --enable-halvm --services -startstopservicesGere uma lista dos grupos de volumes no servidor. Qualquer item listado que não seja o disco iSCSI será usado pelo sistema, como para o disco do SO.
sudo vgsModifique a seção de configuração de ativação do arquivo /etc/lvm/lvm.conf. Configure a seguinte linha:
volume_list = [ <ListOfVGsNotUsedByPacemaker> ]<ListOfVGsNotUsedByPacemaker>é a lista de grupos de volumes da saída da Etapa 20 que não serão usados pelo FCI. Coloque cada um entre aspas e separe por uma vírgula. Um exemplo é mostrado aqui.Quando o Linux for iniciado, ele montará o sistema de arquivos. Para garantir que apenas o Pacemaker possa montar o disco iSCSI, recompile a imagem do sistema de arquivos raiz.
Execute o comando a seguir, o que pode levar alguns minutos até ser concluído. Se tiver êxito, você não receberá nenhuma mensagem.
sudo dracut -H -f /boot/initramfs-$(uname -r).img $(uname -r)Reinicie o servidor.
Em outro servidor que participará do FCI, execute as Etapas de 1 a 6. Isso apresenta o destino iSCSI para o SQL Server.
Gere uma lista dos grupos de volumes no servidor. Ele deve mostrar o grupo de volumes criado anteriormente.
sudo vgsInicie SQL Server e verifique se ele pode ser iniciado neste servidor.
sudo systemctl start mssql-server sudo systemctl status mssql-serverDesligue o SQL Server e verifique se ele foi desligado corretamente.
sudo systemctl stop mssql-server sudo systemctl status mssql-serverRepita as Etapas de 1-6 em quaisquer outros servidores que participarão do FCI.
Agora você está pronto para configurar a FCI.