--- 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 # 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