# 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
* 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
```
### Utilisation d'un disque sur une machine différente
https://pve.proxmox.com/wiki/Moving_disk_image_from_one_KVM_machine_to_another