Freigeben über


Konfigurieren der Failoverclusterinstanz – iSCSI – SQL Server für Linux

Gilt für:SQL Server unter Linux

In diesem Artikel wird erklärt, wie Sie einen iSCSI-Speicher für eine Failoverclusterinstanz (FCI) unter Linux konfigurieren.

Konfigurieren von iSCSI

iSCSI verwendet Netzwerke, um Datenträger von einem Server darzustellen, der für andere Server als Zielserver gilt. Die Server, die eine Verbindung mit dem iSCSI-Ziel herstellen, erfordern einen konfigurierten iSCSI-Initiator. Die Datenträger auf dem Ziel erhalten explizite Berechtigungen, sodass nur die Initiatoren, die darauf zugreifen dürfen, dies auch tun können. Das Ziel selbst sollte hochverfügbar und zuverlässig sein.

Wichtige Informationen über das iSCSI-Ziel

In diesem Abschnitt wird zwar nicht beschrieben, wie das iSCSI-Ziel konfiguriert wird, da dies von dem Typ der Quelle abhängt, die Sie verwenden möchten, jedoch wird sichergestellt, dass die Sicherheit für die von den Clusterknoten verwendeten Datenträger konfiguriert wird.

Das Ziel sollte nie auf einem der FCI-Nodes konfiguriert werden, wenn ein Linux-basiertes iSCSI-Ziel verwendet wird. iSCSI-Netzwerke sollten separat von den Netzwerken sein, die vom regulären Netzwerkdatenverkehr der Quell- und Clientserver verwendet werden, um die Leistung und Verfügbarkeit zu verbessern. Die Netzwerke, die für iSCSI verwendet werden, sollten schnell sein. Denken daran, dass Netzwerke eine gewisse Prozessorbandbreite beanspruchen. Planen Sie daher entsprechend, wenn Sie einen herkömmlichen Server verwenden.

Das Wichtigste, was auf dem Ziel sichergestellt werden muss, ist, dass die erstellten Datenträger mit den richtigen Berechtigungen versehen werden, damit nur die Server Zugriff haben, die an der FCI beteiligt sind. Hier sehen Sie ein Beispiel aus dem Microsoft iSCSI-Ziel, bei dem linuxnodes1 der erstellte Name ist und die IP-Adressen der Knoten so zugewiesen werden, dass NewFCIDisk1.vhdx ihnen erscheint.

Screenshot des Dialogfelds

Anweisungen

In diesem Abschnitt wird beschrieben, wie ein iSCSI-Initiator auf den Servern konfiguriert wird, die als Knoten für die FCI (Failoverclusterinstanz) dienen. Die Anweisungen sollten sowohl für Red Hat Enterprise Linux (RHEL) als auch für Ubuntu funktionieren.

Weitere Informationen zum iSCSI-Initiator für die unterstützten Verteilungen finden Sie unter folgenden Links:

Hinweis

Ab SQL Server 2025 (17.x) wird SUSE Linux Enterprise Server (SLES) nicht unterstützt.

  1. Wählen Sie einen der Server aus, der an der FCI-Konfiguration beteiligt sein wird. Es spielt keine Rolle, welchen Sie auswählen. iSCSI sollte sich auf einem dedizierten Netzwerk befinden, konfigurieren Sie iSCSI also so, dass das Netzwerk erkannt und verwendet wird. Führen Sie sudo iscsiadm -m iface -I <iSCSIIfaceName> -o new aus, wobei <iSCSIIfaceName> dem eindeutigen oder dem Anzeigenamen des Netzwerks entspricht. Im folgenden Beispiel wird iSCSINIC verwendet:

    sudo iscsiadm -m iface -I iSCSINIC -o new
    

    Hier ist die erwartete Ausgabe.

    New interface iSCSINIC added
    
  2. Bearbeite /var/lib/iscsi/ifaces/iSCSIIfaceName. Stellen Sie sicher, dass die folgenden Werte vollständig ausgefüllt sind:

    • iface.net_ifacename entspricht dem Namen der Netzwerkkarte, die im Betriebssystem angezeigt wird.
    • iface.hwaddress ist die MAC-Adresse des eindeutigen Namens, der für die folgende Schnittstelle erstellt wird.
    • iface.ipaddress
    • iface.subnet_Mask

    Sehen Sie sich folgendes Beispiel an:

    Screenshot: Datei, in der die Werte vollständig ausgefüllt sind

  3. Suchen Sie das iSCSI-Ziel.

    sudo iscsiadm -m discovery -t sendtargets -I <iSCSINetName> -p <TargetIPAddress>:<TargetPort>
    

    <iSCSINetName> ist der eindeutige bzw. freundliche Name des Netzwerks, <TargetIPAddress> ist die IP-Adresse des iSCSI-Ziels, und <TargetPort> ist der Port des iSCSI-Ziels.

    Folgende Ausgabe wird erwartet.

    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. Melden Sie sich beim Ziel an.

    sudo iscsiadm -m node -I <iSCSIIfaceName> -p TargetIPAddress -l
    

    <iSCSIIfaceName> ist der eindeutige oder aussagekräftige Name des Netzwerks und <TargetIPAddress> ist die IP-Adresse des iSCSI-Ziels.

    Folgende Ausgabe wird erwartet.

    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. Überprüfen Sie, ob eine Verbindung mit dem iSCSI-Ziel besteht.

    sudo iscsiadm -m session
    

    Die Ausgabe sieht etwa folgendermaßen aus:

    tcp: [1] 10.105.16.7:3260,1 iqn.1991-05.com.contoso:dcl-linuxnodes1-target (non-flash)
    
  6. Überprüfen Sie die angefügten iSCSI-Datenträger.

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

    Screenshot: grep-Befehl und Antwort darauf mit den angefügten SCSI-Datenträgern

  7. Erstellen Sie ein physisches Volume auf dem iSCSI-Datenträger.

    sudo pvcreate /dev/<devicename>
    

    <devicename> ist der Name des Geräts aus dem vorherigen Schritt.

  8. Erstellen Sie eine Volumegruppe auf dem iSCSI-Datenträger. Datenträger, die einer einzelnen Volumegruppe zugewiesen werden, werden als Pool oder Sammlung angezeigt.

    sudo vgcreate <VolumeGroupName> /dev/devicename
    

    <VolumeGroupName> ist der Name der Volumegruppe, und <devicename> ist der Name des Geräts aus Schritt 6.

  9. Erstellen und überprüfen Sie das logische Volume für den Datenträger.

    sudo lvcreate -Lsize -n <LogicalVolumeName> <VolumeGroupName>
    

    <size> ist die Größe des zu erstellenden Volumes und kann in G (Gigabyte), T (Terabyte) usw. angegeben werden. <LogicalVolumeName> ist der Name des logischen Volumes, und <VolumeGroupName> ist der Name der Volumegruppe aus dem vorherigen Schritt.

    Hier ist die erwartete Ausgabe.

    Logical volume "FCIDataLV1" created.
    

    Im folgenden Beispiel wird ein 25-GB-Volume erstellt.

  10. Führen Sie sudo lvs aus, um den erstellten LVM anzuzeigen.

  11. Formatieren Sie das logische Volume mit einem unterstützten Dateisystem. Verwenden Sie für ext4 das folgende Beispiel:

    sudo mkfs.ext4 /dev/<VolumeGroupName>/<LogicalVolumeName>
    

    <VolumeGroupName> ist der Name der Volumegruppe aus dem vorherigen Schritt. <LogicalVolumeName> ist der Name des logischen Volumes aus dem vorherigen Schritt.

  12. Befolgen Sie für Systemdatenbanken oder Daten, die am Standardspeicherort gespeichert sind, die folgenden Schritte. Fahren Sie andernfalls mit Schritt 13 fort.

    1. Stellen Sie sicher, dass SQL Server auf dem Server beendet wird, an dem Sie arbeiten.

      sudo systemctl stop mssql-server
      sudo systemctl status mssql-server
      
    2. Wechseln Sie vollständig zum Superuser. Wenn dies erfolgreich war, erhalten Sie keine Bestätigung.

      sudo -i
      
    3. Wechseln Sie zum Benutzer mssql. Wenn dies erfolgreich war, erhalten Sie keine Bestätigung.

      su mssql
      
    4. Erstellen Sie ein temporäres Verzeichnis zum Speichern der SQL Server Daten und Protokolldateien. Wenn dies erfolgreich war, erhalten Sie keine Bestätigung.

      mkdir <TempDir>
      

      <TempDir> ist der Name des Ordners. Im folgenden Beispiel wird ein Ordner mit dem Namen „/var/opt/mssql/TempDir“ erstellt.

      mkdir /var/opt/mssql/TempDir
      
    5. Kopieren Sie die SQL Server Daten und Protokolldateien in das temporäre Verzeichnis. Wenn dies erfolgreich war, erhalten Sie keine Bestätigung.

      cp /var/opt/mssql/data/* <TempDir>
      

      <TempDir> ist der Name des Ordners aus dem vorherigen Schritt.

    6. Stellen Sie sicher, dass sich die Dateien im Verzeichnis befinden.

      ls <TempDir>
      

      <TempDir> ist der Name des Ordners aus den vorherigen Schritte.

    7. Löschen Sie die Dateien aus dem vorhandenen SQL Server Datenverzeichnis. Wenn dies erfolgreich war, erhalten Sie keine Bestätigung.

      rm - f /var/opt/mssql/data/*
      
    8. Stellen Sie sicher, dass die Dateien gelöscht wurden. Die folgende Abbildung zeigt ein Beispiel für die gesamte Sequenz von Schritt c bis h.

      ls /var/opt/mssql/data
      

      Screenshot: ls-Befehl und Antwort darauf

    9. Geben Sie exit ein, um zum root-Benutzer zurück zu wechseln.

    10. Stellen Sie das logische iSCSI-Volume im SQL Server-Datenordner fest. Wenn dies erfolgreich war, erhalten Sie keine Bestätigung.

      mount /dev/<VolumeGroupName>/<LogicalVolumeName> /var/opt/mssql/data
      

      <VolumeGroupName> ist der Name der Volumegruppe, und <LogicalVolumeName> ist der Name des erstellten logischen Volumes. Die folgende Beispielsyntax entspricht der Volumegruppe und dem logischen Volume aus dem vorherigen Befehl.

      mount /dev/FCIDataVG1/FCIDataLV1 /var/opt/mssql/data
      
    11. Ändern Sie den Besitzer der Einbindung in mssql. Wenn dies erfolgreich war, erhalten Sie keine Bestätigung.

      chown mssql /var/opt/mssql/data
      
    12. Ändern Sie den Besitz der Gruppe des Einhängepunkts auf mssql. Wenn dies erfolgreich war, erhalten Sie keine Bestätigung.

      chgrp mssql /var/opt/mssql/data
      
    13. Wechseln Sie zum Benutzer mssql. Wenn dies erfolgreich war, erhalten Sie keine Bestätigung.

      su mssql
      
    14. Kopieren Sie die Dateien aus dem temporären Verzeichnis /var/opt/mssql/data. Wenn dies erfolgreich war, erhalten Sie keine Bestätigung.

      cp /var/opt/mssql/TempDir/* /var/opt/mssql/data
      
    15. Stellen Sie sicher, dass die Dateien vorhanden sind.

      ls /var/opt/mssql/data
      
    16. Geben Sie exit ein, um nicht mssql zu sein.

    17. Geben Sie exit ein, um nicht root zu sein.

    18. Starten Sie SQL Server. Wenn alles ordnungsgemäß kopiert wurde und die Sicherheit korrekt angewendet wurde, sollte SQL Server wie gestartet angezeigt werden.

      sudo systemctl start mssql-server
      sudo systemctl status mssql-server
      
    19. Beenden Sie SQL Server, und stellen Sie sicher, dass sie heruntergefahren wurde.

      sudo systemctl stop mssql-server
      sudo systemctl status mssql-server
      
  13. Führen Sie folgende Schritte aus, wenn es nicht um Systemdatenbanken, sondern um Benutzerdatenbanken oder Sicherungen geht. Wenn nur der Standardspeicherort verwendet wird, fahren Sie mit Schritt 14 fort.

    1. Wechseln Sie zum Superuser. Wenn dies erfolgreich war, erhalten Sie keine Bestätigung.

      sudo -i
      
    2. Erstellen Sie einen Ordner, der von SQL Server verwendet werden soll.

      mkdir <FolderName>
      

      <FolderName> ist der Name des Ordners. Wenn sich der Ordner nicht am richtigen Speicherort befindet, muss der vollständige Pfad angegeben werden. Im folgenden Beispiel wird ein Ordner mit dem Namen „/var/opt/mssql/userdata“ erstellt.

      mkdir /var/opt/mssql/userdata
      
    3. Binden Sie das logische iSCSI-Volume in den Ordner ein, der im vorherigen Schritt erstellt wurde. Wenn dies erfolgreich war, erhalten Sie keine Bestätigung.

      mount /dev/<VolumeGroupName>/<LogicalVolumeName> <FolderName>
      

      <VolumeGroupName> ist der Name der Volumegruppe, <LogicalVolumeName> ist der Name des erstellten logischen Volumes, und <FolderName> ist der Name des Ordners. Die Beispielsyntax wird hier gezeigt.

      mount /dev/FCIDataVG2/FCIDataLV2 /var/opt/mssql/userdata
      
    4. Ändern Sie den Eigentümer des erstellten Ordners auf mssql. Wenn dies erfolgreich war, erhalten Sie keine Bestätigung.

      chown mssql <FolderName>
      

      <FolderName> ist der Name des erstellten Ordners. Ein Beispiel ist hier gezeigt.

      chown mssql /var/opt/mssql/userdata
      
    5. Ändern Sie die Gruppe des erstellten Ordners zu mssql. Wenn dies erfolgreich war, erhalten Sie keine Bestätigung.

      chown mssql <FolderName>
      

      <FolderName> ist der Name des erstellten Ordners. Ein Beispiel ist hier gezeigt.

      chown mssql /var/opt/mssql/userdata
      
    6. Geben Sie exit ein, um nicht mehr der Superuser zu sein.

    7. Erstellen Sie eine Datenbank in diesem Ordner, um dies zu testen. Im folgenden Skript wird eine Datenbank erstellt, der Kontext zu dieser Datenbank gewechselt, geprüft, ob die Dateien auf der Betriebssystemebene existieren, und anschließend der temporäre Speicherort gelöscht. Sie können SSMS oder sqlcmd verwenden, um dieses Skript auszuführen.

      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
      

      Führen Sie den folgenden Befehl in der Shell aus, um die neuen Datenbankdateien anzuzeigen.

      sudo ls /var/opt/mssal/userdata
      

      Hier ist die erwartete Ausgabe.

      lost+found TestDB_Data.mdf
      TestDB_Log.ldf
      

      Löschen Sie die Datenbank, um aufzuräumen.

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

      Hier ist die erwartete Ausgabe.

      lost+found
      
    8. Hängen Sie die Freigabe aus.

      sudo umount /dev/<VolumeGroupName>/<LogicalVolumeName> <FolderName>
      

      <VolumeGroupName> ist der Name der Volumegruppe, <LogicalVolumeName> ist der Name des erstellten logischen Volumes, und <FolderName> ist der Name des Ordners. Die Beispielsyntax wird hier gezeigt.

      sudo umount /dev/FCIDataVG2/FCIDataLV2 /var/opt/mssql/userdata
      
  14. Konfigurieren Sie den Server so, dass nur Pacemaker die Volume-Gruppe aktivieren kann.

    sudo lvmconf --enable-halvm --services -startstopservices
    
  15. Erstellen Sie eine Liste der Volumegruppen auf dem Server. Alles, was aufgelistet ist und nicht der iSCSI-Datenträger ist, wird vom System verwendet, z. B. für den Betriebssystemdatenträger.

    sudo vgs
    
  16. Ändern Sie den Aktivierungskonfigurationsabschnitt der Datei unter /etc/lvm/lvm.conf. Konfigurieren Sie die folgende Zeile:

    volume_list = [ <ListOfVGsNotUsedByPacemaker> ]
    

    <ListOfVGsNotUsedByPacemaker> ist die Liste der Volumegruppen aus der Ausgabe von Schritt 20, die nicht von der Failoverclusterinstanz verwendet werden. Setzen Sie sie in Anführungszeichen, und trennen Sie sie durch Kommas. Ein Beispiel ist hier gezeigt.

    Screenshot: Beispielwert für volume_list

  17. Wenn Linux gestartet wird, wird das Dateisystem eingebunden. Erstellen Sie das Image für das Stammdateisystem neu, um sicherzustellen, dass nur Pacemaker den iSCSI-Datenträger einbinden kann.

    Führen Sie den folgenden Befehl aus. Dies sollte nur wenig Zeit beanspruchen. Wenn dies erfolgreich war, erhalten Sie keine Benachrichtigung.

    sudo dracut -H -f /boot/initramfs-$(uname -r).img $(uname -r)
    
  18. Starten Sie den Server neu.

  19. Führen Sie die Schritte 1-6 auf einem anderen Server aus, der an der FCI teilnimmt. Dadurch wird das iSCSI-Ziel dem SQL Server angezeigt.

  20. Generieren Sie eine Liste der Volumegruppen auf dem Server. Nun sollte die zuvor erstellte Volumegruppe angezeigt werden.

    sudo vgs
    
  21. Starten Sie SQL Server, und überprüfen Sie, ob sie auf diesem Server gestartet werden kann.

    sudo systemctl start mssql-server
    sudo systemctl status mssql-server
    
  22. Beenden Sie SQL Server, und stellen Sie sicher, dass sie heruntergefahren wurde.

    sudo systemctl stop mssql-server
    sudo systemctl status mssql-server
    
  23. Wiederholen Sie bei Bedarf die Schritte 1-6 auf allen anderen Servern, die an der Failover-Clusterinstanz teilnehmen sollen.

Sie sind jetzt bereit, die FCI zu konfigurieren.