Ceph 
Ceph est un outil de stockage distribué.
Prérequis
À remplir, entre autre, avoir le hostname et l'ip de chaque machine dans le /hosts de chaque machine.
Installation
Debian
À remplir
Centos 7
Pour installer ceph sous centos, il faut d'abord ajouter les dépôts correspondants.
yum install -y epel-release rpm -Uhv http://download.ceph.com/rpm-luminous/el7/noarch/ceph-release-1-1.el7.noarch.rpm yum install -y ceph ceph-mon ceph-mds ceph-osd ceph-mgr
Configuration des moniteurs
Étape 1 : sur le moniteur principal
D'abord, il faut générer un fsid :
uuidgen
Puis écrire le fichier /etc/ceph/ceph.conf ainsi :
[global] fsid = <fsid> mon initial members = <hostname> mon host = <ip> public network = 192.168.1.0/24 cluster network = 192.168.1.0/24 auth cluster required = cephx auth service required = cephx auth client required = cephx osd journal size = 2048 osd pool default size = 3 osd pool default min size = 2 osd pool default pg num = 333 osd pool default pgp num = 333 osd crush chooseleaf type = 1 [osd] keyring = /var/lib/ceph/osd/ceph-$id/keyring bluestore_cache_size = 104857600 bluestore_cache_size_hdd = 104857600 bluestore_cache_size_ssd = 104857600 bluestore_cache_kv_max = 103809024 [mon] mgr initial modules = dashboard [mon.<hostname>] host = <hostname> mon_addr = <ip>:6789
Où :
<fsid>est le résultat de la commandeuuidgenprécédente<hostname>est lehostnamede la machine<ip>est l'ip de la machine
On peut ensuite générer les clefs de chiffrements pour ceph :
mkdir -p "/var/lib/ceph/bootstrap-osd/" "/etc/ceph/" ceph-authtool --create-keyring /tmp/ceph.mon.keyring --gen-key -n mon. --cap mon 'allow *' ceph-authtool --create-keyring /etc/ceph/ceph.client.admin.keyring --gen-key -n client.admin --cap mon 'allow *' --cap osd 'allow *' --cap mds 'allow *' --cap mgr 'allow *' ceph-authtool --create-keyring /var/lib/ceph/bootstrap-osd/ceph.keyring --gen-key -n client.bootstrap-osd --cap mon 'profile bootstrap-osd' ceph-authtool /tmp/ceph.mon.keyring --import-keyring /etc/ceph/ceph.client.admin.keyring ceph-authtool /tmp/ceph.mon.keyring --import-keyring /var/lib/ceph/bootstrap-osd/ceph.keyring
On peut terminer la configuration
monmaptool --create --add $(hostname) <ip> --fsid <fsid> /tmp/monmap chown ceph /tmp/ceph.mon.keyring /tmp/monmap mkdir -p /var/lib/ceph/mon/ceph-$(hostname) chown -R ceph:ceph /var/lib/ceph sudo -u ceph ceph-mon --mkfs -i $(hostname) --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring touch /var/lib/ceph/mon/ceph-$(hostname)/done chown -R ceph:ceph /var/lib/ceph
Où, encore une fois :
<fsid>est le résultat de la commandeuuidgenprécédente<hostname>est lehostnamede la machine
Enfin, on peut démarrer le service ceph, et l'ajouter aux services de démarrage de la machine :
systemctl start ceph-mon@$(hostname) systemctl enable ceph-mon@$(hostname)
On peut vérifier l'état de ceph via la commande :
ceph status
Ou, en plus court :
ceph -s
Il faut enfin copier les certificats sur toutes les autres machines:
scp /etc/ceph/* <machine>:/etc/ceph/ scp /var/lib/ceph/bootstrap-osd/ceph.keyring <machine>:/var/lib/ceph/bootstrap-osd/ceph.keyring
Et enfin, redémarrer le moniteur :
sudo systemctl restart ceph-mon@$(hostname)
Étape 2 : sur chaque autre machine moniteur
On peut ensuite configurer un moniteur secondaire ainsi :
mkdir -p /var/lib/ceph/mon ceph auth get mon. -o /tmp/auth ceph mon getmap -o /tmp/monmap ceph-mon -i $(hostname) --mkfs --monmap /tmp/monmap --keyring /tmp/auth touch /var/lib/ceph/mon/ceph-$(hostname)/done chown -R ceph:ceph /var/lib/ceph
Et enfin démarrer et activer le service au démarrage :
systemctl start ceph-mon@$(hostname) systemctl enable ceph-mon@$(hostname)
Étape 3 : sur le moniteur principal
On peut maintenant compléter le fichier de configuration /etc/ceph/ceph.conf en y ajoutant à la fin du fichier :
[mon.<hostname2>] host = <hostname2> mon_addr = <ip2>:6789 [mon.<hostname3>] host = <hostname3> mon_addr = <ip3>:6789 [mds.<hostname>] host = <hostname> [mds.<hostname2>] host = <hostname2> [mds.<hostname3>] host = <hostname3> [osd.0] host = <hostname> [osd.1] host = <hostname2> [osd.2] host = <hostname3> [osd.3] host = <hostname4>
Où :
<hostname>est le hostname du moniteur principal<hostname2>et<hostname3>sont les moniteurs secondaires<ip2>et<ip3>sont les ip des moniteurs secondaires<hostname4>est l'hostname d'une machine non-moniteur.
Notons qu'on peut facilement adapter ce fichier de configuration à n'importe quel nombre de moniteurs et OSD (à conditions que l'on garde un nombre impair).
Configuration des OSD
Étape 1 : sur toutes les machines
Dans l'ordre des machines telles que déclarées dans le fichier de configuration /etc/ceph/ceph.conf, éxecuter :
sudo ceph-volume lvm create --data /dev/<disk> sudo ID=<id> sudo systemctl enable "ceph-osd@$ID" sudo systemctl start "ceph-osd@$ID"
Où :
<disk>est le device sur lequel on veut créer un lvm, par exemplesdbouvdc<id>est l'indice de la machine dans le fichier de configuration,<hostname>auraid=0,<hostname2>auraid=1etc.- encore une fois si on a une erreur de ce style "stderr: Physical volume '/dev/vdb' is already in volume group" lors de l'exécution de la commande ceph-colume create, utiliser la commande vgremove -f
, de manière plus générale un ptit "vgdisplay" affiche les volume groups.
Pour vérifier que tout a fonctionné, on peut lancer sur les machines :
ceph osd tree ceph osd status ceph status
Étape 2 : Sur une machine monitor
On peut finalement créer le pool rbd :
sudo ceph osd pool create rbd 128 128 sudo ceph osd pool ls
Et si l'on veut s'assurer que tout fonctionne :
sudo rbd create test --size=10M rbd list rbd remove test
Installation du dashboard
Étape 1 : Sur chacun des moniteurs
sudo mkdir -p "/var/lib/ceph/mgr/ceph-$(hostname)" sudo ceph auth get-or-create "mgr.$(hostname)" mon 'allow profile mgr' osd 'allow *' mds 'allow *' > "/var/lib/ceph/mgr/ceph-$(hostname)/keyring" sudo chown -R ceph:ceph /var/lib/ceph sudo systemctl enable "ceph-mgr@$(hostname)" sudo systemctl start "ceph-mgr@$(hostname)"
Étape 2 : Sur une seule machine
ceph mgr module enable dashboard
ceph mgr module ls
ceph mgr services
On peut alors se connecter sur le port 7000 d'une des machines "manager" avec un navigateur pour accéder au dashboard.
Déploiement du MDS
Étape 1 : Sur les trois machines déclarées comme MDS dans le fichier de configuration
sudo mkdir -p /var/lib/ceph/mds/ceph-$(hostname) sudo ceph-authtool --create-keyring /var/lib/ceph/mds/ceph-$(hostname)/keyring --gen-key -n mds.$(hostname) sudo ceph auth add mds.$(hostname) osd "allow rwx" mds "allow" mon "allow profile mds" -i /var/lib/ceph/mds/ceph-$(hostname)/keyring sudo chown -R ceph:ceph /var/lib/ceph sudo systemctl enable "ceph-mds@$(hostname)" sudo systemctl start "ceph-mds@$(hostname)"
Étape 2 : Sur une des machines
sudo ceph osd pool create cephfs_data 128 sudo ceph osd pool create cephfs_metadata 56 sudo ceph osd pool application enable rbd cephfs sudo ceph fs new cephfs cephfs_metadata cephfs_data
À partir de ce moment, cephFS est installé.
Utilisation
Uno fois Ceph installé en suivant les instructions précédentes, on peut monter le stockage ceph sur n'importe quelle machine du réseau.
Les commandes plus bas montreront comment monter le stockage dans /mnt/cephfs, cependant ce chemin peut être remplacé par n'importe quelle autre.
Sur les machines Monitor, OSD ou MDS
Pour accéder au stockage Ceph depuis une des machines Monitor, OSD ou MDS, il suffit d'installer le plugin ceph de fuse, et de monter le répertoire :
sudo yum install -y ceph-fuse
sudo mkdir /mnt/cephfs
sudo mount -t fuse.ceph -o "ceph.client_mountpoint=/,defaults,_netdev,auto" none /mnt/cephfs
Créer un fichier dans /mnt/cephfs/ le rendra automatiquement disponible dans les autres machines du réseau Ceph.
Sur une autre machine du réseau
Pour accéder au stockage Ceph depuis une machine indépendante, mais sur le même réseau, il faut d'abord installer le plugin ceph de fuse :
sudo yum install -y epel-release sudo rpm -Uhv http://download.ceph.com/rpm-luminous/el7/noarch/ceph-release-1-1.el7.noarch.rpm sudo yum install -y ceph-fuse
Créons ensuite les dossiers nécessaires :
sudo mkdir -p /etc/ceph/ sudo mkdir -p /var/lib/ceph/bootstrap-osd
On doit ensuite copier la configuration et les clefs depuis un des moniteurs vers la machine. À exécuter sur le moniteur principal :
scp /etc/ceph/* <machine>:/etc/ceph/ scp /var/lib/ceph/bootstrap-osd/ceph.keyring <machine>:/var/lib/ceph/bootstrap-osd/ceph.keyring
Où <machine> est l'adresse IP de la machine sur laquelle on veut accéder au stockage Ceph.
Enfin, sur cette dernière :
sudo mkdir /mnt/cephfs
sudo mount -t fuse.ceph -o "ceph.client_mountpoint=/,defaults,_netdev,auto" none /mnt/cephfs