« Ceph » : différence entre les versions

De Justine's wiki
Aller à la navigation Aller à la recherche
Aucun résumé des modifications
Ligne 67 : Ligne 67 :


=== Ajouter des hosts ===
=== Ajouter des hosts ===
Lorsque l'on ajoute des hôtes, on rajoute la possibilité de faire tourner différents daemons qui viendront contribuer au cluster.
Je vais ensuite ajouter mes hôtes.
Je vais ensuite ajouter mes hôtes.
  sudo ceph orch host add ceph-mon.sq.lan
  sudo ceph orch host add ceph-mon.sq.lan
Ligne 86 : Ligne 88 :
</nowiki>
</nowiki>


=== Infos sur les daemons d'un host ===
sudo ceph orch ps monhote
=== Supprimer des hôtes, des labels ===
Je peux supprimer un hôte en ligne:
ceph orch host drain monhote
Et ensuite suivre la procédure de suppression des osd:
ceph orch osd rm status
Je peux aussi forcer la suppression d'un hôte, si il est n'est pas joignable:
ceph orch host rm <host> --offline --force
...au risque de perdre des données.
Je peux supprimer des labels:
ceph orch host label rm my_hostname my_label
=== Attacher des LV, état du cluster ===
=== Attacher des LV, état du cluster ===
Je vais désormais attacher mes LV dédiés (ils s'appellent debian-vg/CephLV).
Je vais désormais attacher mes LV dédiés (ils s'appellent debian-vg/CephLV).

Version du 19 avril 2022 à 13:26

Sources

Présentation

Wikipédia : "Ceph est une solution libre de stockage distribué (software-defined storage) très populaire qui propose trois protocoles en un avec : Bloc, Fichiers & Objet (S3). Les objectifs principaux de Ceph sont d'être complètement distribués sans point unique de défaillance, extensible jusqu'à l'exaoctet et librement disponible. Les données sont répliquées, permettant au système d'être tolérant aux pannes."

Ceph permet de disposer d'un cluster de partage de fichiers assez efficace et manageable. Il est associé à son propre FS, CephFS.

Une architecture Ceph peut contenir plusieurs rôles:

  • Une machine d'administration (ceph-mgr), où l'on installera Ceph-adm. Celle-ci servira à bootstraper les autres. Celle-ci suit les métriques du cluster et orchestre le cluster; elle fournit aussi
  • Une machine ceph-mon (monitor), qui maintient une série de maps de l'état du cluster. Celles-ci sont critiques pour que les daemon Ceph puissent se coordonner. Les monitors gèrent aussi l'authentification entre les daemons et les clients. Il en faut au moins 3 pour avoir de la redondance et de la haute dispo.
  • Des OSD (Object Storage Daemon), qui stockent les données, s'occupent des réplications et de la recovery. Il en faut au moins 3 pour avoir de la redondance et de la HA.
  • Des serveurs MDS (Metadata Server). Ils stockent les métadonnées pour CephFS. Cela permet à un système POSIX de lancer des commandes comme ls, find... sans placer une grosse charge sur les MDS.

Une seule machine peut recouvrir plusieurs rôles, notamment dans le cadre d'un lab.

Je suis sur Debian.

Installation

doc

Je vais ici passer par la méthode CephADM, qui est l'installation en mode paquet. Il existe aussi Rook, qui permet une installation sur un cluster k8s.

Outre les Prérequis hardware, les prérequis pour notre cluster sont:

  • Python 3
  • Systemd
  • Docker
  • Une synchro temporelle
  • LVM est recommandé pour gérer notre stockage. On va utiliser un lv dédié, en xfs.
  • Les machines doivent être accessibles en root, via clef SSH, sans mot de passe. depuis la machine cephadm.
  • Il vaut mieux avoir de la résolution DNS et des fichiers hosts correctement peuplés.

AJOUTER LES PORTS à OUVRIR

Avant tout : logs

Ceph peut être fort casse-pieds, et n'est pas explicite dans ses erreurs.

Le meilleur moyen de débugger est de voir les logs:

ceph log last cephadm

Mise en place avec ceph-adm

Je pars de ma machine ceph-mon.

Je récupère le script d'install:

curl --silent --remote-name --location https://github.com/ceph/ceph/raw/pacific/src/cephadm/cephadm
chmod +x cephadm

Le script d'install ajoute les repos ceph à apt, donc pas de questions à se poser ici.

Je pourrais utiliser le script tel quel, mais je vais l'installer ainsi que la dépendance ceph-common.

./cephadm add-repo --release pacific
./cephadm install
./cephadm install ceph-common

Initialisation du cluster

Toujours sur ceph-mon, je vais commencer le cluster, à commencer par le monitor. Il faut lui dire d'utiliser docker et pas podman.

sudo cephadm --docker bootstrap --mon-ip 192.168.1.208

Puis je vais ajouter la clef SSH de bootstrap sur tous mes hôtes, y compris le ceph-mon, depuis ce dernier.

ssh-copy-id -f -i /etc/ceph/ceph.pub root@host

Utilisation du shell Ceph

Le shell Ceph est un shell bash contenant toutes les commandes nécessaires. Pour y accéder, il suffit de faire:

cephadm shell

Ajouter des hosts

Lorsque l'on ajoute des hôtes, on rajoute la possibilité de faire tourner différents daemons qui viendront contribuer au cluster.

Je vais ensuite ajouter mes hôtes.

sudo ceph orch host add ceph-mon.sq.lan

...Pour chaque hôte.

Je vais ensuite leur donner à tous les rôles OSD et monitor.

sudo ceph orch host label add ceph-osd2.sq.lan mon/osd

...Pour chaque hôte.

Je vais aussi ajouter le rôle "mds" à mon ceph-mon sur le même principe.

Je peux enfin les lister.

cephuser@ceph-mon:~$ sudo ceph orch host ls
HOST              ADDR           LABELS   STATUS  
ceph-mon.sq.lan   192.168.1.208  mon/osd          
ceph-osd1.sq.lan  192.168.1.209  mon/osd          
ceph-osd2.sq.lan  192.168.1.210  mon/osd    

Infos sur les daemons d'un host

sudo ceph orch ps monhote

Supprimer des hôtes, des labels

Je peux supprimer un hôte en ligne:

ceph orch host drain monhote

Et ensuite suivre la procédure de suppression des osd:

ceph orch osd rm status

Je peux aussi forcer la suppression d'un hôte, si il est n'est pas joignable:

ceph orch host rm <host> --offline --force

...au risque de perdre des données.

Je peux supprimer des labels:

ceph orch host label rm my_hostname my_label

Attacher des LV, état du cluster

Je vais désormais attacher mes LV dédiés (ils s'appellent debian-vg/CephLV).

ceph orch daemon add osd ceph-mon.sq.lan:debian-vg/CephLV

Pour chaque hôte, depuis ma machine admin.

Puis je regarde l'état de mon cluster.

ceph -s

Dashboard

Ceph dispose d'un dashboard web. Je vais le déployer sur mon ceph-mon.

ceph mgr module enable dashboard
ceph dashboard create-self-signed-cert

Je créée un fichier contenant le mdp de mon futur compte admin (nommé dashboardpw), puis je créée un utilisateur nommé admin:

ceph dashboard ac-user-create admin -i ./dashboardpw administrator

À partir de là, les possibilités sont nombreuses. Ceph propose beaucoup de fonctionnalités très cool. Je vais essayer CephFS.

CephFS

Depuis mon ceph-mon, je vais créer un fs (destiné à mon cluster swarm, d'où son nom).

ceph fs volume create swarm_storage

Puis je vais le monter sur mes machines. La doc précise que l'on a 2 possibilités:

  • Le client FUSE : FUSE est un module du kernel servant à permettre aux users d'accéder au FS sans avoir à modifier le kernel. Pour Ceph, le FS sera donc monté dans le userspace, et pas par le kernel. Ce n'est pas la meilleure solution, mais elle a le mérite de proposer une alternative. Doc
  • Via un driver kernel dédié : comme n'importe quel FS, donc. Recommandé. doc

Je vais passer par la méthode kernel.

Prérequis

Prérequis: Les clients doivent avoir une conf minimale et un keyring. Donc, sur chaque client:

mkdir -p -m 755 /etc/ceph
ssh root@ceph-mon.sq.lan "sudo ceph config generate-minimal-conf" | sudo tee /etc/ceph/ceph.conf
chmod 644 /etc/ceph/ceph.conf

J'ai une conf minimale récupérée depuis mon node admin. Je vais ensuite récupérer un keyring pour chaque host.

ssh root@ceph-mon.sq.lan "sudo ceph fs authorize swarm_storage client.swarm / rw" | sudo tee /etc/ceph/ceph.client.swarm.keyring

Ici:

  • swarm_storage est le nom du FS créé juste avant.
  • dans client.swarm, swarm est le nom du client. C'est bien d'en avoir un. Il peut servir à plusieurs machines qui accèdent au même fs.

Bien remplacer les valeurs ! Enfin, je mets les bons droits:

chmod 600 /etc/ceph/ceph.client.swarm.keyring 

Je peux vérifier mes clients depuis mon hote ceph-adm:

ceph auth get client.swarm

Packages

Sur mes clients, je peux avoir besoin des packages Ceph. Il existe plusieurs méthodes, mais en gros, il faut utiliser les repos Ceph.

sudo apt-get install software-properties-common
sudo apt-add-repository 'deb https://download.ceph.com/debian-pacific/ {codename} main'
wget -q -O- 'https://download.ceph.com/keys/release.asc' | sudo apt-key add -

Remplacer {codename} par le codename de la version de Debian. Je peux ensuite installer cephfs-shell et ceph-common (qui est nécessaire).

Montage (mono-monitor)

Je vais monter mon fs dans /data.

mkdir /data

Ceph utilise un petit helper pour aider au montage. Je vérifie qu'il est bien présent (normalement oui si ceph-common est installé).

stat /sbin/mount.ceph

Je lance la commande.J'ai eu du mal à la trouver, celle-là... La doc est absurde.

mount.ceph 192.168.1.208:6789:/ /data -o name=swarm

(192.168.1.208 est l'IP de mon ceph_mon). Il est possible de passer plusieurs monitors en les séparant par des virgules, à tester.

Je peux ensuite m'y rendre. Je peux aussi voir dans l'interface web que j'y suis bien connectée.

fstab

Je vais mettre ce montage dans le fstab pour ne pas le perdre.

192.168.1.208:6789:/ /data ceph name=swarm,noatime,_netdev	0	2