Introduction et disclaimer

Parfois sur un serveur, on se retrouve avec un disque de grande capacité qui ne vous sert à rien, parce que par exemple vous avez juste besoin de quelques centaines de Go pour installer un système.

Si vous utilisez en outre un système de stockage distribué (ici ceph), cela rend cette perte encore plus dommage, puisque la tentation est grande d'utiliser le reste du disque pour l'intégrer au cluster.

Avec ceph, c'est possible !
En effet comme il se sert de partitions toute simple et non d'un disque entier, il est possible de le nourrir avec ce qu'il reste d'espace sur votre disque.

Il y a bien sûr des contraintes que l'on va détailler dans les disclaimers suivants.

Disclaimer 1

Mieux vaut que la taille restante de votre disque soit proche de celle des autres disques du cluster.

Ajouter 100Go de disque à un cluster utilisant des disques de 3To n'a au mieux aucun intérêt et au pire peut être risqué !

Disclaimer 2

GROS DISCLAIMER

Utiliser le disque où il y a votre système installé va partager les IO du disque entre ceph et l'OS !

Ceph peut être un très gros consommateur de lecture/écriture, il est donc important de ne faire ça que si votre système a besoin de peu d'io.

  • Ne le faites pas si vous utilisez un disque lent (5400trs/min ? c'est mort. 7200 trs/min ? Ça peut passer si votre OS n'écrit rien)
  • Ne le faites pas si votre OS utilise de nombreux IO (service de BDD installé dessus, nombreux logs, ...)
  • Surveillez vos IO et la charge dans le temps après la configuration
  • Ne le faites pas si vous ne savez pas ce que vous faites :kissing:hearth:

Manipulations

L'idée est simple. On va formater le disque à la main et s'en servir pour l'intégrer dans ceph.

Comme toute idée simple, le potentiel de ratage est important, je vais donc volontairement détailler les choses auxquelles faire attention.

Ouais je sais je suis un peu chiant, que voulez vous, c'est l'apprentissage de la vie en production qui parle :-D

Hypothèses

À lire

Je pars ici du principe que les binaires ceph sont déjà installés sur votre système (si par exemple vous utilisez un autre disque du serveur pour ceph)
Si ce n'est pas le cas, commencez par attaquer la documentation :-)

Je vais également prendre un exemple de partitionnement existant pour la numérotation des partitions.
Adaptez cet exemple avec votre situation pour éviter d'écraser des partitions existantes !

Notre exemple

Dans cet exemple on va se baser sur un disque de 3To qui possède déjà 4 partitions :

# fdisk -l /dev/sda
Disk /dev/sda: 2.7 TiB, 3000592982016 bytes, 5860533168 sectors

Device         Start        End    Sectors  Size Type
/dev/sda1       4096   67112959   67108864   32G Linux swap
/dev/sda2   67112960   68161535    1048576  512M Linux filesystem
/dev/sda3   68161536  277876735  209715200  100G Linux filesystem
/dev/sda4       2048       4095       2048    1M BIOS boot

Comme vous le voyez on utilise déjà environ 132Go, on va donc s'occuper de récupérer les 2,8To restant.

Là encore, pensez à adapter les numéros de partitions dans la suite !

On va également utiliser sgdisk car c'est l'outil de configuration qu'utilise ceph lui-même quand il doit préparer un disque complet, et il fait le taf exactement comme les binaires ceph s'attendent à le voir fait.

Partitionnement

Ceph a besoin d'une partition de type Ceph OSD d'une centaine de Mo pour ses méta données, qui doit porter le nom ceph data.
On va donc lui créer une 5eme partition nommée ceph data de type 4fbd7e29-9d25-41b8-afd0-062c0ceff05d. (cf wikipedia)

Ici modifiez les 5: pour coller avec votre propre numéro de partition. Il y a quatre 5: à changer.

sgdisk --new=5:0:+100M --change-name="5:ceph data"   --partition-guid=5:$(uuidgen -r)   --typecode=5:4fbd7e29-9d25-41b8-afd0-062c0ceff05d -- /dev/sda
partprobe # partprobe nous permet ici de relire à chaud les partitions d'un disque en cours d'utilisation.

On va ensuite créer une 6ème partition utilisant tout le reste du disque.
Celle-ci doit s'appeler ceph block et être de type CAFECAFE-9B03-4F30-B4C6-B4B80CEFF106 (oui oui cafe cafe, là encore confer wikipedia)

Là encore modifiez les numéros 6: pour coller à votre partition. Il y a trois 6: à changer cette fois.

sgdisk --largest-new=6 --change-name="6:ceph block"   --typecode=6:CAFECAFE-9B03-4F30-B4C6-B4B80CEFF106 -- /dev/sda
partprobe

Activation

Une fois le partitionnement terminé, il ne nous reste plus qu'à dire à ceph d'utiliser le disque :

Comme toujours, modifiez vos partitions pour coller à votre cas ! Ici sda5 représente la partition ceph-osd, sda6 le reste du disque.

ceph-disk prepare --bluestore /dev/sda5 /dev/sda5 /dev/sda6
ceph-disk activate /dev/sda5 

Et voila, une fois le ceph-disk activate terminé, votre nouvel osd est prêt et intégré au cluster ceph !

Enjoy :-)


Victor Avatar Victor est le rédacteur principal du blog.
Comments

Si vous avez des questions, si quelque chose n'est pas clair, n'hésitez pas à commenter !

  • Avatar
    Permalink

    Robin

    Posted on

    Bonjour.

    Merci pour ce post qui m'interesse.

    cependant un an après, ceph-disk est déprécié (voire même absent sur des installations récentes telles que sur proxmox 6).

    Je souhaite mettre en place ceph sur un cluster proxmox, et ce sur des serveurs OVH. J'ai donc une grape RAID 1(RAIS qui n'es pas supporté par ceph, puisqu'il fait lui-même une sorte de raid entre les différents OSD).
    J'ai donc installé le système sur une partition RAID, et il me reste 1.8 To de libre sur 2 diques. disons que j'avais /dev/sda4 et /dev/sdb4 qui font chacun 1.8To, et ce sur 3 serveurs. J'aimerais donc créer 6 OSD sur ceph.

    J'ai commencé par détruire ces partitions avec fdisk. Je me retrouve avec ça :

    ```Device Start End Sectors Size Type /dev/sdb1 40 2048 2009 1004.5K BIOS boot /dev/sdb2 4096 92162047 92157952 44G Linux RAID /dev/sdb3 92162048 124927999 32765952 15.6G Linux swap

    Je comptais adapter dans votre exemple les commandes ceph-disk par ceph-volume .... Mais je coince déjà avec sgdisk. J'ai le retour suivant une fois votre partition 5 adapté à mon cas (donc 4) :
    

    sgdisk --new=5:0:+100M --change-name="4:ceph data" --partition-guid=4:$(uuidgen -r) --typecode=4:4fbd7e29-9d25-41b8-afd0-062c0ceff05d -- /dev/sdb Setting name! partNum is 3 Unable to set partition 4's name to 'ceph data'! Could not change partition 4's type code to 4fbd7e29-9d25-41b8-afd0-062c0ceff05d! Error encountered; not saving changes. ```

    Pouvez-vous m'aider SVP ?


    • Avatar
      Permalink

      Victor

      Posted on

      Bonjour Robin !

      Merci pour l'info sur le fait qu'ils ont enlevé la commande ceph-disk. Il me semblait qu'ils gardaient un wrapper, il va falloir que j'essaye d'installer un proxmox 6 pour tester si je veux mettre à jour l'article 😅

      Concernant votre problème, au vu de la commande je pense que le souci vient du fait que vous n'avez pas modifié le premier 5: dedans

      En effet même si la syntaxe n'est pas très intuitive je l'avoue, il y a bien quatre 5: à changer. Plus précisément, tous les chiffres X: doivent être identiques pour chacune des options, or dans votre commande le premier est rester en 5:.

      Cela a pour conséquence que la commande doit créer une partition 5 de 100M, puis essayer de renommer la 4 qui n'existe pas, d'où l'erreur.

      Vérifiez si la partition 5 n'existe pas avec fdisk, auquel cas supprimez là, puis essayez de relancer la commande de cette manière :

      sgdisk --new=4:0:+100M --change-name="4:ceph data"   --partition-guid=4:$(uuidgen -r)   --typecode=4:4fbd7e29-9d25-41b8-afd0-062c0ceff05d -- /dev/sdb
      

      Notez le --new=4:0:+100M avec un 4: :-)

      N'hésitez pas à me dire si jamais le souci se pose toujours !

      Bon courage

    • Avatar
      Permalink

      Robin

      Posted on

      Merci Victor pour cette réponse. Oui oui ... je m'étais effectivement planté j'avais bien oublié de modifier une des valeurs (ce n'est pourtant pas faute d'avoire énnoncé dans votre article le nombre de valeur à changer ^^ )

      Je confirme qu'avec :

      sgdisk --new=4:0:+100M --change-name="4:ceph data"   --partition-guid=4:$(uuidgen -r)   --typecode=4:4fbd7e29-9d25-41b8-afd0-062c0ceff05d -- /dev/sdb
      

      puis :

      sgdisk --largest-new=5 --change-name="5:ceph block"   --typecode=5:CAFECAFE-9B03-4F30-B4C6-B4B80CEFF106 -- /dev/sdb
      

      ça fonctionne :

      root@proxmox : ~# fdisk /dev/sdb
      Device         Start        End    Sectors    Size Type
      /dev/sdb1         40       2048       2009 1004.5K BIOS boot
      /dev/sdb2       4096   92162047   92157952     44G Linux RAID
      /dev/sdb3   92162048  124927999   32765952   15.6G Linux swap
      /dev/sdb4  124928000  125132799     204800    100M Ceph OSD
      /dev/sdb5  125132800 3907029134 3781896335    1.8T unknown
      

      Maintenant c'est le passage à ceph-volume plustôt que ceph-disk qui pose problème. J'ai voulu adapter la commande

      ceph-disk prepare --bluestore /dev/sdb4 /dev/sdb4 /dev/sdb5
      

      par

      ceph-volume lvm prepare --data /dev/sdb5 --journal /dev/sdb4
      

      Mais j'ai le résultat (non fructuant) suivant :

      Running command: /bin/ceph-authtool --gen-print-key
      Running command: /bin/ceph --cluster ceph --name client.bootstrap-osd --keyring /var/lib/ceph/bootstrap-osd/ceph.keyring -i - osd new c202fb30-3e66-4d1d-9868-dd8311d0e168
       stderr: [errno 2] error connecting to the cluster
      -->  RuntimeError: Unable to create a new OSD id
      

      Si vous avez une idée ?
      Je ne suis pas certain que le problème vienne de la commande, c'est peut être aussi ceph qui ne parviens pas à communiquer avec les moniteurs, parce que le message parle de problème de communication avec le cluster. Or, c'est la première fois que j'utilise Ceph, et j'ai donc un peu de mal à tout comprendre d'un coup.

      PS :

      Si au delà de ce problème vous avez envie de m'aider dans la création d'un cluster flambant neuf sous proxmox 6 avec de la HA via ceph, je pourrais vous parler avec grand plaisir de mon ~problème~ projet dans son ensemble par mail pour ne pas dériver dans les commentaires de votre article vers une autre problématique.
      C'est vrai que la communauté proxmox est beaucoup solicité sur le forum officiel de proxmox, et qu'il est difficile d'attirer l'attention :/ Pourtant, pour tous ceux qui comme moi souhaitent avoir une infrastructure de production moins couteuse qu'un vsphere managé (offres Public cloud) chez OVH, mon projet peut s'avérer très intéressant. Vous pourriez en plus proposer un article complet avec les résultats de ce "POC" en français, je suis certain qu'il en interessera plus d'un !

      Bonne journée

    • Avatar
      Permalink

      Victor

      Posted on

      Hello,

      Content de voir que le premier problème est réglé !

      Pour la suite, je n'ai jamais joué avec ceph-volume, mais vu les options, il a l'air de faire un peu plus que ceph-disk.

      L'erreur est assez obscure en effet, ça ne communique pas avec le cluster, mais pourquoi ?

      Je vous invite à vérifier dans /var/lib/ceph/bootstrap-osd/ s'il y a bien les fichiers de keyring. Ceph a un système de clef pour l'authentification, peut être qu'elles n'ont pas été correctement extraites ?

      Également, vous devriez avoir un fichier /etc/ceph/ceph.conf qui contient divers paramètres de base pour le cluster et pour l'osd, jetez un oeil à l'intérieur.

      Le fsid notamment devrait être identique à celui affiché si vous lancez un ceph status depuis l'un des monitors (pas besoin d'OSD pour lancer le status)

      Enfin, ce fichier devrait aussi lister des mon host, ça vaudrait le coup de vérifier s'ils sont joignables depuis votre OSD, que ce soit un ping ou sur le port 6789

      Bon courage !

      Concernant le PS, c'est vrai que je n'utilise quasiment plus Proxmox à titre personnel maintenant, je me concentre surtout sur les containers, que ça soit docker ou virtuzzo. Du coup je ne connait pas trop leurs intégrations de ceph même si ce que j'en ait vu est très intéressant en terme de simplification d'usage.

      A ce sujet pour du contenu en français, je vous conseille le blog de dryusdan : https://www.dryusdan.fr/installer-un-cluster-proxmox-ceph-tinc-openvswitch/

      Je n'ai pas de soucis pour échanger par courriel, mais je ne promets pas de miracles ^^
      N'hésitez pas à me laisser votre adresse dans un commentaire si vous le souhaitez ! Elle ne sera pas visible publiquement pas d'inquiétude.

    • Avatar
      Permalink

      illustre

      Posted on

      Merci pour cet article. J'ai pu utiliser ceph-volume pour activer mes partitions, comme indiqué dans les commentaires, sans erreur de cluster

Ajouter un commentaire / Add a Comment

Vous pouvez utiliser la syntaxe Markdown pour formatter votre commentaire.

You can use the Markdown syntax to format your comment.

Flux Atom pour commentaire / Comment Atom Feed

Published

Category

Système

Tags

Restez en contact