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.
De nombreux utilisateurs de Ceph ont rencontré un cas d'utilisation moins courant (voire très rare) mais parfois utile : la connexion de Ceph via iSCSI ou FC. Pourquoi ? Par exemple, pour déployer une image Ceph sur un serveur non encore virtualisé. Windows Ou Solaris. Ou une machine virtuelle, mais utilisant un hyperviseur qui ne prend pas en charge Ceph — et, comme nous le savons, il en existe de nombreux. Par exemple ? Eh bien, Hyper-V ou ESXi, par exemple, sont largement utilisés. Et si la tâche consiste à déployer une image Ceph sur une machine virtuelle, cela devient un défi passionnant.
Donc, étant donné:
- un cluster Ceph déjà en cours d'exécution
- une image déjà existante qui doit être servie via iSCSI
- 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 doté d'une adresse IP fixe et sur lequel est configuré l'un des composants Ceph les plus importants : le moniteur. Par conséquent, nous avons configuré une cible iSCSI sur le moniteur (et un initiateur, au moins à des fins de test). J'ai effectué cette opération sur CentOSmais la solution fonctionnera également pour toute autre distribution : il suffit d’installer les paquets de la manière acceptable pour votre distribution.
# yum -y install iscsi-initiator-utils targetcli
Quel est le but des packages installés ?
- ciblecli — un utilitaire de gestion du noyau intégré Linux Cible SCSI
- iscsi-initiator-utils — un ensemble d'utilitaires de gestion, également intégré au noyau Linux Initiateur iSCSI
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 une distribution stable avec un cycle de support très long, alors notre noyau est une version extrêmement ancienne. Par exemple, dans CentOS7 est 3.10.*, dans CentOSLa version 8 correspond à 4.19. Or, nous nous intéressons au noyau 5.3 (et probablement 5.4) ou à une version plus récente. Pourquoi ? Parce que, par défaut, les images Ceph activent des options incompatibles avec les noyaux plus anciens. Cela signifie que nous activons un dépôt avec un noyau plus récent pour notre distribution (par exemple, pour CentOS (Il s'agit d'elrepo), installez le nouveau noyau et redémarrez 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 -
- 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
Après=network-online.target rbdmap.service
Avant=remote-fs-pre.target
Veut=network-online.target remote-fs-pre.target
[Un service]
Type=oneshot
RemainAfterExit = oui
ExecStart=/bin/targetcli restoreconfig
[Installer]
WantedBy = multi-utilisateur.target
# démon systemctl-recharger
# systemctl activer la cible SCSI
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 configurer de la même manière des cibles sur d'autres moniteurs et mettre en place le multipathing (VMware le prendra en charge et fonctionnera même, contrairement à Hyper-V qui nécessite des verrous SCSI). Le client Ceph intégré au noyau n'utilisant pas de cache, cette solution est parfaitement réalisable. Une autre option consiste à créer une ressource de cluster à partir de trois composants : un serveur dédié Adresses IP cibler et les services rbdmap et scsi-target, et gérer cette ressource via des outils de clustering (qui a dit pacemaker ?)
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
