Table des matières

Déployer un cluster de stockage Kraken (expérimental)


En ce Janvier 2017, une nouvelle version de Ceph vient se sortir avec l'apparition de nombreux changements concernant RADOS, RGW, RDB, Cephfs et blustore. Ce dernièr a pour but de stocker directement les données sur les partitions du disque laissant ainsi de côté le système de fichier XFS et cela devrait permettre de réduire considérablement les latences en lecture et en écriture.

Je vous invite à lire les modifications qu'il y a pu avoir depuis la version Jewel.

Initialisation du cluster

Dans notre situation on utilise une Debian 8.7 (Jessie) avec le noyau 4.8 (la 3.16.0-4-amd64 est aussi fonctionnel!) Vérifiez bien votre version à utiliser.

Installons d'abord les paquets requis par le manager :

apt-get install ceph-deploy

Puis ceux pour les nodes :

sudo apt-get install openssh-server libnss-mdns

Le paquet ntp na permettre de fournir un temps précis lors de l'écriture des journaux. Le paquet openssh-server car les administrations des serveurs se feront avec le protocole SSH et le paquet libnss-mdns pour publier le hostname en broadcast sur le réseau. Cela évite d'utiliser des adresses IPs dans les étapes suivantes.

Par principe de sécurité, créons notre utilisateur cephfs sur chacun des serveurs :

sudo useradd -d /home/cephfs -m cephfs
# sudo echo cephfs:cephfs |chpasswd
sudo echo "cephfs ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/cephfs
sudo chmod 0440 /etc/sudoers.d/cephfs
su cephfs

Pour que les commandes réalisé par le manager se fasse sans interruption, créons-lui une paire de clé dont la publique devra être transmise aux serveurs nodes :

ssh-keygen -N "" -f /home/cephfs/.ssh/id_rsa
ssh-copy-id cephfs@ceph2
ssh-copy-id cephfs@ceph3
ssh-copy-id cephfs@ceph4

Vu que nous connaissons la composition de notre cluster, renseignons-le :

nano /home/cephfs/.ssh/config
Host ceph1
   Hostname ceph1
   User cephfs
Host ceph2
   Hostname ceph2
   User cephfs
Host ceph3
   Hostname ceph3
   User cephfs
Host ceph4
   Hostname ceph4
   User cephfs

Déployer des nœuds

Maintenant que le manager peux discuter avec tous les nœuds, déclarons nos nœuds qui contiendrons les futurs données utilisateurs :

ceph-deploy new ceph2 ceph3 ceph4

Cela à créé ces fichiers :

ls
ceph.conf  ceph-deploy-ceph.log  ceph.mon.keyring

Vu que la version Kraken est encore en développement, il faut renseigner le bon dépôt avec la commande suivante :

ceph-deploy repo --repo-url https://download.ceph.com/debian-kraken/ --gpg-url https://download.ceph.com/keys/release.asc depot-kraken ceph1 ceph2 ceph3 ceph4

Ensuite on installe les dépendances sur chaque nœuds :

ceph-deploy install ceph1 ceph2 ceph3 ceph4

Ajouter le monitor ainsi que l'échange des clés :

ceph-deploy mon create-initial

Pour utiliser bluestore, on a besoin du paquet suivant :

ssh cephfs@ceph2 apt-get install google-perftools -y
ssh cephfs@ceph3 apt-get install google-perftools -y
ssh cephfs@ceph4 apt-get install google-perftools -y

On déclare les disques que nous allons utiliser :

ceph-deploy osd create --bluestore ceph2:sdb ceph3:sdb ceph4:sdb

On définit quel nœud stockera les méta-données :

ceph-deploy mds create ceph2

Partager les configurations :

ceph-deploy admin ceph1 ceph2 ceph3 ceph4

Vérifier que le cluster fonctionne en analysant l'état des OSD :

sudo ceph status
    cluster 9fa4f977-ffdb-433c-8fa4-6596f530cc85
     health HEALTH_WARN
            too many PGs per OSD (320 > max 300)
     monmap e3: 3 mons at {ceph2=192.168.1.167:6789/0,ceph3=192.168.1.164:6789/0,ceph4=192.168.1.178:6789/0}
            election epoch 8, quorum 0,1,2 ceph3,ceph2,ceph4
      fsmap e2: 0/0/1 up
        mgr active: ceph3 standbys: ceph4, ceph2   
            osdmap e19: 3 osds: 3 up, 3 in 
            flags sortbitwise,require_jewel_osds,require_kraken_osds
      pgmap v38: 320 pgs, 3 pools, 0 bytes data, 0 objects
            65988 kB used, 91792 MB / 91856 MB avail
                 320 active+clean

ou

    cluster 5d80e4a9-2225-4f91-948e-f3e1f57022b7
     health HEALTH_ERR
            64 pgs are stuck inactive for more than 300 seconds
            64 pgs stuck inactive
            64 pgs stuck unclean
     monmap e2: 3 mons at {ceph2-kb=192.168.1.174:6789/0,ceph3-kb=192.168.1.172:6789/0,ceph4-kb=192.168.1.204:6789/0}
            election epoch 10, quorum 0,1,2 ceph3-kb,ceph2-kb,ceph4-kb
        mgr no daemons active 
     osdmap e4: 3 osds: 0 up, 0 in
            flags sortbitwise,require_jewel_osds,require_kraken_osds
      pgmap v5: 64 pgs, 1 pools, 0 bytes data, 0 objects
            0 kB used, 0 kB / 0 kB avail
                  64 creating

Créer un pool

Un pool est comme une partition dont celle-ci est répartie sur plusieurs machines. En d'autre terme, le pool est placé parmi les OSD déclarés plus haut. Vu que l'on utilise uniquement 3 OSD, on renseigne au pool la valeur 128

sudo ceph osd pool create cephfs_data 128
sudo ceph osd pool create cephfs_metadata 128

On active le système de fichier :

sudo ceph fs new cephfs cephfs_metadata cephfs_data

On remarquera qu'un système de fichier à besoin de deux pools. L'un comprendra les données et l'autre les méta-datas.

Observons le résultat obtenu avec la commande suivante :

sudo ceph osd lspools
0 rbd,1 cephfs_data,2 cephfs_metadata,

Monter la partition

Attaquons enfin la dernière partie qui consiste à monter le système de fichier Ceph sur une machine cliente.

Cependant on a d'abord besoin de récupérer la clé secrète qui doit se trouver dans le fichier ci-dessous :

cat  /etc/ceph/ceph.client.admin.keyring

On doit retomber sur ce type de résultat, copions la clé qui va permettre de s'authentifier auprès d'un nœud.

[client.admin]
    key = AQATSKdNGBnwLhAAnNDKnH65FmVKpXZJVasUeQ==

Admettons que notre point de montage se fera dans le dossier /mnt. On devra faire :

sudo mount -t ceph 192.168.1.110:/ /mnt/ -o name=admin,secret=AQATSKdNGBnwLhAAnNDKnH65FmVKpXZJVasUeQ==

Voici la preuve que ça fonctionne bien !

Filesystem       Size  Used Avail Use% Mounted on
/dev/sda1        9.2G  1.0G  7.7G  12% /
udev              10M     0   10M   0% /dev
tmpfs             49M  4.4M   45M   9% /run
tmpfs            122M     0  122M   0% /dev/shm
tmpfs            5.0M     0  5.0M   0% /run/lock
tmpfs            122M     0  122M   0% /sys/fs/cgroup
none              55G   52G  3.5G  94% /vagrant
192.168.1.164:/   90G   68M   90G   1% /mnt/ceph