Configurare l'istanza del cluster di failover di archiviazione SMB - SQL Server in Linux

Si applica a:SQL Server - Linux

Questo articolo illustra come configurare la risorsa di archiviazione SMB per un'istanza del cluster di failover in Linux.

Nel mondo non Windows, SMB è anche indicato come condivisione CIFS (Common Internet File System) e viene implementato tramite Samba. Nel mondo Windows, l'accesso a una condivisione SMB viene eseguito in questo modo: \\SERVERNAME\SHARENAME Per le installazioni di SQL Server basate su Linux, la condivisione SMB deve essere montata come cartella.

Informazioni importanti sul server e sull'origine

Ecco alcuni suggerimenti e diverse note per l'uso corretto di SMB:

  • La condivisione SMB può trovarsi in Windows, in Linux o anche in un'appliance, purché usi SMB 3.0 o versioni successive. Per altre informazioni su Samba e SMB 3.0 e per verificare se l'implementazione di Samba in uso è conforme a SMB 3.0, vedere SMB 3.0.
  • La condivisione SMB deve essere a disponibilità elevata.
  • Per la condivisione SMB è necessario impostare correttamente la sicurezza. Di seguito è riportato un esempio da /etc/samba/smb.conf, dove SQLData è il nome della condivisione.
[SQLData]
path=/var/smb/SQLData
read only = no
browseable = yes
guest ok = no
writeable = yes
valid users = SQLSambaUser

Istruzioni

  1. Scegliere uno dei server che parteciperanno alla configurazione dell'istanza del cluster di failover. Non è rilevante quale.

  2. Ottenere informazioni sull'utente mssql.

     sudo id mssql
    

    Si notino uid, gid e i gruppi.

  3. Eseguire sudo smbclient -L //NameOrIP/ShareName -U User.

    • <NameOrIP> è il nome DNS o l'indirizzo IP del server che ospita la condivisione SMB.
    • <ShareName> è il nome della condivisione SMB.
  4. Per i database di sistema o per qualsiasi altro elemento archiviato nel percorso dati predefinito, seguire questa procedura. In caso contrario, andare al passaggio 5.

    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.

      sudo -i
      
    3. Passare all'utente mssql.

      su mssql
      
    4. Creare una directory temporanea per archiviare i file di dati e di log di SQL Server.

      mkdir <TempDir>
      
      • <TempDir> è il nome della cartella. L'esempio seguente crea una cartella denominata /var/opt/mssql/tmp.
      mkdir /var/opt/mssql/tmp
      
    5. Copiare i file di dati e di log di SQL Server nella directory temporanea.

      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 del passaggio D.

    7. Eliminare i file dalla directory di dati di SQL Server esistente.

      rm - f /var/opt/mssql/data/*
      
    8. Verificare che i file siano stati eliminati.

      ls /var/opt/mssql/data
      
    9. Digitare exit per tornare all'utente ROOT.

    10. Montare la condivisione SMB nella cartella di dati di SQL Server. Questo esempio illustra la sintassi per la connessione a una condivisione SMB 3.0 basata su Windows Server.

      Mount -t cifs //<ServerName>/<ShareName> /var/opt/mssql/data -o vers=3.0,username=<UserName>,password=<Password>,domain=<domain>,uid=<mssqlUID>,gid=<mssqlGID>,file_mode=0777,dir_mode=0777
      
      • <ServerName> è il nome del server con la condivisione SMB
      • <ShareName> è il nome della condivisione
      • <UserName> è il nome dell'utente con cui accedere alla condivisione
      • <Password> è la password dell'utente
      • <domain> è il nome di Active Directory
      • <mssqlUID> è l'UID dell'utente mssql
      • <mssqlGID> è il GID dell'utente mssql
    11. Verificare che il montaggio abbia avuto esito positivo eseguendo mount senza alcuna opzione.

      mount
      
    12. Passare all'utente mssql:

      su mssql
      
    13. Copiare i file dalla directory temporanea /var/opt/mssql/data.

      cp /var/opt/mssql/tmp/* /var/opt/mssql/data
      
    14. Verificare che i file siano presenti.

      ls /var/opt/mssql/data
      
    15. Immettere exit per non operare come mssql.

    16. Immettere exit per non operare come root.

    17. 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
      
    18. Per eseguire altri test e assicurarsi che le autorizzazioni siano appropriate, creare un database. L'esempio seguente usa Transact-SQL ma è possibile usare SSMS.

      Screenshot showing the creation of the test database.

    19. Arrestare SQL Server e verificare che l'operazione sia stata eseguita. Se si intende aggiungere o testare altri dischi, arrestare SQL Server solo dopo che questi sono stati aggiunti e testati.

      sudo systemctl stop mssql-server
      sudo systemctl status mssql-server
      
    20. Solo se queste operazioni sono state completate, smontare la condivisione. In caso contrario, attendere il completamento dell'aggiunta o del test di tutti i dischi aggiuntivi.

      sudo umount //<IPAddressorServerName>/<ShareName /<FolderMountedIn>
      
      • <IPAddressOrServerName> è l'indirizzo IP o il nome dell'host SMB
      • <ShareName> è il nome della condivisione
      • <FolderMountedIn> è il nome della cartella in cui SMB è montato
  5. 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.

      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 la condivisione SMB nella cartella di dati di SQL Server. Questo esempio illustra la sintassi per la connessione a una condivisione SMB 3.0 basata su Samba.

      Mount -t cifs //<ServerName>/<ShareName> <FolderName> -o vers=3.0,username=<UserName>,password=<Password>,uid=<mssqlUID>,gid=<mssqlGID>,file_mode=0777,dir_mode=0777
      
      • <ServerName> è il nome del server con la condivisione SMB
      • <ShareName> è il nome della condivisione
      • <FolderName> è il nome della cartella creata nell'ultimo passaggio
      • <UserName> è il nome dell'utente con cui accedere alla condivisione
      • <Password> è la password dell'utente
      • <mssqlUID> è l'UID dell'utente mssql
      • <mssqlGID> è il GID dell'utente mssql.
    4. Verificare che il montaggio abbia avuto esito positivo eseguendo mount senza alcuna opzione.

    5. Digitare exit per non operare più come utente con privilegi avanzati.

    6. Per eseguire il test, creare un database in tale cartella. L'esempio seguente usa sqlcmd per creare un database, cambiare il contesto e verificare che i file esistano a livello di sistema operativo e quindi elimina il percorso temporaneo. È possibile usare SSMS.

    7. Smontare la condivisione

      sudo umount //<IPAddressorServerName>/<ShareName> /<FolderMountedIn>
      
      • <IPAddressOrServerName> è l'indirizzo IP o il nome dell'host SMB
      • <ShareName> è il nome della condivisione
      • <FolderMountedIn> è il nome della cartella in cui SMB è montato.
  6. Ripetere la procedura sugli altri nodi.

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