Condividi tramite


Configurare istanza del cluster di failover - iSCSI - SQL Server su Linux

Si applica a:SQL Server - Linux

Questo articolo illustra come configurare la risorsa di archiviazione iSCSI per un'istanza di cluster di failover su 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 di destinazione vengono concesse autorizzazioni esplicite, in modo che solo gli iniziatori che devono poter accedervi possano farlo. La destinazione deve essere a disponibilità elevata e affidabile.

Informazioni importanti sul target 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 utilizza una destinazione iSCSI basata su Linux, non si dovrebbe mai configurare la destinazione su nessuno dei nodi FCI. 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.

La cosa più importante da garantire sul target è 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.

Screenshot dell'iniziatore.

Istruzioni

In questa sezione viene illustrato come configurare un iniziatore iSCSI sui server che operano come 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:

  1. Scegliere uno dei server che parteciperanno alla configurazione FCI. 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 in cui <iSCSIIfaceName> è il nome univoco o descrittivo della rete. Nell'esempio seguente viene usato iSCSINIC:

    sudo iscsiadm -m iface -I iSCSINIC -o new
    

    Ecco l'output previsto:

    New interface iSCSINIC added
    
  2. Modifica /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:

    Screenshot del file con i valori completamente compilati.

  3. 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
    
  4. Accedi al target.

    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.
    
  5. 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)
    
  6. Controllare i dischi iSCSI collegati.

    sudo grep "Attached SCSI" /var/log/messages
    

    Screenshot del comando grep e della risposta al comando che mostra i dischi SCSI collegati.

  7. Creare un volume fisico sul disco iSCSI.

    sudo pvcreate /dev/<devicename>
    

    <devicename> è il nome del dispositivo del passaggio precedente.

  8. 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.

  9. 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.

  10. Eseguire sudo lvs per visualizzare l'LVM creato.

  11. 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.

  12. Per i database di sistema o qualsiasi altro elemento archiviato nel percorso dati predefinito, seguire questa procedura. Altrimenti, vai al passaggio 13.

    1. Verificare che SQL Server sia arrestato sul server su cui si sta lavorando.

      sudo systemctl stop mssql-server
      sudo systemctl status mssql-server
      
    2. Passare completamente ad essere il superutente. Se l'operazione ha esito positivo, non si riceve alcuna conferma.

      sudo -i
      
    3. Passa all'utente mssql. Se l'operazione ha esito positivo, non si riceve alcuna conferma.

      su mssql
      
    4. 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
      
    5. 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.

    6. Verificare che i file si trovino nella directory.

      ls <TempDir>
      

      <TempDir> è il nome della cartella dei passaggi precedenti.

    7. 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/*
      
    8. 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
      

      Screenshot del comando ls e della risposta al comando.

    9. Digitare exit per tornare all'utente root.

    10. 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
      
    11. Modifica il proprietario del punto di montaggio a mssql. Se l'operazione ha esito positivo, non si riceve alcuna conferma.

      chown mssql /var/opt/mssql/data
      
    12. Modificare la proprietà del gruppo del montaggio a mssql. Se l'operazione ha esito positivo, non si riceve alcuna conferma.

      chgrp mssql /var/opt/mssql/data
      
    13. Passare all'utente mssql: Se l'operazione ha esito positivo, non si riceve alcuna conferma.

      su mssql
      
    14. 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
      
    15. Verificare che i file siano presenti.

      ls /var/opt/mssql/data
      
    16. Immettere exit per non essere mssql.

    17. Immettere exit per non essere root.

    18. 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
      
    19. Arrestare SQL Server e verificare che l'operazione sia stata eseguita.

      sudo systemctl stop mssql-server
      sudo systemctl status mssql-server
      
  13. 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.

    1. Eseguire il comando per operare come utente con privilegi avanzati. Se l'operazione ha esito positivo, non si riceve alcuna conferma.

      sudo -i
      
    2. 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
      
    3. 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
      
    4. 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
      
    5. 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
      
    6. Digitare exit per non operare più come utente con privilegi avanzati.

    7. 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
      

      Elimina il database per ripulire.

      DROP DATABASE TestDB;
      GO
      
      sudo ls /var/opt/mssal/userdata
      

      Ecco l'output previsto:

      lost+found
      
    8. 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
      
  14. Configurare il server in modo che solo Pacemaker possa attivare il volume group.

    sudo lvmconf --enable-halvm --services -startstopservices
    
  15. 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
    
  16. 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 dal risultato del passaggio 20 che non sono utilizzati dall'istanza del cluster di failover. Inserirli ognuno tra virgolette e separarli con una virgola. Un esempio è disponibile qui.

    Screenshot che mostra un esempio di un valore volume_list.

  17. 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)
    
  18. Riavviare il server.

  19. Su un altro server che parteciperà al FCI, eseguire i passaggi da 1 a 6. La destinazione iSCSI viene resa disponibile al server SQL.

  20. Generare un elenco dei gruppi di volumi nel server. Verrà visualizzato il gruppo di volumi creato in precedenza.

    sudo vgs
    
  21. Avviare SQL Server e verificare che possa essere avviato in questo server.

    sudo systemctl start mssql-server
    sudo systemctl status mssql-server
    
  22. Arrestare SQL Server e verificare che l'operazione sia stata eseguita.

    sudo systemctl stop mssql-server
    sudo systemctl status mssql-server
    
  23. Ripetere i passaggi da 1 a 6 sugli altri server che parteciperanno al FCI.

Ora sei pronto per configurare il FCI.