Condividi tramite


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.

Screenshot dell'iniziatore.

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:

  1. 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 usato iSCSINIC:

    sudo iscsiadm -m iface -I iSCSINIC -o new
    

    Ecco l'output previsto:

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

    Screenshot del file con 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. 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.
    
  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 il volume 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. In caso contrario, andare al passaggio 13.

    1. Verificare che SQL Server venga arrestato nel server su cui si sta lavorando.

      sudo systemctl stop mssql-server
      sudo systemctl status mssql-server
      
    2. Eseguire il comando per operare come utente con privilegi avanzati. Se l'operazione ha esito positivo, non si riceve alcuna conferma.

      sudo -i
      
    3. Passare 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. 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
      
    12. 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
      
    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 operare come mssql.

    17. Immettere exit per non operare come 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
      

      Eliminare il database da pulire.

      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 gruppo di volumi.

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

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

  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 in tutti gli altri server che parteciperanno all'istanza del cluster di failover.

A questo punto è possibile configurare l'istanza del cluster di failover.