Ceph via iSCSI - ou skier debout dans un hamac

Y a-t-il parmi nous (Tsefovodov) qui n’aiment pas « l’extrême professionnel » ?

C’est peu probable, sinon nous ne nous amuserions pas avec ce produit extrêmement intéressant et amusant.

Beaucoup de ceux qui ont participé au fonctionnement de Ceph ont rencontré un cas peu fréquent (ou plutôt même très rare) mais parfois très demandé : la connexion de Ceph via iSCSI ou FC. Pour quoi? Eh bien, par exemple, soumettez une image de Ceph à un serveur Windows ou Solaris qui n'a pas encore été virtualisé pour une raison quelconque. Ou un hyperviseur virtualisé, mais utilisant un hyperviseur qui ne peut pas faire Ceph - et, comme nous le savons, il y en a beaucoup. Par exemple? Eh bien, par exemple, HyperV ou ESXi, qui sont activement utilisés. Et si la tâche consiste à transmettre une image de Ceph à une machine invitée, cela devient une tâche très passionnante.

Donc, étant donné:

  1. un cluster Ceph déjà en cours d'exécution
  2. une image déjà existante qui doit être servie via iSCSI
  3. Nom de la piscine ma piscine, nom de l'image mon image

Commencer?

Tout d'abord, lorsque nous parlons de FC ou d'iSCSI, nous avons des entités telles que l'initiateur et la cible. La cible est en fait un serveur, l'initiateur est un client. Notre tâche est de soumettre l'image Ceph à l'initiateur avec un minimum d'effort. Cela signifie que nous devons élargir la cible. Mais où, sur quel ordinateur ?

Heureusement, dans un cluster Ceph, nous avons au moins un composant dont l'adresse IP est fixe et sur lequel est configuré l'un des composants les plus importants de Ceph, et ce composant est le moniteur. En conséquence, nous installons une cible iSCSI sur le moniteur (et un initiateur en même temps, au moins pour les tests). Je l'ai fait sur CentOS, mais la solution convient également à toute autre distribution - il vous suffit d'installer les packages de la manière acceptable dans votre distribution.

# yum -y install iscsi-initiator-utils targetcli

Quel est le but des packages installés ?

  • ciblecli — un utilitaire de gestion de la cible SCSI intégré au noyau Linux
  • iscsi-initiator-utils — un package avec des utilitaires utilisés pour gérer l'initiateur iSCSI intégré au noyau Linux

Afin de soumettre une image via iSCSI à l'initiateur, il existe deux options pour le développement d'événements : utiliser le backend de l'espace utilisateur de la cible ou connecter l'image en tant que périphérique bloc visible par le système d'exploitation et l'exporter via iSCSI. Nous allons suivre la deuxième voie : le backend de l'espace utilisateur est toujours dans un état « expérimental » et n'est pas du tout prêt pour une utilisation productive. De plus, cela comporte des pièges, dont on peut beaucoup parler et (oh horreur !) discuter.

Si nous utilisons même une distribution quelque peu stable avec un long cycle de support, alors le noyau dont nous disposons est une version ancienne et ancienne. Par exemple, dans CentOS7, il s'agit de 3.10.*, dans CentOS8, il s'agit de 4.19. Et nous sommes intéressés par un noyau d'au moins 5.3 (ou plutôt 5.4) et plus récent. Pourquoi? Parce que par défaut, les images Ceph ont un ensemble d'options activées qui ne sont pas compatibles avec les anciens noyaux. Cela signifie que nous connectons un référentiel avec un nouveau noyau pour notre distribution (par exemple, pour CentOS, c'est elrepo), installons le nouveau noyau et redémarrons le système pour qu'il fonctionne avec le nouveau noyau :

  • Connectez-vous au moniteur sélectionné pour l'expérience
  • Nous connectons les référentiels elrepo selon les instructions - elrepo.org/tiki/tiki-index.php
  • Installez le noyau : yum -y —enablerepo=elrepo-kernel install kernel-ml
  • Redémarrez le serveur avec le moniteur (nous avons trois moniteurs, n'est-ce pas ?)

Connecter l'image en tant que périphérique bloc

# rbd map mypool/myimage
/dev/rbd0

Il ne reste plus qu'à configurer la cible. Dans cet exemple, je vais configurer la cible dans ce qu'on appelle. mode démo - sans authentification, visible et accessible à tous. Dans un environnement de production, vous souhaiterez probablement configurer l'authentification, mais cela sort un peu du cadre de l'exercice juste pour le plaisir d'aujourd'hui.

Créez un backend nommé disk1 associé au fichier /dev/rbd/mypool/myimage. Le fichier spécifié est un lien symbolique créé automatiquement par le démon udev vers /dev/rbd0. Nous utilisons un lien symbolique car le nom du périphérique rbd peut changer en fonction de l'ordre dans lequel les images Ceph sont connectées à l'hôte.

Créez un back-end :

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

Créez une cible iSCSI :

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

Nous connectons le backend en tant que LUN à la cible :

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

Configurons la cible pour le mode démo :

# 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

Enregistrez la configuration :

# targetcli saveconfig

Vérification de la présence de la cible :

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

Nous connectons la cible :

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

Si vous avez tout fait correctement, un nouveau disque apparaîtra sur le serveur, qui ressemble à un périphérique SCSI, mais est en fait une image de Ceph, accessible via une cible iSCSI. Pour éviter les problèmes de démarrage, il est préférable de supprimer le disque connecté et la cible détectée de l'initiateur local :

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

Il ne reste plus qu'à persister la configuration pour que l'image se connecte automatiquement et, après connexion, la cible soit stratifiée. Le lancement d'une cible se compose de deux étapes : connecter le RBD et lancer réellement la cible.

Tout d'abord, configurons la connexion automatique des images RBD à l'hôte. Cela se fait en ajoutant les lignes suivantes au fichier /etc/ceph/rbdmap :

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

La restauration de la configuration cible est un peu plus compliquée - nous devons écrire une unité pour systemd qui restaurera la configuration :

# 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

Le test final consiste à redémarrer notre moniteur (c'est maintenant une cible iSCSI). A noter que si l’on n’avait pas vidé la base de données de l’initiateur avec la commande iscsiadm -n Discoverydb -o supprimer ... vous pourriez vous retrouver avec un serveur qui ne se charge pas ou qui prend beaucoup de temps à se charger.

Que reste-t-il?

Configurez l'initiateur sur le serveur sur lequel nous voulons envoyer la cible.

Comment assurer la tolérance aux pannes de notre cible ?

Vous pouvez de la même manière configurer des cibles sur d'autres moniteurs et configurer des chemins multiples (VMware comprendra cela et fonctionnera même, Hyper-V ne comprendra pas - cela nécessite des verrous SCSI). Étant donné que le client Ceph du noyau n'utilise pas de mise en cache, cela est tout à fait réalisable. Ou une autre option consiste à créer une ressource de cluster de trois composants - une adresse IP cible dédiée et des services rbdmap et scsi-target, et à gérer cette ressource via des outils de clustering (qui a dit stimulateur cardiaque ?)

au lieu d'un épilogue

Comme il est clair, cet article est un peu une blague - mais j'y ai essayé d'examiner « rapidement et avec des exemples » plusieurs sujets assez populaires en même temps - la cible iSCSI, qui n'exporte pas nécessairement des images Ceph - mais par exemple, exporter des volumes LVM, les bases du travail avec un initiateur iSCSI ( comment analyser une cible, comment se connecter à une cible, se déconnecter, supprimer une entrée cible de la base de données), écrire votre propre unité pour systemd et quelques autres

J'espère que même si vous ne répétez pas toute cette expérience dans son intégralité, au moins quelque chose de cet article vous sera utile.

Source: habr.com

Ajouter un commentaire