186 lines
5.5 KiB
Markdown
186 lines
5.5 KiB
Markdown
---
|
||
categories: cloud storage
|
||
title: Howto Ceph
|
||
...
|
||
|
||
* Documentation : <http://docs.ceph.com>
|
||
|
||
|
||
# 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 <<eof >>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 |