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 :
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 :
$ sudo rbd resize foo --size 16G
Si on souhaite réduire la taille du block device :
$ sudo rbd resize foo --size 8G --allow-shrink
Dans le cas où une machine virtuelle a été installée sur le block device, il faudra la redémarrer pour quelle comprenne la nouvelle taille du disque. **TODO** Peut-être qu'une commande virsh permet d'éviter ce reboot ?
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 :