Ceph via iSCSI - ou skier debout dans un hamac

Y a-t-il parmi nous (cefovodov) ceux qui n'aiment pas "l'extrême professionnel"?

C'est peu probable - sinon nous ne ferions pas de saut périlleux avec ce produit extrêmement intéressant et amusant.

Beaucoup de ceux qui étaient impliqués dans l'exploitation de Ceph ont rencontré un cas pas trop fréquent (mais plutôt même très rare) mais parfois exigé - pour connecter Ceph via iSCSI ou FC. Pourquoi? Eh bien, par exemple, soumettez une image de Ceph à un serveur Windows ou Solaris pas encore virtualisé. Ou virtualisé, mais grâce à un hyperviseur que Ceph ne sait pas faire, et comme nous le savons, il y en a assez. Par exemple? Eh bien, par exemple, HyperV ou ESXi, qui sont activement utilisés. Et si la tâche se pose de soumettre l'image de Ceph à la machine invitée, cela devient une tâche très excitante.

Donc, étant donné:

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

Commençons-nous

Tout d'abord, lorsque nous parlons de FC ou iSCSI, nous obtenons des entités telles qu'un initiateur et une 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 de travail. Nous devons donc déployer la cible. Mais où, sur quel ordinateur?

Heureusement, dans le cluster Ceph, nous avons au moins un composant dont l'adresse IP est fixe et sur lequel l'un des composants Ceph les plus importants est configuré, et ce composant est un moniteur. En conséquence, sur le moniteur, nous avons défini la cible iSCSI (et l'initiateur en même temps, au moins pour les tests). Je l'ai fait sur CentOS, mais pour toute autre distribution, la solution convient également - il suffit de mettre 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?

  • targetcli - Utilitaire de gestion de cible Linux SCSI pour le noyau Linux
  • iscsi-initiator-utils - un package avec des utilitaires utilisés pour contrôler à nouveau 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 de bloc visible au 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 prêt pour une utilisation productive. De plus, il y a des pièges avec lui dont vous pouvez beaucoup parler et (oh horreur!) Argumenter.

Si nous utilisons au moins une distribution stable avec un long cycle de support, alors nous avons le noyau d'une ancienne version ancienne. Par exemple, sur CentOS7, c'est 3,10. *, Sur CentOS8, c'est 4,19. Et nous sommes intéressés par un noyau d'au moins 5.3 (mais plutôt 5.4) et un plus récent. Pourquoi? Parce que par défaut, les images de Ceph ont un ensemble d'options joint qui n'est pas compatible avec les noyaux plus anciens. Donc, nous connectons le référentiel avec un nouveau noyau pour notre distribution (par exemple, pour CentOS c'est elrepo), installons un nouveau noyau et redémarrons le système pour travailler avec le nouveau noyau:

  • Connectez-vous au moniteur sélectionné pour l'expérience
  • Nous connectons les référentiels elrepo conformément aux instructions - elrepo.org/tiki/tiki-index.php
  • Installez le noyau: yum -y --enablerepo = elrepo-kernel install kernel-ml
  • Nous redémarrons le serveur avec le moniteur (après tout, nous avons trois moniteurs, non?)

Connectez l'image en tant que périphérique de bloc

# rbd map mypool/myimage
/dev/rbd0


Il ne reste plus qu'à configurer la cible. Dans cet exemple, je vais configurer la cible dans le soi-disant mode démo - sans authentification, visible et accessible à tous. Dans un environnement productif, vous voudrez probablement configurer l'authentification - mais c'est un peu hors de portée de l'exercice juste pour le plaisir d'aujourd'hui.

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

Créez un backend:

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

Créez une cible iSCSI:

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

Connectez le backend en tant que LUN à la cible:

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

Nous ajustons la cible du 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érifiez la disponibilité 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 en fait c'est une image de Ceph, dont l'accès se fait via la cible iSCSI. Pour éviter les problèmes de démarrage, il est préférable de supprimer le lecteur mappé 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'à conserver la configuration pour que l'image se connecte automatiquement et après la connexion, la cible est stratifiée. Le lancement d'une cible se compose de deux étapes - la connexion de RBD et le lancement réel de la cible.

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

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


La restauration de la configuration d'une cible est un peu plus compliquée - nous devons écrire l'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


Test final - une fois de plus, nous redémarrons notre moniteur (c'est maintenant une cible iSCSI). Il convient de noter que si nous n'avions pas effacé la base de l'initiateur avec la commande iscsiadm -n discoveryydb -o delete ... nous aurions pu obtenir un serveur qui ne se chargeait pas ou se chargeait depuis longtemps.

Que reste-t-il?

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

Comment assurer la résilience de notre cible?

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

Au lieu d'une postface


Comme vous le savez, cet article est une petite blague - mais j'y ai essayé «rapidement et avec des exemples» de considérer plusieurs sujets plutôt populaires en même temps - la cible iSCSI, qui ne peut pas nécessairement exporter des images Ceph - mais par exemple exporter des volumes LVM, les bases de travailler avec l'initiateur iSCSI ( comment analyser une cible, comment se connecter à une cible, se déconnecter, supprimer un enregistrement 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 entièrement cette expérience, au moins quelque chose de cet article vous sera utile.

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


All Articles