Déployer un cluster de stockage Jewel (stable)


Ceph va nous permettre d'acquérir une grande quantité de stockage hautement disponible car les données sont réparties sur les neouds mais également redondant en cas de panne sur l'un de ces nœuds. Par défaut il en faut 3 pour que la parité puisse fonctionner.

Voici l'infrastructure que nous allons mettre en place :

A la suite de ce tutoriel, nous allons configurer un manager qui aura pour rôle de surveiller, contrôler et manager les nœuds et en contre partie, il ne contiendra pas de données utilisateurs. Lorsque l'on créera un point de montage sur une machine cliente (ici xmg), on précisera l’IP d'un serveur parmi les nœuds (ici node).

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 :

sudo wget -q -O- 'https://download.ceph.com/keys/release.asc' | sudo apt-key add -
sudo echo deb https://download.ceph.com/debian-jewel/ jessie main | sudo tee /etc/apt/sources.list.d/ceph.list
sudo apt-get update && sudo apt-get install ceph-deploy

Puis ceux pour les nodes :

sudo apt-get install ntp 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 |sudo 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 -i /home/cephfs/.ssh/id_rsa.pub cephfs@ceph2
ssh-copy-id -i /home/cephfs/.ssh/id_rsa.pub cephfs@ceph3
ssh-copy-id -i /home/cephfs/.ssh/id_rsa.pub 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
  • ceph.conf contient la configuration du cluster
  • ceph-deploy-ceph.log est le fichier de journalisation qui contient les sorties des commandes exécuté par ceph-deploy
  • ceph.mon.keyring est la clé secrête utilisé pour communiquer avec tout le cluster

Si l'on utilise un système de fichier ext4 il est nécessaire de renseigner les paramètres ci-dessous :

nano ceph.conf

Rajouter ces lignes à la fin du fichier :

osd_max_object_name_len = 256
osd_max_object_namespace_len = 64

Puis on installe les outils clients pour que les serveurs puissent interagir avec le superviseur :

ceph-deploy install ceph1 ceph2 ceph3 ceph4

Partager les informations et clés d'authentification entre les machines. Cela peut être utile pour le monitoring:

ceph-deploy mon create-initial

On déclare les partitions qui vont être utilisé par le stockage :

ceph-deploy osd prepare ceph2:/var/lib/ceph/osd ceph3:/var/lib/ceph/osd ceph4:/var/lib/ceph/osd

Puis on les actives :

ceph-deploy osd activate ceph2:/var/lib/ceph/osd ceph3:/var/lib/ceph/osd ceph4:/var/lib/ceph/osd

Partager les configurations :

ceph-deploy admin ceph1 ceph2 ceph3 ceph4

Pour utiliser correctement le système de fichier, il faut déclarer un serveur qui détiendra les méta-datas:

ceph-deploy mds create ceph2

Ces méta-data sont très importante car elles permettent de localiser la donnée stocké dans le cluster.

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      <- ça semble fonctionner
            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

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 notre machine cliente xmg.

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 ceph2:/ /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:/   24G   18G   24G   75% /mnt/ceph