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.
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
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
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,
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