CEPH a la main

Préalable

Juste ici quelques notes pour installer et gérer la technologie de stockage répartie ceph. Cette technologie est surtout utiliser conjointement avec proxmox afin de stocker les environnements de machines virtuelles. On peux cependant monter 'a la main' ce systeme et le superviser avec le service de dashboard intégré ou avec l'outils zabbix.

Il faut au préalable :

  • 3 serveurs (ou bien plus) avec des disques supplémentaires
  • un ou plusieurs switch supportant les jumbo frames (c'est mieux)
  • installation de ubuntu server sur le 1er disque

Installation

a faire sur l’ensemble des serveurs

# apt install ceph
* sudo useradd -d /home/ceph -m ceph
* sudo passwd ceph (notez bien le mot de passe de cet utilisateur sa pourrais servir un jour :D)
* echo "ceph ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/ceph
* sudo chmod 0440 /etc/sudoers.d/ceph

L’ensemble de l’infrastructure doit-être placé dans les fichiers /etc/hosts afin de s’affranchir d’un éventuel problème de DNS

Les moniteurs (monitor)

C’est la première étape obligatoire lors du déploiement d’une grappe de serveurs Ceph. Ils permettent de garder les serveurs synchronisés entre eux. Les moniteurs forment un quorum pour être sûr de ne pas être isolés, il est donc obligatoire d’en avoir un nombre impair. Pour initialiser nos serveurs, nous avons besoin de trois fichiers présents sur chacun des serveur :

  • /etc/ceph/ceph.conf ;
  • /etc/ceph/ceph.client.admin.keyring ;
  • /etc/ceph/ceph.mon.keyring
  • /etc/ceph/monmap

On commence par générer l’uuid permettant de référencer ceph, son identifiant en somme.

#uuidgen
 92749530-d9af-4226-bfe0-ccc79a689a66
Le fichier de configuration

Le fichier défini le fsid (l’uuid du cluster), le réseau du cluster, le réseau d’accès au stockage (peut être le même mais conseillé de mettre sur une interface réseau différente). On défini aussi les noeuds des moniteurs.

/etc/ceph/ceph.conf[global]
# specify cluster network for monitoring
cluster network = 192.168.0.0/24
# specify public network
public network = 10.0.0.0/24
# specify UUID genarated above
fsid = 92749530-d9af-4226-bfe0-ccc79a689a66
# specify IP address of Monitor Daemon
mon host = 10.0.0.1 10.0.0.2 10.0.0.3
# specify Hostname of Monitor Daemon
mon initial members = node01
# allow to delete pools
osd pool default crush rule = -1
mon allow pool delete = true
# mon.(Node name)
[mon.node01]
# specify Hostname of Monitor Daemon
host = node01
# specify IP address of Monitor Daemon
mon addr = 10.0.0.51
Création de la clé d’administration

On va créer une clef administrateur qui permettra de communiquer avec les moniteurs pour exécuter des commandes avec l’outil en ligne de commande ceph :

# ceph-authtool --create-keyring /etc/ceph/ceph.client.admin.keyring --gen-key -n client.admin --set-uid=0 --cap mon 'allow *' --cap osd 'allow *' --cap mds 'allow *'
Création de la clé de monitor

On va créer une clef commune à tous les moniteurs de notre grappe de serveurs pour qu’ils puissent communiquer entre eux. Puis on ajoute notre clef administrateur dans le trousseau de clefs, afin de pouvoir communiquer avec un moniteur.

# ceph-authtool --create-keyring /etc/ceph/ceph.mon.keyring --gen-key -n mon. --cap mon 'allow *'
# ceph-authtool /etc/ceph/ceph.mon.keyring --import-keyring /etc/ceph/ceph.client.admin.keyring
Création de la clé pour les osd

Cette clé permettra aux OSD de rejoindre le cluster ceph. Il faut la généré des le départ car elle est aussi essentiel que la clé de l'utilisateur admin.

# ceph-authtool --create-keyring /var/lib/ceph/bootstrap-osd/ceph.keyring --gen-key -n client.bootstrap-osd --cap mon 'profile bootstrap-osd' --cap mgr 'allow r'
# ceph-authtool /etc/ceph/ceph.mon.keyring --import-keyring /var/lib/ceph/bootstrap-osd/ceph.keyring
Ajout d’un monitor

Il faut copier sur les noeuds qui font office de monitor les fichiers généré précédemment :

  • /etc/ceph/ceph.conf
  • /etc/ceph/ceph.mon.keyring
  • /etc/ceph/ceph.client.admin.keyring
  • /etc/ceph/monmap
# ceph-mon --cluster ceph --mkfs -i $NODENAME --monmap /etc/ceph/monmap --keyring /etc/ceph/ceph.mon.keyring
# chown -R ceph. /etc/ceph /var/lib/ceph/mon
# ceph auth get mon. -o /etc/ceph/ceph.mon.keyring
# systemctl enable --now ceph-mon@$NODENAME
# ceph mon enable-msgr2

Le manager

Le manager est obligatoire sur l’un des nœuds.

# create a directory for Manager Daemon
# directory name ⇒ (Cluster Name)-(Node Name)
mkdir /var/lib/ceph/mgr/ceph-$NODENAME
# create auth key
ceph auth get-or-create mgr.$NODENAME mon 'allow profile mgr' osd 'allow *' mds 'allow *'
ceph auth get-or-create mgr.$NODENAME | tee /etc/ceph/ceph.mgr.admin.keyring
cp /etc/ceph/ceph.mgr.admin.keyring /var/lib/ceph/mgr/ceph-$NODENAME/keyring
chown ceph. /etc/ceph/ceph.mgr.admin.keyring
chown -R ceph. /var/lib/ceph/mgr/ceph-$NODENAME
systemctl enable --now ceph-mgr@$NODENAME

Il est bon d’en mettre un second en secours (d’un point de vue mise à jour, les serveurs seront redémarrés…). Les commandes ci-dessus sont donc à faire sur le serveur de backup.

dashboard (option)

Plutot que d'utiliser la ligne de commande pourquoi avoir une interface web permettant de monitorer le status du cluster ? (proxmox l'intègre dans son interface a sa facon)

La permiere etape est donc d'installer et d'activer le module du manager

# apt install ceph-mgr-dashboard
# ceph mgr module enable dashboard

on creer ensuite un fichier contenant le mot de passe de l'utilisateur qui aura les droits d'administration

(root)# echo "<mon mot de passe>" > /root/pass.txt

on genere un certificat auto-signé et on creer l'utilisateur 'admin' (par exemple)

# ceph dashboard create-self-signed-cert
# ceph dashboard ac-user-create admin -i /root/pass.txt administrator

l'acces se fait sur https://<ip du manager actif>:8443

Les OSD (disques) au format bluestore

il faut sur le serveur ou il y a les osd

  • /etc/ceph.conf
  • /var/lib/ceph/bootstrap-osd/ceph.keyring

Il reste ensuite a faire dans l’ordre des osd que l'on désire :

# wipefs -a /dev/$XXXX
# ceph-volume lvm create –data /dev/$XXX

(option) rbd ceph

coté serveur

Il faut creer un pool contenant l'acces en mode 'block', on lui donne un nom et un nombre de PG (placement group qui se calcule selon le nombre d'hote et d'osd)

# ceph osd pool create <nom_du_pool> <pg_num>

par default l'autoscalling est activé pour chaque nouveau pool.

coté client

(option) cephFS

cephFS coté serveur

il faut creer un service mds permettant de gerer le cephfs au travers du cluster :

# mkdir /var/lib/ceph/mds/ceph-$NODENAME
# ceph auth get-or-create mds.$NODENAME mon 'profile mds' mgr 'profile mds' mds 'allow *' osd 'allow *' > /var/lib/ceph/mds/ceph-$NODENAME/keyring

on crée ensuite 2 pool (data + metadata) nécessaire à cephfs

# ceph osd pool create cephfs_data <pg_num>
# ceph osd pool create cephfs_metadata <pg_num>

on creer ensuite le filesystem

# ceph fs new <fs_name> <metadata_pool_name> <data_pool_name>
# ceph fs ls

on verifie que le service mds est actif et gere bien le filesystem.

# ceph mds stat
cephFS coté client

Afin de pouvoir acceder a un pool cephfs il faut creer un utilisateur et lui attribuer les bon droits d'accès sur l'un des serveurs ceph :

ceph-authtool --create-keyring /etc/ceph/ceph.client.cephfsUser.keyring --gen-key -n client.cephfsUser

editer ensuite le fichier generer dans /etc/ceph et rajouter les lignes de facon a rajouter les droits d'acces suivant les modules :

[client.cephfsUser]
 key = xxxxxxxxx
 caps mds = "allow"
 caps mon = "allow r"
 caps osd = "allow rwx tag <fs_name> data=<metadata_pool_name>, allow rwx pool=<data_pool_name>"

lancer ensuite la commande pour rajouter l'utilisateur avec ses droits basé sur le fichier :

ceph auth import -i ceph.client.cephfsUser.keyring

verifier que l'utilisateur est bien présent :

ceph auth ls

Coté 'client' il faut donc 'monter' le systeme de fichier. Sous linux un simple mount avec le fichier de keyring et l'utilisateur permet d'acceder à l'espace de stockage. Sous Windows il faut passer par une application qui s'occupera de creer un nouveau disque, cette application s’appelle dokan il faut installer la version 1.x et la version 2.x (toujours en developpement mais fonctionne sous windows 10). on lance ensuite la commande :

C:\Programm Files\Ceph\bin\ceph-dokan.exe -l <lettre du lecteur> --name client.<nom d'utilisateur ceph ayant access a cephfs>

et l'espace de stockage apparait alors dans l'explorateur de fichier.

Commandes de gestions

Utilisateurs

ajouter un utilisateur
ceph-authtool --create-keyring /etc/ceph/ceph.client.<user>.keyring --gen-key -n client.<user>
ceph auth import -i /etc/ceph/ceph.client.<user>.keyring
supprimer un utilisateur
ceph auth del client.<nom du user>

OSD

ajouter un osd
ceph-volume lvm create --data /dev/XXXX
supprimer un osd
ceph osd out <id>
systemctl stop ceph-osd@<id>
ceph osd purge <id> --yes-i-really-mean-it
ceph osd crush remove <id>
changer l'ip d'un monitor

il faut pour cela modifier le fichier monmap et reinjecter la configuration du cluster de moniteur sur chacun des noeuds ou il y a un moniteur

MDS

supprimer un mds :
systemctl stop ceph-mds@$NODENAME
systemctl disable ceph-mds@NODENAME
rm -rf /var/lib/ceph/mds/ceph-$NODENAME

MGR

ajouter un mgr
supprimer un mgr
systemctl stop ceph-mgr@$NODENAME
systemctl disable ceph-mgr@NODENAME
rm -rf /var/lib/ceph/mgr/ceph-$NODENAME
activer un module (zabbix)

Les modules doivent-etre installé et configuré de manière identique sur l’ensemble des serveurs ou il y a un manager.

# apt install zabbix-agent

le paramétrage se fait avec des clés de configuration :

# ceph zabbix config-set zabbix_host <ip serveur zabbix>
# ceph zabbix config-set identifier <identifiant de supervision>
# ceph zabbix config-set zabbix_port 10051 (default)
# ceph zabbix config-show
# ceph mgr module enable zabbix

template coté serveur : https://raw.githubusercontent.com/ceph/ceph/master/src/pybind/mgr/zabbix/zabbix_template.xml

Projet : Flipper - Réflexions

Genèse Après avoir construit une borne d'arcade avec les enfants, il semble que l'étape suivante soit le flipper (ou plus communément appelé le pincab, flipper étant le nom du dauphin de la série télé éponyme). Il faut tous d'abord (je pense) avoir un retour sur l'historique de ces machines, pour  […]

Lire la suite

Projet : Borne d'arcade - Les grandes étapes

Recherches des idées et des HOW-TO La première chose à faire à été de regarder si sur Internet on trouve des tutoriels, de l’aide ou des personnes ayant déjà réalisé ce genre de chose. Avec la modernité on trouve maintenant des vidéos ‘tutoriels’ pas vraiment le support idéal pour suivre un plan ou  […]

Lire la suite

Démystification des ROMS MAME

Article trouvé sur le net et traduit de l’anglais afin de comprendre ou/quoi/et comment télécharger les ROMS d’arcades afin de les faires tourner sur un émulateur.

Lire la suite

Qu'est-ce que MAME

Mame (Multiple Arcade Machine Emulator) est un émulateur de jeux d’arcade, c’est à dire un programme qui reproduit le plus fidèlement possible un jeu d’arcade sur le PC. Mame a été créé début 1997 par Nicolas Salmoria. L’émulateur est des le départ open source, c’est à dire que tout le monde peut  […]

Lire la suite

Projet : Borne d'arcade - La génèse

Objectif construire une borne d’arcade avec les enfants pour que la famille (et les voisins) s’amuse tout en remplaçant le meuble de stockage “apéro/digestif”. Joindre l’utile à l’agréable en somme. La section 'Arcade' du site est découpé en 3 grandes partie. Le préambule explique un peu l'histoire  […]

Lire la suite

Haut de page