Configurare un'istanza del cluster di failover - iSCSI - SQL Server in Linux
Si applica a: SQL Server - Linux
Questo articolo illustra come configurare la risorsa di archiviazione iSCSI per un'istanza del cluster di failover in Linux.
Configurare iSCSI
iSCSI usa la rete per presentare i dischi da un server noto come destinazione ad altri server. Per i server che si connettono alla destinazione iSCSI è necessario che sia configurato un iniziatore iSCSI. Ai dischi della destinazione vengono concesse autorizzazioni esplicite, in modo che solo gli iniziatori che devono riuscire ad accedervi possano farlo. La destinazione deve essere a disponibilità elevata e affidabile.
Informazioni importanti sulla destinazione iSCSI
Anche se in questa sezione non viene illustrato come configurare una destinazione iSCSI perché questa configurazione dipende dal tipo di origine che si usa, assicurarsi che sia configurata la sicurezza per i dischi che verranno usati dai nodi del cluster.
Se si usa una destinazione iSCSI basata su Linux, la destinazione non deve mai essere configurata in nessuno dei nodi dell'istanza del cluster di failover. Per quanto riguarda prestazioni e disponibilità, le reti iSCSI devono essere separate dalle reti usate dal normale traffico di rete sia nel server di origine che in quello client. Le reti usate per iSCSI dovrebbero essere veloci. Tenere presente che la rete utilizza parte della larghezza di banda del processore. Se quindi si usa un server normale, pianificare di conseguenza.
L'aspetto più importante da verificare nella destinazione è che ai dischi creati siano assegnate le autorizzazioni appropriate, in modo che solo i server che partecipano all'istanza del cluster di failover possano accedervi. Un esempio è quello della destinazione iSCSI Microsoft, qui illustrato, dove linuxnodes1
è il nome creato e, in questo caso, vengono assegnati gli indirizzi IP dei nodi in modo che possano visualizzare NewFCIDisk1.vhdx
.
Istruzioni
In questa sezione viene illustrato come configurare un iniziatore iSCSI nei server che fungono da nodi per l'istanza del cluster di failover. Le istruzioni dovrebbero essere valide così come sono in Red Hat Enterprise Linux (RHEL) e in Ubuntu.
Per altre informazioni sull'iniziatore iSCSI per le distribuzioni supportate, vedere i collegamenti seguenti:
Scegliere uno dei server che parteciperanno alla configurazione dell'istanza del cluster di failover. Non è rilevante quale. iSCSI deve trovarsi in una rete dedicata, quindi configurare iSCSI in modo che riconosca e usi tale rete. Eseguire
sudo iscsiadm -m iface -I <iSCSIIfaceName> -o new
dove<iSCSIIfaceName>
è il nome descrittivo o univoco della rete. Nell'esempio seguente viene usatoiSCSINIC
:sudo iscsiadm -m iface -I iSCSINIC -o new
Ecco l'output previsto:
New interface iSCSINIC added
Modificare
/var/lib/iscsi/ifaces/iSCSIIfaceName
. Assicurarsi che i valori seguenti siano completamente compilati:iface.net_ifacename
è il nome della scheda di rete, visualizzato nel sistema operativo.iface.hwaddress
è l'indirizzo MAC del nome univoco che verrà creato per l'interfaccia seguente.iface.ipaddress
iface.subnet_Mask
Vedere l'esempio seguente:
Trovare la destinazione iSCSI.
sudo iscsiadm -m discovery -t sendtargets -I <iSCSINetName> -p <TargetIPAddress>:<TargetPort>
<iSCSINetName>
è il nome descrittivo/univoco della rete,<TargetIPAddress>
è l'indirizzo IP della destinazione iSCSI e<TargetPort>
è la porta della destinazione iSCSI.Ecco l'output previsto:
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-target
Accedere alla destinazione.
sudo iscsiadm -m node -I <iSCSIIfaceName> -p TargetIPAddress -l
<iSCSIIfaceName>
è il nome descrittivo/univoco della rete e<TargetIPAddress>
è l'indirizzo IP della destinazione iSCSI.Ecco l'output previsto:
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.
Verificare che sia presente una connessione alla destinazione iSCSI.
sudo iscsiadm -m session
L'output è simile al seguente esempio:
tcp: [1] 10.105.16.7:3260,1 iqn.1991-05.com.contoso:dcl-linuxnodes1-target (non-flash)
Controllare i dischi iSCSI collegati.
sudo grep "Attached SCSI" /var/log/messages
Creare un volume fisico sul disco iSCSI.
sudo pvcreate /dev/<devicename>
<devicename>
è il nome del dispositivo del passaggio precedente.Creare un gruppo di volumi nel disco iSCSI. I dischi assegnati a un singolo gruppo di volumi vengono visualizzati come pool o come raccolta.
sudo vgcreate <VolumeGroupName> /dev/devicename
<VolumeGroupName>
è il nome del gruppo di volumi e<devicename>
è il nome del dispositivo del passaggio 6.Creare e verificare il volume logico per il disco.
sudo lvcreate -Lsize -n <LogicalVolumeName> <VolumeGroupName>
<size>
è la dimensione del volume da creare e può essere specificata in G (gigabyte), T (terabyte) e così via.<LogicalVolumeName>
è il nome del volume logico e<VolumeGroupName>
è il nome del gruppo di volumi del passaggio precedente.Ecco l'output previsto:
Logical volume "FCIDataLV1" created.
Nell'esempio seguente viene creato un volume di 25 GB.
Eseguire
sudo lvs
per visualizzare il volume LVM creato.Formattare il volume logico con un file system supportato. Per EXT4, usare l'esempio seguente:
sudo mkfs.ext4 /dev/<VolumeGroupName>/<LogicalVolumeName>
<VolumeGroupName>
è il nome del gruppo di volumi del passaggio precedente.<LogicalVolumeName>
è il nome del volume logico del passaggio precedente.Per i database di sistema o qualsiasi altro elemento archiviato nel percorso dati predefinito, seguire questa procedura. In caso contrario, andare al passaggio 13.
Verificare che SQL Server venga arrestato nel server su cui si sta lavorando.
sudo systemctl stop mssql-server sudo systemctl status mssql-server
Eseguire il comando per operare come utente con privilegi avanzati. Se l'operazione ha esito positivo, non si riceve alcuna conferma.
sudo -i
Passare all'utente
mssql
. Se l'operazione ha esito positivo, non si riceve alcuna conferma.su mssql
Creare una directory temporanea per archiviare i file di dati e di log di SQL Server. Se l'operazione ha esito positivo, non si riceve alcuna conferma.
mkdir <TempDir>
<TempDir>
è il nome della cartella. L'esempio seguente crea una cartella denominata /var/opt/mssql/TempDir.mkdir /var/opt/mssql/TempDir
Copiare i file di dati e di log di SQL Server nella directory temporanea. Se l'operazione ha esito positivo, non si riceve alcuna conferma.
cp /var/opt/mssql/data/* <TempDir>
<TempDir>
è il nome della cartella del passaggio precedente.Verificare che i file si trovino nella directory.
ls <TempDir>
<TempDir>
è il nome della cartella dei passaggi precedenti.Eliminare i file dalla directory di dati di SQL Server esistente. Se l'operazione ha esito positivo, non si riceve alcuna conferma.
rm - f /var/opt/mssql/data/*
Verificare che i file siano stati eliminati. Nell'immagine seguente viene illustrato un esempio dell'intera sequenza da c a h.
ls /var/opt/mssql/data
Digitare
exit
per tornare all'utenteroot
.Montare il volume logico iSCSI nella cartella di dati di SQL Server. Se l'operazione ha esito positivo, non si riceve alcuna conferma.
mount /dev/<VolumeGroupName>/<LogicalVolumeName> /var/opt/mssql/data
<VolumeGroupName>
è il nome del gruppo di volumi e<LogicalVolumeName>
è il nome del volume logico creato. La sintassi di esempio seguente corrisponde al gruppo di volumi e al volume logico del comando precedente.mount /dev/FCIDataVG1/FCIDataLV1 /var/opt/mssql/data
Modificare il proprietario del montaggio impostandolo su
mssql
. Se l'operazione ha esito positivo, non si riceve alcuna conferma.chown mssql /var/opt/mssql/data
Modificare la proprietà del gruppo del montaggio impostandolo su
mssql
. Se l'operazione ha esito positivo, non si riceve alcuna conferma.chgrp mssql /var/opt/mssql/data
Passare all'utente
mssql
: Se l'operazione ha esito positivo, non si riceve alcuna conferma.su mssql
Copiare i file dalla directory temporanea
/var/opt/mssql/data
. Se l'operazione ha esito positivo, non si riceve alcuna conferma.cp /var/opt/mssql/TempDir/* /var/opt/mssql/data
Verificare che i file siano presenti.
ls /var/opt/mssql/data
Immettere
exit
per non operare comemssql
.Immettere
exit
per non operare comeroot
.Avviare SQL Server. Se tutti gli elementi sono stati copiati correttamente e la sicurezza è applicata correttamente, SQL Server deve risultare avviato.
sudo systemctl start mssql-server sudo systemctl status mssql-server
Arrestare SQL Server e verificare che l'operazione sia stata eseguita.
sudo systemctl stop mssql-server sudo systemctl status mssql-server
Per elementi diversi dai database di sistema, ad esempio i database utente o i backup, seguire questa procedura. Se si usa solo il percorso predefinito, andare al passaggio 14.
Eseguire il comando per operare come utente con privilegi avanzati. Se l'operazione ha esito positivo, non si riceve alcuna conferma.
sudo -i
Creare una cartella che verrà usata da SQL Server.
mkdir <FolderName>
<FolderName>
è il nome della cartella. Se non si trova nella posizione corretta, è necessario specificare il percorso completo della cartella. L'esempio seguente crea una cartella denominata /var/opt/mssql/userdata.mkdir /var/opt/mssql/userdata
Montare il volume logico iSCSI nella cartella creata nel passaggio precedente. Se l'operazione ha esito positivo, non si riceve alcuna conferma.
mount /dev/<VolumeGroupName>/<LogicalVolumeName> <FolderName>
<VolumeGroupName>
è il nome del gruppo di volumi,<LogicalVolumeName>
è il nome del volume logico creato e<FolderName>
è il nome della cartella. Qui è riportata la sintassi di esempio.mount /dev/FCIDataVG2/FCIDataLV2 /var/opt/mssql/userdata
Modificare la proprietà della cartella creata impostandola su
mssql
. Se l'operazione ha esito positivo, non si riceve alcuna conferma.chown mssql <FolderName>
<FolderName>
è il nome della cartella creata. Un esempio è disponibile qui.chown mssql /var/opt/mssql/userdata
Modificare il gruppo della cartella creata impostandolo su
mssql
. Se l'operazione ha esito positivo, non si riceve alcuna conferma.chown mssql <FolderName>
<FolderName>
è il nome della cartella creata. Un esempio è disponibile qui.chown mssql /var/opt/mssql/userdata
Digitare
exit
per non operare più come utente con privilegi avanzati.Per eseguire il test, creare un database in tale cartella. Lo script seguente crea un database, cambia il contesto e verifica che i file esistano a livello di sistema operativo e quindi elimina il percorso temporaneo. È possibile usare SSMS o sqlcmd per eseguire questo 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; GO
Eseguire il comando seguente nella shell per visualizzare i nuovi file di database.
sudo ls /var/opt/mssal/userdata
Ecco l'output previsto:
lost+found TestDB_Data.mdf TestDB_Log.ldf
Eliminare il database da pulire.
DROP DATABASE TestDB; GO
sudo ls /var/opt/mssal/userdata
Ecco l'output previsto:
lost+found
Smontare la condivisione
sudo umount /dev/<VolumeGroupName>/<LogicalVolumeName> <FolderName>
<VolumeGroupName>
è il nome del gruppo di volumi,<LogicalVolumeName>
è il nome del volume logico creato e<FolderName>
è il nome della cartella. Qui è riportata la sintassi di esempio.sudo umount /dev/FCIDataVG2/FCIDataLV2 /var/opt/mssql/userdata
Configurare il server in modo che solo Pacemaker possa attivare il gruppo di volumi.
sudo lvmconf --enable-halvm --services -startstopservices
Generare un elenco dei gruppi di volumi nel server. Qualsiasi elemento elencato che non sia il disco iSCSI viene usato dal sistema, ad esempio il disco del sistema operativo.
sudo vgs
Modificare la sezione di configurazione dell'attivazione del file /etc/lvm/lvm.conf. Configurare la riga seguente:
volume_list = [ <ListOfVGsNotUsedByPacemaker> ]
<ListOfVGsNotUsedByPacemaker>
è l'elenco dei gruppi di volumi dell'output del passaggio 20 che non vengono usati dall'istanza del cluster di failover. Inserirli ognuno tra virgolette e separarli con una virgola. Un esempio è disponibile qui.All'avvio di Linux, il file system viene montato. Per assicurarsi che solo Pacemaker possa montare il disco iSCSI, ricompilare l'immagine del file system radice.
Eseguire il comando seguente che potrebbe richiedere alcuni minuti per il completamento. Se l'operazione ha esito positivo, non viene restituito alcun messaggio.
sudo dracut -H -f /boot/initramfs-$(uname -r).img $(uname -r)
Riavviare il server.
In un altro server che parteciperà all'istanza del cluster di failover eseguire i passaggi da 1 a 6. La destinazione iSCSI viene presentata a SQL Server.
Generare un elenco dei gruppi di volumi nel server. Verrà visualizzato il gruppo di volumi creato in precedenza.
sudo vgs
Avviare SQL Server e verificare che possa essere avviato in questo server.
sudo systemctl start mssql-server sudo systemctl status mssql-server
Arrestare SQL Server e verificare che l'operazione sia stata eseguita.
sudo systemctl stop mssql-server sudo systemctl status mssql-server
Ripetere i passaggi da 1 a 6 in tutti gli altri server che parteciperanno all'istanza del cluster di failover.
A questo punto è possibile configurare l'istanza del cluster di failover.