Ceph via iSCSI - oder Skifahren in der Hängematte

Gibt es unter uns (Cefovodov) diejenigen, die "professionelle Extreme" nicht mögen?

Es ist unwahrscheinlich - sonst würden wir mit diesem äußerst interessanten und lustigen Produkt keinen Salto machen.

Viele derjenigen, die an der Ausbeutung von Ceph beteiligt waren, trafen einen nicht allzu häufigen (aber auch sehr seltenen), aber manchmal nachgefragten Fall - Ceph über iSCSI oder FC zu verbinden. Warum? Senden Sie beispielsweise ein Image von Ceph an einen noch nicht virtualisierten Windows- oder Solaris-Server. Oder virtualisiert, aber durch einen Hypervisor, den Ceph nicht beherrscht, und wie wir wissen, gibt es genug davon. Zum Beispiel? Nun, zum Beispiel HyperV oder ESXi, die aktiv genutzt werden. Und wenn die Aufgabe entsteht, das Bild von Ceph an den Gastcomputer zu senden, wird dies zu einer sehr aufregenden Aufgabe.

Also gegeben:

  1. Ceph-Cluster wird bereits ausgeführt
  2. Ein vorhandenes Image, das über iSCSI gesendet werden muss
  3. Poolname mypool , Bildname myimage

Fangen wir an?

Wenn wir über FC oder iSCSI sprechen, erhalten wir zunächst Entitäten wie einen Initiator und ein Ziel. Ziel ist eigentlich ein Server, Initiator ist ein Client. Unsere Aufgabe ist es, das Ceph-Bild mit minimalem Arbeitsaufwand beim Initiator einzureichen. Also müssen wir das Ziel einsetzen. Aber wo, auf welchem ​​Computer?

Glücklicherweise haben wir im Ceph-Cluster mindestens eine Komponente, deren IP-Adresse festgelegt ist und auf der eine der wichtigsten Ceph-Komponenten konfiguriert ist, und diese Komponente ist ein Monitor. Dementsprechend setzen wir auf dem Monitor das iSCSI-Ziel (und den Initiator gleichzeitig, zumindest für Tests). Ich habe es auf CentOS gemacht, aber für jede andere Distribution ist die Lösung auch geeignet - platzieren Sie die Pakete einfach so, wie es für Ihre Distribution akzeptabel ist.

# yum -y install iscsi-initiator-utils targetcli

Was ist der Zweck der installierten Pakete?

  • targetcli - Linux SCSI-Dienstprogramm zur Zielverwaltung für den Linux-Kernel
  • iscsi-initiator-utils - Ein Paket mit Dienstprogrammen, mit denen der im Linux-Kernel integrierte iSCSI-Initiator erneut gesteuert wird

Um ein Image über iSCSI an den Initiator zu senden, gibt es zwei Optionen für die Entwicklung von Ereignissen: Verwenden Sie das Userspace-Backend des Ziels oder verbinden Sie das Image als Blockgerät, das für das Betriebssystem sichtbar ist, und exportieren Sie es über iSCSI. Wir werden den zweiten Weg gehen - das User-Space-Backend befindet sich noch in einem „experimentellen“ Zustand und ist nicht für den produktiven Einsatz bereit. Darüber hinaus gibt es bei ihm Fallstricke, über die man viel reden und (oh Horror!) Streiten kann.

Wenn wir zumindest eine stabile Distribution mit einem langen Unterstützungszyklus verwenden, dann haben wir den Kern einer uralten Version. Zum Beispiel ist es auf CentOS7 3.10. *, Auf CentOS8 4.19. Und wir sind an einem Kernel von mindestens 5.3 (aber eher 5.4) und einem neueren interessiert. Warum? Da Bilder in Ceph standardmäßig eine Reihe von Optionen enthalten, die nicht mit älteren Kerneln kompatibel sind. Also verbinden wir das Repository mit einem neuen Kernel für unsere Distribution (zum Beispiel für CentOS ist es elrepo), installieren einen neuen Kernel und starten das System neu, um mit dem neuen Kernel zu arbeiten:

  • Stellen Sie eine Verbindung zu dem für das Experiment ausgewählten Monitor her
  • Wir verbinden elrepo-Repositories gemäß der Anleitung - elrepo.org/tiki/tiki-index.php
  • Installieren Sie den Kernel: yum -y --enablerepo = elrepo-kernel install kernel-ml
  • Wir starten den Server mit dem Monitor neu (immerhin haben wir drei Monitore, oder?)

Schließen Sie das Bild als Blockgerät an

# rbd map mypool/myimage
/dev/rbd0


Es bleibt nur das Ziel zu konfigurieren. In diesem Beispiel werde ich das Ziel in der sogenannten konfigurieren Demo-Modus - ohne Authentifizierung, sichtbar und für jedermann zugänglich. In einer produktiven Umgebung möchten Sie höchstwahrscheinlich die Authentifizierung konfigurieren - dies gehört jedoch zu den Aufgaben, die heute nur zum Spaß ausgeführt werden.

Erstellen Sie ein Backend mit dem Namen disk1, das der Datei / dev / rbd / mypool / myimage zugeordnet ist. Die angegebene Datei ist eine symbolische Verknüpfung zu / dev / rbd0, die vom udev-Daemon automatisch erstellt wird. Wir verwenden einen symbolischen Link, da sich der rbd-Gerätename aufgrund der Reihenfolge ändern kann, in der Ceph-Images mit dem Host verbunden sind.

Erstellen Sie ein Backend:

# targetcli /backstores/block create disk1 /dev/rbd/mypool/myimage

Erstellen Sie ein iSCSI-Ziel:

# targetcli /iscsi create iqn.2020-01.demo.ceph:mypool

Verbinden Sie das Backend als LUN mit dem Ziel:

# targetcli /iscsi/iqn.2020-01.demo.ceph:mypool/tpg1/luns create /backstores/block/disk1

Wir passen das Ziel für den Demo-Modus an:

# targetcli /iscsi/iqn.2020-01.demo.ceph:mypool/tpg1/ set \
> attribute demo_mode_write_protect=0
# targetcli /iscsi/iqn.2020-01.demo.ceph:mypool/tpg1/ set \
> attribute generate_node_acls=1
# targetcli /iscsi/iqn.2020-01.demo.ceph:mypool/tpg1/ set \
> attribute cache_dynamic_acls=1


Speichern Sie die Konfiguration:

# targetcli saveconfig

Überprüfen Sie die Verfügbarkeit des Ziels:

# iscsiadm -m discovery -t st -p 127.0.0.1:3260
127.0.0.1:3260,1 iqn.2020-01.demo.ceph:mypool


Wir verbinden das Ziel:

# iscsiadm -m node --login
Logging in to [iface: default, target: iqn.2020-01.demo.ceph:mypool, portal: 127.0.0.1,3260] (multiple)
Login to [iface: default, target: iqn.2020-01.demo.ceph:mypool, portal: 127.0.0.1,3260] successful.


Wenn Sie alles richtig gemacht haben, wird auf dem Server eine neue Festplatte angezeigt, die wie ein SCSI-Gerät aussieht, in Wirklichkeit jedoch ein Image von Ceph ist, auf das über ein iSCSI-Ziel zugegriffen werden kann. Um Startprobleme zu vermeiden, sollten Sie das zugeordnete Laufwerk und das erkannte Ziel vom lokalen Initiator entfernen:

# iscsiadm -m node --logout
# iscsiadm -m discoverydb -o delete -t st -p 127.0.0.1:3260


Es bleibt nur die Konfiguration beizubehalten, damit das Image automatisch eine Verbindung herstellt und das Ziel nach der Verbindung geschichtet wird. Das Starten eines Ziels besteht aus zwei Schritten: Verbinden der RBD und tatsächliches Starten des Ziels.

Konfigurieren Sie zunächst die automatische Verbindung von RBD-Images mit dem Host. Dies geschieht durch Hinzufügen von Zeilen zur Datei / etc / ceph / rbdmap:

# cat /etc/ceph/rbdmap
# RbdDevice Parameters
mypool/myimage id=admin
# systemctl enable rbdmap


Das Wiederherstellen der Konfiguration eines Ziels ist etwas komplizierter - wir müssen eine Unit für systemd schreiben, um die Konfiguration wiederherzustellen:

# cat /usr/lib/systemd/system/scsi-target.service
[Unit]
Description=Start iSCSI target

After=network-online.target rbdmap.service
Before=remote-fs-pre.target
Wants=network-online.target remote-fs-pre.target

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/bin/targetcli restoreconfig

[Install]
WantedBy=multi-user.target

# systemctl daemon-reload
# systemctl enable scsi-target


Abschließender Test - wir starten unseren Monitor erneut neu (er ist jetzt ein iSCSI-Ziel). Es sollte beachtet werden, dass wir, wenn wir die Initiatorbasis nicht mit dem Befehl iscsiadm -n discoverydb -o delete gelöscht hätten, einen Server haben könnten, der nicht oder für längere Zeit geladen wurde.

Was ist noch übrig?

Konfigurieren Sie den Initiator auf dem Server, auf dem das Ziel übergeben werden soll.

Wie kann die Ausfallsicherheit unseres Ziels sichergestellt werden?

Sie können auf ähnliche Weise Ziele auf anderen Monitoren konfigurieren und Multipath-Verbindungen einrichten (VMware wird dies verstehen und sogar funktionieren, Hyper-V wird dies nicht verstehen - SCSI-Sperren sind dort erforderlich). Da der Ceph-Client vom Kernel kein Caching verwendet, ist dies ziemlich funktional. Eine andere Möglichkeit besteht darin, eine Cluster-Ressource aus drei Komponenten zu erstellen - eine dedizierte Ziel-IP-Adresse und Dienste für rbdmap und scsi-target - und diese Ressource über Cluster-Tools zu verwalten (wer hat den Schrittmacher angegeben?).

Anstelle eines Nachwortes


Wie Sie wissen, ist dieser Artikel ein kleiner Scherz - aber darin habe ich versucht, "schnell und mit Beispielen" mehrere recht beliebte Themen gleichzeitig zu behandeln - iSCSI-Ziel, das möglicherweise nicht unbedingt Ceph-Bilder exportiert - aber zum Beispiel LVM-Volumes, die Grundlagen der Arbeit mit iSCSI-Initiatoren ( wie man ein Ziel scannt, eine Verbindung zu einem Ziel herstellt, trennt, einen Zieldatensatz aus der Datenbank löscht), eine eigene Einheit für systemd und einige andere schreibt

Ich hoffe, auch wenn Sie den gesamten Versuch nicht vollständig wiederholen, wird Ihnen zumindest etwas aus diesem Artikel von Nutzen sein.

Source: https://habr.com/ru/post/de483974/


All Articles