Déploiement de Ceph chez Ippon Hosting

La résilience des données est une problématique qui ne date pas d’hier, tout comme la haute disponibilité de l’accès à ces données. Le stockage réparti semble être la solution à ces problèmes. La notion de stockage objet devient également de plus en plus importante, dans l’optique de pouvoir interfacer sa solution de stockage avec sa solution de IaaS ou de PaaS, voire avec un service externe. Face au nombre grandissant de demandes de la part de nos clients, concernant ce type de mécanisme, Ippon Hosting s’est tourné vers le projet Ceph.

Pour deployer Ceph au sein d’Ippon Hosting nous avons eu besoin des éléments suivants:

  • Serveur de stockage : Carte réseau dédiée pour l’accès et une autre pour la réplication des données entre les nœuds.
  • VM de Management
  • VM pour la RadosGW (Passerelle API vers Ceph)

Voici le schéma d’architecture dessiné :

Pour l’ensemble de nos serveurs, le système d’exploitation installé est Ubuntu 12.04.4 LTS amd64.
Il faut commencer par installer la VM de management qui permettra de gérer l’ensemble des nœuds.

Installation VM Management

Configuration d’apt

Voici les commandes a exécuter :

``` wget -q -O- ‘https://ceph.com/git/?p=ceph.git;a=blob_plain;f=keys/release.asc’ | sudo apt-key add – echo deb http://ceph.com/debian-{ceph-stable-release}/ $(lsb_release -sc) main | sudo tee /etc/apt/sources.list.d/ceph.list sudo apt-get update && sudo apt-get install ceph-deploy```
L’installation du paquet ceph-deploy permettra de gérer l’installation du parc à distance

Création et configuration de l’utilisateur Ceph :

``` sudo useradd -d /home/ceph -m ceph sudo passwd ceph echo “ceph ALL = (root) NOPASSWD:ALL” | sudo tee /etc/sudoers.d/ceph sudo chmod 0440 /etc/sudoers.d/ceph su – ceph ssh-keygen```
Pour que le serveur de management puisse atteindre l’ensemble des nœuds, il faut s’assurer qu’il y ait la résolution de nom. Pour aller plus vite nous allons utiliser le fichier système : /etc/hosts
``` 10.0.0.1 ceph01 10.0.0.2 ceph02 10.0.0.3 ceph03```
***Mise en place des nœuds :***

Sur l’ensemble des nœuds à faire gérer par la VM de Management, il faut configurer l’utilisateur Ceph et y placer la clé SSH de l’utilisateur Ceph :

``` sudo useradd -d /home/ceph -m ceph sudo passwd ceph echo “ceph ALL = (root) NOPASSWD:ALL” | sudo tee /etc/sudoers.d/ceph sudo chmod 0440 /etc/sudoers.d/ceph```
Sur le serveur de management:
`ssh-copy-id cephXX`
Désormais le serveur management peut y déployer les paquets et les configurations Ceph.

Installation de Ceph

Nous utiliserons 3 Serveurs de Stockage ayant 4 disques de 4 To et 2 disques SSD de 60Go (ceph01, ceph02, ceph03). Ces serveurs seront nos nœuds de stockage.

Installation

On crée le répertoire qui hébergera les informations de configuration de notre cluster sur la VM d’admin :

`ceph@cephmngnt01:~$ mkdir my-cluster/`
Et on installe Ceph sur les nœuds en définissant l’hôte ceph01 serveur de monitoring :
``` ceph@cephmngnt01:~$ cd my-cluster ceph@cephmngnt01:~/my-cluster$ ceph-deploy new ceph01 ceph@cephmngnt01:~/my-cluster$ ceph-deploy install ceph01 ceph02 ceph03 ceph@cephmngnt01:~/my-cluster$ ceph-deploy mon create-initial```
Le [serveur *mon*](http://ceph.com/docs/v0.78/glossary/#term-ceph-monitor) permet de monitorer la disponibilité des disques de chaque noeuds (Ceph OSD Up/Down). Si le serveur *mon* tombe, le cluster tombe. C’est pour cela qu’il est important d’avoir un nombre IMPAIRE de serveur *mon*, un minimum de 3 pour assurer un bon fonctionnement.

Configuration d’un serveur monitor

Nous ajoutons donc deux serveurs mon :

`ceph@cephmngnt01:~/my-cluster$ ceph-deploy mon create ceph02 ceph03`
On peut valider que les serveurs de monitoring sont bien ajoutés par cette commande :
``` ceph@cephmngnt01:~/my-cluster$ ceph quorum_status –format json-pretty { “election_epoch”: 200, “quorum”: [ 0, 1, 2], “quorum_names”: [ “ceph01”, “ceph02”, “ceph03”], “quorum_leader_name”: “ceph01”, “monmap”: { “epoch”: 3, “fsid”: “UUID”, “modified”: “2014-05-28 10:32:23.494382”, “created”: “0.000000”, “mons”: [ { “rank”: 0, “name”: “ceph01”, “addr”: “10.0.0.1:6789\/0”}, { “rank”: 1, “name”: “ceph02”, “addr”: “10.0.0.2:6789\/0”}, { “rank”: 2, “name”: “ceph03”, “addr”: “10.0.0.3:6789\/0”}]}}```
Enfin nous allons modifier le fichier de configuration ceph.conf :
``` ceph@cephmngnt01:~/my-cluster$ vim ceph.conf […..] mon_initial_members = ceph01, ceph02, ceph03 mon_host = 10.0.0.1, 10.0.0.2, 10.0.0.3 […..] [mon.0] host = ceph01 mon addr = 10.0.0.1:6789 [mon.1] host = ceph02 mon addr = 10.0.0.2:6789 [mon.2] host = ceph03 mon addr = 10.0.0.3:6789```
Désormais il faut configurer Ceph pour lui indiquer d’utiliser deux réseaux différents pour le cluster et l’accès :
``` ceph@cephmngnt01:~/my-cluster$ vim ceph.conf […..] filestore_xattr_use_omap = true public network = 10.0.0.0/24 cluster network = 192.168.3.0/24 […..]```
**Configuration des OSD**

L’OSD correspond à un espace disque, l’OSD peut être une partition ou un disque en entier. On va exporter le journal du disque OSD vers un disque SSD.
Dans notre cas sur les serveurs ceph01, ceph02 et ceph03 les disques suivants seront les espaces utilisés :

  • /dev/sdc
  • /dev/sdd
  • /dev/sde
  • /dev/sdf

Leurs journaux seront respectivement /dev/sdb1,2,3,4

Pour commencer nous allons créer les partitions sur /dev/sdb sur les nœuds Ceph :

``` root@ceph0X:~# parted /dev/sdb GNU Parted 2.3 Utilisation de /dev/sdb Bievenue sur GNU Parted ! Tapez ‘help’ pour voir la liste des commandes. (parted) print Modèle: ATA INTEL SSDSC2CT06 (scsi) Disque /dev/sdb : 60,0GB Taille des secteurs (logiques/physiques): 512B/512B Table de partitions : gpt Numéro Début Fin Taille Système de fichiers Nom Fanions (parted) mkpart 1 xfs 1 10241 (parted) mkpart 2 xfs 10242 20482 (parted) mkpart 3 xfs 20483 30723 (parted) mkpart 4 xfs 30724 40964 (parted) print Modèle: ATA INTEL SSDSC2CT06 (scsi) Disque /dev/sdb : 60,0GB Taille des secteurs (logiques/physiques): 512B/512B Table de partitions : gpt Numéro Début Fin Taille Système de fichiers Nom Fanions 1 1049kB 10,2GB 10,2GB 1 2 10,2GB 20,5GB 10,2GB 2 3 20,5GB 30,7GB 10,2GB 3 4 30,7GB 41,0GB 10,2GB 4```
Nous avons désormais 10Go pour les journaux des 4 disques de 4To, on peut déployer les OSD.

Il faut se connecter sur le serveur de Management:

``` ceph@cephmngnt01:~/my-cluster$ ceph-deploy –overwrite-conf osd create ceph0{1,2,3}:sdc:/dev/sdb1 ceph@cephmngnt01:~/my-cluster$ ceph-deploy –overwrite-conf osd create ceph0{1,2,3}:sdd:/dev/sdb2 ceph@cephmngnt01:~/my-cluster$ ceph-deploy –overwrite-conf osd create ceph0{1,2,3}:sde:/dev/sdb3 ceph@cephmngnt01:~/my-cluster$ ceph-deploy –overwrite-conf osd create ceph0{1,2,3}:sdf:/dev/sdb4```
Ces commandes ont créé les OSDs sur les nœuds :
``` /dev/sdc1 3,7T 39M 3,7T 1% /var/lib/ceph/osd/ceph-X /dev/sdd1 3,7T 12G 3,7T 1% /var/lib/ceph/osd/ceph-X /dev/sde1 3,7T 2,9G 3,7T 1% /var/lib/ceph/osd/ceph-X /dev/sdf1 3,7T 8,5G 3,7T 1% /var/lib/ceph/osd/ceph-X```
Pour finaliser le cluster, nous allons pousser le fichier de configuration ceph.conf présent sur le serveur de management sur l’ensemble des nœuds :
`ceph@ih-prd-cephmngnt01:~/my-cluster$ ceph-deploy –overwrite-conf admin ceph01 ceph02 ceph03 ih-prd-cephmngnt01`
Et nous validons le bon fonctionnement
``` ceph@ih-prd-cephmngnt01:~/my-cluster$ ceph health HEALTH_OK```
De même que nous validons que les serveurs mon fonctionne
``` ceph@ih-prd-cephmngnt01:~/my-cluster$ ceph quorum_status –format json-pretty { “election_epoch”: 28, “quorum”: [ 0, 1, 2], “quorum_names”: [ “ceph01”, “ceph03”, “ceph04”], “quorum_leader_name”: “ceph01”, “monmap”: { “epoch”: 3, “fsid”: “UUID”, “modified”: “2014-05-28 10:32:23.494382”, “created”: “0.000000”, “mons”: [ { “rank”: 0, “name”: “ceph01”, “addr”: “10.0.0.1:6789\/0”}, { “rank”: 1, “name”: “ceph02”, “addr”: “10.0.0.2:6789\/0”}, { “rank”: 2, “name”: “ceph03”, “addr”: “10.0.0.3:6789\/0”}]}}```
Désormais on peut l’utiliser avec plusieurs méthodes :
  • Object Gateway : API S3 ou API Swift, pour cela il faut mettre en place une RadosGW
  • Block Device : Utilisation via libvirt/librbd ou via la commande rbd

Ces méthodes seront présentées dans un autre article.

[Inscription en ligne à un événement](http://www.eventbrite.fr/r/etckt) pour [Apps modernes et PaaS : Faites l’expérience d’un développement et déploiement simplifiés](https://www.eventbrite.fr/e/billets-apps-modernes-et-paas-faites-lexperience-dun-developpement-et-deploiement-simplifies-15550744696?ref=etckt)réalisé par[Eventbrite](http://www.eventbrite.fr?ref=etckt)