On cherche à créer l'architecture suivante où un client interagit avec un cluster Ceph :
<----clusterCeph----->
+-------+
+-> | ceph1 |
| +-------+
+-------+ +-------+ | +-------+
| cephc | <-> | cephm | <-+-> | ceph2 |
+-------+ +-------+ | +-------+
| +-------+
+-> | ceph3 |
+-------+
cephc : client Ceph
cephm : nœud maitre ou nœud admin
ceph[1-3] : nœud cephs
## Préparation
On suppose ici que :
- chaque machine a été installée sous Debian 9 ;
- chaque machine du cluster peut se connecter via SSH sur une autre ;
- cephc et cephm peuvent se connecter via SSH sur l'autre.
Pour la configuration SSH, on aura, pour cephm:
$ cat ~/.ssh/config
Hostname ceph1
Host ceph1
User cephuser
Hostname ceph2
Host ceph2
User cephuser
Hostname ceph2
Host ceph2
User cephuser
Il est peut-être nécéssaire d'ajouter les machines dans le fichier `/etc/hosts` :
X.X.X.X ceph1
Y.Y.Y.Y ceph2
Z.Z.Z.Z ceph3
> En réalité seul le nœud maître à besoin de se connecter aux autres nœud du cluster mais je n'ai pas essayé.
Dans cet exemple, chaque noeud - ceph1, ceph2 et ceph3 - à un disque supplémentaire à sa disposition. Ce disque contiendra les données à stocker dans le cluster et doit être vide, sans table de partitions et être utilisé comme volume physique :
wipefs -a /dev/sdb
pvcreate /dev/sdb
> /dev/sdb est le volume supplémentaire.
## Installation
On commence par installer `ceph-deploy`, l'outil qui permet de déployer un cluster Ceph.
On initialise le moniteur. Cela va créer un tas de fichiers `*.keyring`. On copie ensuite ces fichiers sur tous les nœeuds. Un monitor sert à maintenir une carte de l'état du cluster.
ceph-deploy mon create-initial
ceph-deploy admin deb0 deb1 deb2 deb3
On déploie un manager. Celui-ci permet de regrouper l'état du cluster à un seul endroit.
ceph-deploy mgr create deb1
On crée les OSD :
ceph-deploy osd create --data /dev/sdb deb1
ceph-deploy osd create --data /dev/sdb deb2
ceph-deploy osd create --data /dev/sdb deb3
> On peut lancer la commande suivante pour s'assurer que le cluster fonctionne bien :
Par défaut, il est impossible de supprimer un pool. Il y a deux gardes-fous à passer pour permettre la suppression. On s'assure d'abord que le flag « nodelete » est bien à « false » :
sudo ceph osd pool get $POOL_NAME nodelete | grep -q true && ceph osd pool set $POOL_NAME nodelete false
Une fois ce flag désactivé, il faut configurer le cluster pour autoriser la suppression d'un pool :
Il est possible d'étendre ou de réduire un block device au sein d'un pool. Si des machines virtuelles ont été installée sur le block device en question, il n'est pas nécéssaire de les éteindre. On suppose ici que l'on souhaite étendre le block device foo de 8 Gio à 16 Gio. Depuis le nœud admin ou client, il suffit de faire :
> **NB** Si on augmente le nombre de réplications, la commande `ceph -s` affichera certainement « HEALTH WARN ». Ce warning est normal et signale qu'une des réplications n'est pas complète. Il s'agit de celle qui vient d'être ajoutée. Le warning disparaitra quand la nouvelle réplication sera à jour.
Si une ou plusieurs machines du cluster s'éteigent brutalement, il suffit de les redémarrer et de s'assurer que le service NTP soit lancé sur la machine :
Dans la plupart des cas il suffira d'attendre que le cluster se soigne seul. On peut surveiller l'état du cluster avec `watch sudo ceph -s`. En dernier recours, si le cluster est bloqué, la commande suivante *peut* de corriger ce warning :