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.
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:
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 wirdiSCSINIC
verwendet:sudo iscsiadm -m iface -I iSCSINIC -o new
Folgende Ausgabe wird erwartet.
New interface iSCSINIC added
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:
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.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
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.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.
Ü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)
Überprüfen Sie die angefügten iSCSI-Datenträger.
sudo grep "Attached SCSI" /var/log/messages
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.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.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.Folgende Ausgabe wird erwartet.
Logical volume "FCIDataLV1" created.
Im folgenden Beispiel wird ein 25-GB-Volume erstellt.
Führen Sie
sudo lvs
aus, um den erstellten LVM anzuzeigen.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.Befolgen Sie für Systemdatenbanken oder Daten, die am Standardspeicherort gespeichert sind, die folgenden Schritte. Fahren Sie andernfalls mit Schritt 13 fort.
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
Wechseln Sie vollständig zum Superuser. Wenn dies erfolgreich war, erhalten Sie keine Bestätigung.
sudo -i
Wechseln Sie zum Benutzer
mssql
. Wenn dies erfolgreich war, erhalten Sie keine Bestätigung.su mssql
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
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.Stellen Sie sicher, dass sich die Dateien im Verzeichnis befinden.
ls <TempDir>
<TempDir>
ist der Name des Ordners aus den vorherigen Schritte.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/*
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
Geben Sie
exit
ein, um zumroot
-Benutzer zurück zu wechseln.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
Ändern Sie den Besitzer der Einbindung in
mssql
. Wenn dies erfolgreich war, erhalten Sie keine Bestätigung.chown mssql /var/opt/mssql/data
Ä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
Wechseln Sie zum Benutzer
mssql
. Wenn dies erfolgreich war, erhalten Sie keine Bestätigung.su mssql
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
Stellen Sie sicher, dass die Dateien vorhanden sind.
ls /var/opt/mssql/data
Geben Sie
exit
ein, um nichtmssql
zu sein.Geben Sie
exit
ein, um nichtroot
zu sein.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
Beenden Sie SQL Server, und vergewissern Sie sich, dass die Serverinstanz heruntergefahren wurde.
sudo systemctl stop mssql-server sudo systemctl status mssql-server
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.
Wechseln Sie zum Superuser. Wenn dies erfolgreich war, erhalten Sie keine Bestätigung.
sudo -i
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
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
Ä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
Ä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
Geben Sie
exit
ein, um nicht mehr der Superuser zu sein.Erstellen Sie eine Datenbank in diesem Ordner, um dies zu testen. Im folgenden Skript 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 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
Folgende Ausgabe wird erwartet.
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
Folgende Ausgabe wird erwartet.
lost+found
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
Konfigurieren Sie den Server so, dass die Volumegruppe nur mit Pacemaker aktiviert werden kann.
sudo lvmconf --enable-halvm --services -startstopservices
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
Ä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.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)
Starten Sie den Server neu.
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.
Generieren Sie eine Liste der Volumegruppen auf dem Server. Nun sollte die zuvor erstellte Volumegruppe angezeigt werden.
sudo vgs
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
Beenden Sie SQL Server, und vergewissern Sie sich, dass die Serverinstanz heruntergefahren wurde.
sudo systemctl stop mssql-server sudo systemctl status mssql-server
Wiederholen Sie die Schritte 1-6 auf allen anderen Servern, die an der Failoverclusterinstanz teilnehmen sollen.
Sie können die Failoverclusterinstanz nun konfigurieren.