Ceph logo

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 commande uuidgen précédente
  • <hostname> est le hostname de 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 commande uuidgen précédente
  • <hostname> est le hostname de 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 exemple sdb ou vdc
  • <id> est l'indice de la machine dans le fichier de configuration, <hostname> aura id=0, <hostname2> aura id=1 etc.
  • 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

<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