--- categories: cloud storage title: Howto Ceph ... * Documentation : # Installation On cherche à créer l'architecture suivante où un client interagit avec un cluster Ceph : <---- cluster Ceph -----> +-------+ +-> | 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. sudo wget -q -O- 'https://download.ceph.com/keys/release.asc' | sudo apt-key add - echo deb https://download.ceph.com/debian-luminous/ $(lsb_release -sc) main | sudo tee /etc/apt/sources.list.d/ceph.list sudo apt update && sudo apt install ceph-deploy > Les commandes précédentes ne sont à exécuter que sur le nœud maître. Puis, on installe NTP sur l'ensemble des nœuds. sudo apt install ntp sudo timedatectl set-ntp true **TODO** Il est recommandé de créer un utilisateur spécifique pour Ceph, mais ça fonctionne sans. > Jusqu'à indication du contraire, les commandes qui suivent sont à exécuter sur le nœud maître. On commence par créer un dossier qui contiendra les fichiers de configuration et les clefs. mkdir my-cluster cd my-cluster On crée le cluster : ceph-deploy new deb1 deb2 deb3 Ajouter le « public_network » à la configuration de Ceph : cat <>ceph.conf public_network = 192.168.4.0/24 eof On installe les paquets Ceph sur les nœeuds : ceph-deploy install --release luminous deb1 deb2 deb3 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 : > > ssh ceph1 sudo ceph -s | grep HEALTH_OK && echo yee || echo fail On ajoute des moniteurs afin d'assurer la bonne disponibilité du cluster. Il vaut mieux avoir un nombre impair de moniteurs. ceph-deploy mon add deb2 ceph-deploy mon add deb3 De la même manière, on ajoute des managers. Dans le cas où un manager décide de ne plus fonctionner. ceph-deploy mgr create deb2 ceph-deploy mgr create deb3 Il ne reste qu'à créer un pool et à initialiser RBD : sudo ceph osd pool create rbd 128 sudo rbd pool init rbd Le cluster est prêt. On peut maintenant s'occuper du client. ## Client L'installation du client est analogue à celle des nœuds. Depuis le nœud admin : ceph-deploy install --release luminous debc ceph-deploy admin debc ceph-deploy --overwrite-conf admin deb1 deb2 deb3 # TODO: nécéssaire ? > Si cette étape échoue à cause d'un problème de clefs, il faut copier les clefs dans /etc/ceph : > > sudo cp ceph.client.admin.keyring /etc/ceph Sur le client, on peut désormais récupérer le block device et l'utiliser : sudo rbd create foo --size 4096 --image-feature layering sudo rbd map foo --name client.admin sudo mkfs.ext4 -m0 /dev/rbd/rbd/foo sudo mkdir /mnt/ceph-block-device sudo mount /dev/rbd/rbd/foo /mnt/ceph-block-device cd /mnt/ceph-block-device # Gestion des block devices ## Redimensionner 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 ? # Troubleshooting **TODO** ajouter les messages d'erreur ## Crash 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 : # timedatectl status | grep -q '^NTP synchronized: yes$' || timedatectl set-ntp true ## Installation client impossible Si l'installation d'un client n'est pas possible à cause d'une erreur de configuration des paquets avec dpkg : # dpkg --configure ceph-common Puis recommencez l'installation depuis le nœud admin. ## « FS degraded » **TODO** À reproduire, procédure incomplète ## « Reduced data availability » Après avoir éteint le cluster pendant un week-end, la commande `sudo ceph -s` peut retourner le warning suivant : abmj@deb0:~$ sudo ceph -s cluster: id: beaa2317-eecb-4e2b-b5d2-358b072fe05d health: HEALTH_WARN Reduced data availability: 154 pgs inactive, 152 pgs peering Degraded data redundancy: 888/5094 objects degraded (17.432%), 66 pgs degraded La commande suivante permet de corriger ce warning : $ sudo ceph sync force --yes-i-really-mean-it --i-know-what-i-am-doing **TODO** Ce fix est barbare… Il y a certainement plus soft