Ceph
Mais c'est quoi
Ceph est une plateforme libre de stockage distribué. Les objectifs principaux de Ceph sont d'être complètement distribué sans point unique de défaillance, extensible jusqu'à l'exaoctet et librement disponible. Les données sont répliquées, permettant au système d'être tolérant aux pannes.
Ceph fonctionne sur du matériel non spécialisé. Le système est conçu pour s'autoréparer et automatiser au maximum ses tâches administratives afin de réduire les coûts d'exploitation.
On y stock quoi concrètement ?
Ceph met en œuvre le stockage d'objets distribué au moyen de RADOS (Reliable Autonomic Distributed Object Store), un moteur de stockage objet fiable, autonome et distribué.
Côté client, sa bibliothèque logicielle native librados permet aux applications C, C++, Java, Python, Ruby et PHP un accès direct en mode objet.
Différentes bibliothèques additionnelles permettent d'obtenir les abstractions nécessaires pour :
- L'accès en mode bloc grâce à RADOS Block Device (RBD)
- L'accès en mode fichier grâce à CephFS
- L'accès en mode HTTP REST via les interfaces OpenStack Swift ou Amazon S3 grâce à la passerelle RADOS (RADOS Gateway ou RADOSW)
Architecture
Vocabulaires
- CRUSH Controlled Replication Under Scalable Hashing. It is the algorithm Ceph uses to compute object storage locations.
- ruleset A set of CRUSH data placement rules that applies to a particular pool(s).
- Pools Pools are logical partitions for storing objects.
- OSD A physical or logical storage unit (e.g., LUN). Sometimes, Ceph users use the term “OSD” to refer to Ceph OSD Daemon, though the proper term is “Ceph OSD”.
Procédures
Avant d'éteindre une machine physique pour maintenance courte
Il est nécessaire de marquer le cluster avec le flag noout
: ceph osd set noout
. Il est également possible de le faire depuis l'interface de Proxmox, sur une machine physique, dans l'onglet Ceph/OSD
.
Une fois la machine à nouveau opérationelle, enlevez le flag noout
: ceph osd unset noout
.
Activation cache-tiering
ceph osd tier add rdb ssd ceph osd tier cache-mode ssd writeback ceph osd tier set-overlay rdb ssd
Il faut penser a définir MANUELLEMENT les limites de remplissage du cache, ceph n'arrivant pas à les déterminer seul.
ceph osd pool set ssd hit_set_type bloom ceph osd pool set ssd target_max_bytes 800000000000 ceph osd pool set ssd cache_target_full_ratio 0.9 ceph osd pool set ssd cache_target_dirty_ratio 0.7 ceph osd pool set ssd cache_target_dirty_high_ratio 0.8
Désactivation cache-tiering
- Flush des donnés en cache (asynchrone, plusieurs minutes)
ceph osd tier cache-mode ssd forward
S'ASSURER QUE LE CACHE EST VIDE, via la commande:
rados -p ssd ls
Il est possible de le forcer manuellement via la commande:
rados -p ssd cache-flush-evict-all
- Suppression de la redirection depuis la pool de stockage
ceph osd tier remove-overlay rdb
- Suppression du cache-tiers
ceph osd tier remove rdb ssd
Troubleshooting
Generic Troubleshooting
# Check cluster status ceph -s|--status|status # Check cluster health ceph health {detail} # Watch live cluster change ceph -w|--watch
Documentation: http://docs.ceph.com/docs/mimic/rados/operations/pg-states/
Inconsistent pg
- Affichage des IDs des pg inconsistent
ceph health detail
- Réparation des pg :
ceph pg repair <id>
- Si vous refaites un ceph health detail, il est normal que seul certains pg soit marqués en repair. Cela est dû au fait que ceph dispose d'un ordonnanceur qui répare les pg les uns après les autres.
Supression de disques RADOS
# Liste des pools ceph osd lspools # Liste des disques rbd {pool-name} ls # Liste des snapshots d'un disque rbd snap ls {pool-name}/{image-name} # Unprotect d'une snapshot d'un disque rbd snap unprotect {pool-name}/{image-name}@{snapshot-name} # Purge des snapshots du disque rbd snap purge {pool-name}/{image-name} # Supression du disque rbd remove {pool-name}/{image-name}
- Si vous rencontrez le problème suivant lors de la suppression d'un disque
rbd: error: image still has watchers This means the image is still open or the client using it crashed. Try again after closing/unmapping it or waiting 30s for the crashed client to timeout.
- Listez les watchers de l'image en question
rbd status {pool-name}/{image-name}
- Unmap l'image sur l'hote:
# /!\ Sur l'hôte retourné par 'rbd status' # Vérifiez que l'image en question est présente rbd showmapped # Unmap l'image en question rbd unmap <image-name>