HowtoCeph: Refaire procédure d'installation (en cours)

This commit is contained in:
Alexis Ben Miloud--Josselin 2024-04-15 18:31:18 +02:00
parent f2ffdd9bb9
commit 2c264f1f6a

View file

@ -24,258 +24,45 @@ Un _cluster_ Ceph est constitué de démons `osd` pour chaque disque, de 3 démo
Un client peut accéder à un _cluster_ Ceph : en mode bloc (RBD), en mode fichers (CephFS) ou en mode HTTP REST compatible Amazon S3 (RGW). Ces trois modes font appel à RADOS via `librados`.
# Monter un _cluster_ Ceph
# Déployer un _cluster_ Ceph
On cherche à créer l'architecture suivante où un client interagit avec un _cluster_ Ceph :
Cette section montre comment déployer un _cluster_ Ceph en suivant [la méthode manuelle pour Ceph Pacific](https://docs.ceph.com/en/pacific/install/manual-deployment/) sur Debian 12. Dans les grandes lignes, il faut :
+-----[ cluster Ceph ]------+
| +-------+ |
| +-> | ceph1 | |
| | +-------+ |
+-------+ | +-------+ | +-------+ |
| cephc | <-> | | cephm | <-+-> | ceph2 | |
+-------+ | +-------+ | +-------+ |
| | +-------+ |
| +-> | ceph3 | |
| +-------+ |
+---------------------------+
1. ajouter un premier moniteur et un _manager_ ;
* `ceph[1-3]` sont les serveurs Ceph à proprement parler qui hébergent et servent les données.
* `cephc` est une machine cliente, qui utilisera les données servies par le _cluster_ Ceph.
* `cephm` est le nœud maitre ou nœud admin, qui déploie la configuration sur les serveurs Ceph.
1. ajouter deux OSD ;
> Le nœud admin peut aussi être un des serveurs Ceph. Par exemple, `cephm` peut aussi être `ceph1`.
1. ajouter les moniteurs et _managers_ restants ;
## Préparation
1. ajouter les OSD restants.
On suppose ici que :
## Ajouter un premier moniteur
- chaque machine a été installée sous Debian 9 ;
- `cephm` à un accès SSH à `ceph[123c]`.
**TODO**
Pour la configuration SSH, on aura, pour cephm:
### Ajouter un _manager_
~~~
$ cat ~/.ssh/config
Hostname ceph1
Host ceph1
User cephuser
Il est recommandé d'ajouter un _manager_ sur chaque machine où un moniteur est présent.
Hostname ceph2
Host ceph2
User cephuser
**TODO**
Hostname ceph3
Host ceph3
User cephuser
~~~
## Ajouter deux OSD
L'utilisateur `cephuser` doit pouvoir exécuter la commande `sudo` sans mot de passe.
Il est préférable d'ajouter les premiers OSD depuis une machine différente de celle où le premier _monitor_ a été ajouté. Ça permettra de valider si l'OSD et le monitor arrivent bien à communiquer. Ajouter ensuite un autre OSD, si possible sur une autre machine, en suivant la même procédure.
> Il est peut-être nécessaire d'ajouter les machines dans le fichier `/etc/hosts` :
>
> ~~~
> X.X.X.X ceph1
> Y.Y.Y.Y ceph2
> Z.Z.Z.Z ceph3
> ~~~
**TODO**
> Seul le nœud admin à besoin de se connecter en SSH aux autres nœuds du _cluster_.
## Ajouter les moniteurs et _managers_ restants
Dans cet exemple, chaque nœud - `ceph1`, `ceph2` et `ceph3` - a un disque supplémentaire à sa disposition. Ce disque contiendra les données à stocker dans le cluster et doit être vide, sans table de partitions et être utilisé comme volume physique :
**TODO**
~~~
wipefs -a /dev/sdX
pvcreate /dev/sdX
~~~
## Ajouter les OSD restant
> `/dev/sdX` est le volume supplémentaire.
**TODO**
# Installer Ceph en mode client
## Installation
On commence par installer `ceph-deploy`, l'outil qui permet de déployer un cluster Ceph.
~~~
# apt update && apt install apt-transport-https
# wget -O /etc/apt/trusted.gpg.d/ceph.asc https://download.ceph.com/keys/release.asc
# dos2unix /etc/apt/trusted.gpg.d/ceph.asc
# chmod 644 /etc/apt/trusted.gpg.d/ceph.asc
# echo deb https://download.ceph.com/debian-luminous/ $(lsb_release -sc) main | tee /etc/apt/sources.list.d/ceph.list
# apt update && apt install ceph-deploy
~~~
> Les commandes précédentes ne sont à exécuter que sur le nœud maître.
Puis, on installe NTP sur l'ensemble des nœuds.
~~~
# apt install ntp
# timedatectl set-ntp true
~~~
> Jusqu'à indication du contraire, les commandes qui suivent sont à exécuter sur le nœud maître.
On commence par créer un dossier qui contiendra les fichiers de configuration et les clefs.
~~~
$ mkdir ceph
$ cd ceph
~~~
> On peut aussi se placer dans `/etc/ceph`.
On crée le cluster :
~~~
$ ceph-deploy new ceph1 ceph2 ceph3
~~~
Ajouter le « public_network » à la configuration de Ceph :
~~~
$ cat <<eof >>ceph.conf
public_network = X.X.X.0/24
eof
~~~
Si on souhaite utiliser le cluster pour y installer des VMs, il faut activer le cache RBD :
~~~
cat <<eof >>ceph.conf
[client]
rbd cache = true
eof
~~~
On installe les paquets Ceph sur les nœeuds :
~~~
$ ceph-deploy install --release luminous ceph1 ceph2 ceph3
~~~
On initialise le moniteur. Cela va créer des fichiers `*.keyring`. On copie ensuite ces fichiers sur tous les nœeuds dans `/etc/ceph` avec la commande `ceph-deploy admin. Un monitor sert à maintenir une carte de l'état du cluster.
~~~
$ ceph-deploy mon create-initial
$ ceph-deploy admin ceph0 ceph1 ceph2 ceph3
~~~
On déploie un manager. Celui-ci permet de regrouper l'état du cluster à un seul endroit.
~~~
$ ceph-deploy mgr create deb1
~~~
On crée les OSD :
~~~
$ ceph-deploy osd create --data /dev/sdX deb1
$ ceph-deploy osd create --data /dev/sdX deb2
$ ceph-deploy osd create --data /dev/sdX deb3
~~~
> On peut lancer la commande suivante pour s'assurer que le cluster fonctionne bien :
>
> ~~~
> $ ssh ceph1 sudo ceph -s | grep HEALTH_OK && echo yes || echo fail
> ~~~
On ajoute des moniteurs afin d'assurer la bonne disponibilité du cluster. Il vaut mieux avoir un nombre impair de moniteurs.
~~~
$ ceph-deploy mon add deb2
$ ceph-deploy mon add deb3
~~~
De la même manière, on ajoute des managers. Dans le cas où un manager décide de ne plus fonctionner.
~~~
$ ceph-deploy mgr create deb2
$ ceph-deploy mgr create deb3
~~~
Il ne reste qu'à créer un pool et à l'initialiser pour RBD :
~~~
# ceph osd pool create rbd 128
# ceph osd pool set rbd nodelete true
# ceph osd pool application enable rbd rbd
# rbd pool init rbd
~~~
> La seconde commande empêche la suppression du pool. Il sera impossible de le supprimer par accident (ou de le supprimer tout court).
Le cluster est prêt. On peut maintenant s'occuper du client.
## Logs
Tous les logs sont dans `/var/log/ceph`. Chaque service à ses propre log. Par exemple, pour les moniteurs on a `/var/log/ceph/ceph-mon.ceph01.log`.
## Client
L'installation du client est analogue à celle des nœuds. On install Ceph sur la machine cliente :
Debian ≥ 10 :
~~~
client# apt update
client# apt install ceph-common qemu-block-extra
~~~
Debian < 10 :
~~~
# apt install apt-transport-https
# wget https://download.ceph.com/keys/release.asc -O /etc/apt/trusted.gpg.d/ceph.asc
# echo deb https://download.ceph.com/debian-luminous/ $(lsb_release -sc) main | tee /etc/apt/sources.list.d/ceph.list
# apt update && apt install ceph-common
~~~
Depuis un nœud admin, on copie la configuration du cluster :
~~~
# ceph-deploy --overwrite-conf config push $MACHINE_CIBLE
# ceph auth export client.libvirt 2> /dev/null | ssh $USER@client 'cat - > ~/ceph.client.libvirt.keyring'
~~~
De retour sur la machine cliente, on place le fichier de configuration au bon endroit :
~~~
# cp /home/$USER/ceph.client.libvirt.keyring /etc/ceph
~~~
Par défault, Ceph passe l'utilisateur ceph.admin. On peut passer en paramètre des commandes rbd et ceph le nom et le fichier qui contient la clef de l'utilisateur. Il est plus simple d'utiliser la variable d'environnement CEPH_ARGS :
~~~
# CEPH_ARGS='-n client.libvirt -k /etc/ceph/ceph.client.libvirt.keyring'
# export CEPH_ARGS
~~~
Cet utilisateur n'a que les droits de lecture sur les informations du cluster, comme l'état de santé, et les droit de lecture et d'écriture pour le pool rbd. Il devrait donc être possible de faire :
~~~
# ceph health
# rbd create $RBD_NAME --size 1G --image-feature layering
# rbd map $RBD_NAME
~~~
Le block device devrait être disponible dans /dev/rbd/rbd/$RBD_NAME. Happy fdisk!
Si on compte utiliser le block device pour y installer une machine virtuelle, il faut aller à la section [Libvirt](#rbd-et-libvirt). Sinon, il ne reste qu'à le formater puis à le monter :
~~~
# mkfs.ext4 -m0 /dev/rbd/rbd/foo
# mkdir /mnt/ceph-block-device
# mount /dev/rbd/rbd/foo /mnt/ceph-block-device
# cat <<EOF >>/mnt/ceph-block-device/file
plain text is life
EOF
~~~
**TODO**
# Gestion des nœuds