Teilen über


SQL Server für Linux: Konfigurieren einer Failoverclusterinstanz mit iSCSI

Gilt für: SQL Server – 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 auf die Datenträger zugreifen können, die dies können sollen. Das Ziel selbst sollte hochverfügbar und zuverlässig sein.

Wichtige Informationen zum 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 für FCI-Knoten konfiguriert werden, wenn ein auf Linux basierendes 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 Sie auf dem Ziel sicherstellen sollten, ist, dass den erstellten Datenträgern die richtigen Berechtigungen zugewiesen werden, sodass nur die Server über Zugriffsberechtigungen verfügen, die an der Failoverclusterinstanz beteiligt sind. Hier wird ein Beispiel des iSCSI-Ziels von Microsoft gezeigt, in dem der Name linuxnodes1 erstellt wird, und (in diesem Fall) die IP-Adressen der Knoten so zugewiesen werden, dass NewFCIDisk1.vhdx für sie angezeigt wird.

Screenshot des Initiators.

Anweisungen

In diesem Abschnitt wird beschrieben, wie ein iSCSI-Initiator für die Server konfiguriert wird, die der Failoverclusterinstanz als Knoten 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:

  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
    

    Screenshot: iface-Befehl und Antwort darauf

  2. Bearbeiten Sie /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. der Anzeigename des Netzwerks, <TargetIPAddress> ist die IP-Adresse des iSCSI-Ziels, und <TargetPort> ist der Port des iSCSI-Ziels.

    Screenshot: discovery-Befehl und Antwort darauf

  4. Melden Sie sich beim Ziel an.

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

    <iSCSIIfaceName> ist der eindeutige bzw. der Anzeigename des Netzwerks, und <TargetIPAddress> ist die IP-Adresse des iSCSI-Ziels.

    Screenshot von iSCSITargetLogin.

  5. Überprüfen Sie, ob eine Verbindung mit dem iSCSI-Ziel besteht.

    sudo iscsiadm -m session
    

    Screenshot von iSCSIVerify.

  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.

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

    Screenshot des erstellten 25-GB-Volumes.

  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 das folgende Beispiel für EXT4:

    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 wurde, auf 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, in dem Sie die SQL Server-Daten und -Protokolldateien speichern. 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. Binden Sie das logische iSCSI-Volume in den SQL Server-Datenordner ein. 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 der Einbindung in 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 richtig kopiert wurde und die Sicherheitsmaßnahmen ordnungsgemäß angewendet wurden, sollte SQL Server als gestartet angezeigt werden.

      sudo systemctl start mssql-server
      sudo systemctl status mssql-server
      
    19. Beenden Sie SQL Server, und vergewissern Sie sich, dass die Serverinstanz 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, können Sie mit Schritt 14 fortfahren.

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

      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 Besitzer des Ordners, der in mssql erstellt wurde. 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 Ordners, der in mssql erstellt wurde. 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 Beispiel wird „sqlcmd“ verwendet, um eine Datenbank zu erstellen, den Kontext zu wechseln und zu überprüfen, ob die Dateien auf der Betriebssystemebene vorhanden sind. Anschließend wird der temporäre Speicherort gelöscht. Sie können SSMS verwenden.

      Screenshot: sqlcmd-Befehl und Antwort darauf

    8. Heben Sie die Einbindung der Freigabe auf.

      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 die Volumegruppe nur mit Pacemaker aktiviert werden kann.

    sudo lvmconf --enable-halvm --services -startstopservices
    
  15. Generieren Sie eine Liste der Volumegruppen auf dem Server. Alle aufgeführten Gruppen, die nicht zum iSCSI-Datenträger gehören, werden 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 wird. 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 Failoverclusterinstanz teilnimmt. Dadurch wird das iSCSI-Ziel für die SQL Server-Instanz 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 die Ausführung auf dem Server möglich ist.

    sudo systemctl start mssql-server
    sudo systemctl status mssql-server
    
  22. Beenden Sie SQL Server, und vergewissern Sie sich, dass die Serverinstanz heruntergefahren wurde.

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

Sie können die Failoverclusterinstanz nun konfigurieren.