iSCSI steht für Internet Small Computer System Interface.
Dies funktioniert auf der TCP/IP-Schicht und ermöglicht das Senden von SCSI-Befehlen über lokale Netzwerke (LAN).
Es wird für den Zugriff auf den Speicher in Ihrem Netzwerk über TCP/IP unter Verwendung von Datenübertragungen auf Blockebene verwendet.
Es gibt oft einen Vergleich zwischen NFS und iSCSI. Der Hauptunterschied besteht darin, dass NFS eine Implementierung auf Dateiebene ist, während iSCSI eine Implementierung auf Blockebene ist.
Bei Implementierungen auf Blockebene wie iSCSI und Fibre Channel bietet das Speicherarray dem Client eine Sammlung von Blöcken an, die diesen Rohspeicher dann mit dem Dateisystem formatieren, das er verwenden möchte.
In Ordnung um über iscsi auf den speicher zuzugreifen, benötigen wir die folgenden komponenten:
- iSCSI-Initiator (Hardware/Software) – Dies ist ein iSCSI-Client, der iscsi-Befehle über ein TCP/IP-Netzwerk senden kann. Dies ist normalerweise Ihr NIC-Adapter auf Ihrem Server und kann physisch oder virtuell sein, mit einer IP, die im selben Subnetz wie die iscsi-Schnittstelle des Speicher-Arrays konfiguriert ist.
- iSCSI-Ziel (Ihr Speicherknoten) – Dies ist Ihr Speicherknoten, den Sie selbst konfigurieren können oder der ein physisches Array von einem Anbieter sein kann, der die iscsi-konfiguration unterstützt
- iSCSI-Switch (optional) – Der iscsi-Switch ist hier optional, aber um den Host-Datenverkehr vom iscsi-Datenverkehr in Unternehmensumgebungen zu trennen, wird empfohlen, einen separaten Switch für den iscsi-Datenverkehr zu verwenden.
In diesem Tutorial werden wir sehen, wie Sie unseren eigenen Speicherknoten einrichten, der die iscsi-konfiguration unterstützt, und auf den Speicher vom iscsi-client auf einem Centos 6-Rechner zugreifen.
Die gleichen Verfahren sollten für die Version RHEL 6 (CentOS 6) funktionieren. Für CentOS 7 ist das Verfahren mit targetcli etwas anders, was wir in einem anderen Artikel behandeln werden.
1. Installieren Sie SCSI Target Utils und starten Sie tgtd
Installieren Sie zuerst die scsi-target-utils mit dem Befehl yum auf dem Speicherknoten, der zum Konfigurieren von iSCSI erforderlich ist.
yum install scsi-target-utils
Wenn Sie Perl noch nicht auf Ihrem System installiert haben, installiert der obige Befehl Perl und mehrere andere Abhängigkeiten (zum Beispiel:sg3_utils) automatisch.
Dadurch wird der tgtadm-Befehl wie unten gezeigt installiert.
# which tgtadm /usr/sbin/tgtadm
Starten Sie den SCSI-Target-Daemon wie unten gezeigt.
# service tgtd start Starting SCSI target daemon: [ OK ]
Stellen Sie mit dem Befehl chkconfig sicher, dass es beim Systemstart automatisch gestartet wird.
chkconfig tgtd on
2. Neues iSCSI-Target mit tgtadm hinzufügen
Verwenden Sie den Befehl tgtadm, um ein neues iSCSI-Ziel auf dem Speicherknoten hinzuzufügen, indem Sie die folgende Syntax verwenden:
tgtadm --lld --mode target --op new --tid --targetname
Das folgende Beispiel erstellt ein Ziel mit der Ziel-ID 1 mit dem folgenden iqn,
tgtadm --lld iscsi --op new --mode target --tid 1 \ -T iqn.2016-03.com.thegeekstuff:storage.lun01.thegeekstuff.com
Im obigen Befehl:
- Der Befehl tgtadm ist das Linux SCSI Target Administration Utility
- –lld iscsi gibt an, dass wir den iscsi-Treiber verwenden (Sie können auch -L anstelle von –lld verwenden)
- –op new gibt die Operation an, in diesem Fall erstellen wir ein neues Ziel (Sie können auch -o anstelle von –op verwenden)
- –mode target zeigt an, dass wir ein Ziel erstellen. Andere mögliche Modi sind:logicalunit, account, portal, conn, sys. (Sie können auch -m anstelle von –mode verwenden)
- –tid 1 gibt die Ziel-ID an, die in diesem Beispiel 1 ist (Sie können auch -t anstelle von –tid verwenden)
- -T gibt den Zielnamen an (Sie können auch –targetname anstelle von -T verwenden)
3. Anzeigen der iSCSI-Target-Konfiguration
Nachdem das Ziel erstellt wurde, können Sie die Details mit der Operation „Anzeigen“ wie unten gezeigt anzeigen. Dadurch werden die Systeminformationen und LUN-Informationen aller auf Ihrem System verfügbaren Ziele bereitgestellt.
Wie Sie der folgenden Ausgabe entnehmen können, haben wir nur ein Ziel (Ziel 1), bei dem es sich um einen iSCSI-Treiber handelt, mit einer LUN (LUN 0).
# tgtadm --lld iscsi --op show --mode target Target 1: iqn.2016-03.com.thegeekstuff:storage.lun01.thegeekstuff.com System information: Driver: iscsi State: ready I_T nexus information: LUN information: LUN: 0 Type: controller SCSI ID: IET 00010000 SCSI SN: beaf10 Size: 0 MB, Block size: 1 Online: Yes Removable media: No Prevent removal: No Readonly: No Backing store type: null Backing store path: None Backing store flags: Account information: ACL information:
Hinweis:In der obigen Ausgabe ist der „Backing Store Path“ derzeit None, da wir diesem iSCSI noch keinen physischen Speicherpfad zugeordnet haben.
4. Fügen Sie die LUN dem iSCSI-Ziel hinzu
Im folgenden Beispiel fügen wir dem von uns erstellten iSCSI-Ziel ein vorhandenes lun hinzu, nämlich /storage/lun01, das auf unserem Speicherknoten gemountet und verfügbar ist.
Für die vorhandene LUN (/storage/lun01) sollten Sie auch den SELinux-Kontext entsprechend wie unten gezeigt einstellen.
semanage fcontext -a -t tgtd_var_lib_t /storage/lun01 restorecon -Rv /storage/lun01
Wenn Sie „ungültige Anfrage“ erhalten, sollten Sie zu vorübergehenden Testzwecken SELinux deaktivieren, indem Sie SELinux in den Permissive-Modus versetzen, um zu sehen, ob es das Problem löst, und das Problem auf die SELinux-Berechtigung eingrenzen.
Fügen Sie nun mit dem Befehl tgtadm /storage/lun01 zum zuvor erstellten iSCSI-Ziel hinzu.
tgtadm --lld iscsi --op new --mode logicalunit --tid 1 \ --lun 1 --backing-store /storage/lun01
Im obigen Befehl:
- Die meisten Optionen sind dieselben, die wir in unserem vorherigen tgtadm-Befehl oben erklärt haben.
- –Modus logische Einheit. Bitte beachten Sie, dass wir früher „Ziel“ für Modus verwendet haben, aber hier verwenden wir logische Einheit für Modus.
- –lun gibt die LUN-ID an, die in diesem Beispiel 1 ist (Sie können auch -l anstelle von –lun verwenden)
- –backing-store gibt den physischen Speicherpfad auf dem Speicherserver an. In unserem Beispiel ist es /storage/lun01 (Sie können auch -b anstelle der Option –backing-store verwenden)
- –tid 1 gibt an, dass diese gegebene LUN mit der bestehenden Ziel-ID 1 verbunden werden soll, die wir zuvor erstellt haben.
Sehen Sie sich jetzt erneut die Details des iSCSI auf Ihrem System an.
Aber dieses Mal zeigt in LUN 1 der „Backing Store Path“ in der folgenden Ausgabe auf den Speicherpfad, den wir mit diesem iSCSI verknüpft haben. In unserem Beispiel ist es /storage/lun01.
# tgtadm --lld iscsi --op show --mode target Target 1: iqn.2016-03.com.thegeekstuff:storage.lun01.thegeekstuff.com System information: Driver: iscsi State: ready I_T nexus information: LUN information: LUN: 1 Type: disk SCSI ID: IET 00010001 SCSI SN: beaf11 Size: 5369 MB, Block size: 512 Online: Yes Removable media: No Prevent removal: No Readonly: No Backing store type: rdwr Backing store path: /storage/lun01 Backing store flags: Account information: ACL information:
Wenn Sie aus irgendeinem Grund einen Fehler im obigen Befehl gemacht haben und die oben erstellte LUN1-Zuordnung löschen möchten, verwenden Sie den folgenden Befehl.
tgtadm --lld iscsi --mode logicalunit --op delete --tid 1 --lun 1
Im obigen Befehl:
- Alles ist wie beim vorherigen Befehl
- Aber hier ist das -op (das ist die Operation) delete.
- Dadurch wird lun1 aus iSCSI tid 1 (Ziel 1) gelöscht
5. ACL-Beschränkung für iSCSI einrichten
Als nächstes müssen Sie ACL einrichten, um den Initiatoren zu erlauben, auf dieses SCSI-Ziel zuzugreifen.
tgtadm --lld iscsi --op bind --mode target --tid 1 -I ALL
Im obigen Befehl:
- Die meisten Optionen sind unseren vorherigen Befehlen ziemlich ähnlich
- -I ALL-Option gibt an, dass wir dem Ziel erlauben, ALLE Initiatoren zu akzeptieren (Sie können auch –initiator-address anstelle von -I verwenden)
Wenn Sie die iSCSI-Details mit der Operation „show“ anzeigen, werden Sie die ACL-Informationen gegen Ende der Ausgabe bemerken, wie unten gezeigt.
# tgtadm --lld iscsi --op show --mode target .. .. Backing store path: /storage/lun01 Backing store flags: Account information: ACL information: ALL
Wenn Sie nur den Client einschränken möchten, der auf den Speicher zugreifen muss, können Sie den folgenden Befehl verwenden und eine bestimmte IP-Adresse angeben.
tgtadm --lld iscsi --mode target --op bind --tid 1 192.168.2.109
Wenn Sie den Zugriff auf ein bestimmtes Subnetz einschränken möchten, können Sie das Subnetz anstelle der IP-Adresse angeben, wie unten gezeigt.
tgtadm --lld iscsi --mode target --op bind --tid 1 192.168.2.0/24
6. Zugriff auf Port 3260 zulassen
Wenn Sie ip-tables ausführen, fügen Sie eine ip-tables-Regel hinzu und lassen Sie Port 3260 wie unten gezeigt zu.
iptables -I INPUT -p tcp -m tcp --dport 3260 -j ACCEPT
Überprüfen Sie, ob der Port 3260 geöffnet ist, indem Sie den netstat-Befehl wie unten gezeigt verwenden.
# netstat -tunlp | grep 3260 tcp 0 0 0.0.0.0:3260 0.0.0.0:* LISTEN 1248/tgtd tcp 0 0 :::3260 :::* LISTEN 1248/tgtd
Hinweis:Bis zu diesem Zeitpunkt wurden alle oben genannten Befehle auf dem Speicherserverknoten ausgeführt. Von nun an werden alle Befehle im folgenden Abschnitt auf dem Client-Rechner ausgeführt, der sich mit dem Speicherserver verbinden muss.
7. Auf dem Client:iSCSI erkennen
Auf dem Client wird die neue iSCSI-Festplatte nicht angezeigt, bevor Sie das iSCSI erkennen. Die folgende Ausgabe zeigt beispielsweise nichts an.
fdisk -l /dev/sdb
Jetzt ist die gesamte zielseitige Konfiguration abgeschlossen und auf das lun kann über iscsi vom Client zugegriffen werden. Die folgenden Verfahren zeigen Ihnen, wie Sie die Client-Seite für den Zugriff auf den Speicher konfigurieren.
Installieren Sie auf dem Client-Server das Paket iscsi-initiator-utils wie unten gezeigt.
yum install iscsi-initiator-utils
Ermitteln Sie als Nächstes das iSCSI-Ziel mit dem Befehl iscsiadm wie unten gezeigt.
[root@client ~]# iscsiadm --mode discovery --type sendtargets \ --portal 192.168.2.166
Der obige Befehl zeigt die folgende Ausgabe an:
192.168.2.166:3260,1 iqn.2016-03.com.thegeekstuff:storage.lun01.thegeekstuff.com
Im obigen Befehl:
- iscsiadm-Befehl ist das Open-iscsi-Verwaltungsdienstprogramm
- –Modus Discover zeigt an, dass wir hier den iSCSI-Server entdecken. Andere mögliche Modi sind:discoverydb, node, fw, host iface oder session. (Sie können auch -m anstelle von –mode verwenden)
- – Geben Sie hier spezifische Sendeziele ein. Andere mögliche Werte sind:sendtargets, fw und iSNS. Anstelle von sendtargets können Sie auch die Abkürzung st verwenden. (Sie können auch -t anstelle von –type verwenden)
- –portal gibt die IP-Adresse des iSCSI-Speicherknotens an, den wir zuvor eingerichtet haben (Sie können auch -p anstelle von –portal verwenden).
- Wenn Sie iSCSI auf einem nicht standardmäßigen Port (anders als 3260) ausführen, geben Sie die IP-Adresse nach der IP-Adresse an. Beispiel:192.168.2.166:3261
Hinweis:Wenn Sie den Fehler „Keine Route zum Host“ erhalten, sind die iptables auf dem Ziel oder dem Client nicht richtig konfiguriert.
8. Auf dem Client:Melden Sie sich bei der iSCSI-Zielsitzung an
Sobald der Erkennungsprozess erfolgreich abgeschlossen ist, müssen Sie sich mit dem folgenden Befehl bei der iscsi-Zielsitzung anmelden:
[root@client ~]# iscsiadm --mode node --targetname iqn.2016-03.com.thegeekstuff:storage.lun01.thegeekstuff.com \ --portal 192.168.2.166 --login
Der obige Befehl zeigt die folgende Ausgabe an:
Logging in to [iface: default, target: iqn.2016-03.com.thegeekstuff:storage.lun01.thegeekstuff.com, portal: 192.168.2.166,3260] (multiple) Login to [iface: default, target: iqn.2016-03.com.thegeekstuff:storage.lun01.thegeekstuff.com, portal: 192.168.2.166,3260] successful.
Im obigen Befehl:
- Die meisten Optionen sind ähnlich wie beim vorherigen Befehl.
- Für den Modus verwenden wir hier Knoten (anstelle von Erkennung)
- -Zielname gibt den Zielnamen an. Dies ist der Zielname, den wir zuvor auf dem Speicherknoten angegeben haben, als wir das iSCSI erstellt haben (Sie können auch -T anstelle von –Zielname verwenden)
- –Login-Option meldet sich bei allen erkannten Zielen an. In unserem Fall wird es sich bei unserem Speicher-iSCSI-Server anmelden, der in der Option –portal angegeben ist.
Jetzt sollten Sie Ihr neues iscsi-gerät auf Ihrer fdisk-Ausgabe sehen. Sie können es formatieren, zu lvm hinzufügen und nach Bedarf verwenden.
Die Ausgabe des fdisk-Befehls zeigt nun das Gerät.
[root@client ~]# fdisk -l /dev/sdb Disk /dev/sdb: 5368 MB, 5368709120 bytes 166 heads, 62 sectors/track, 1018 cylinders Units = cylinders of 10292 * 512 = 5269504 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000
Hinweis:Die obige Festplatte kommt nicht vom Client-Rechner, sondern vom Speicherserver als iSCSI.