« Ceph » : différence entre les versions

De Justine's wiki
Aller à la navigation Aller à la recherche
Aucun résumé des modifications
Aucun résumé des modifications
Ligne 19 : Ligne 19 :
Je suis sur Debian.
Je suis sur Debian.


== Installation ==
= Installation =
[https://docs.ceph.com/en/pacific/cephadm/install/#bootstrap-a-new-cluster doc]
[https://docs.ceph.com/en/pacific/cephadm/install/#bootstrap-a-new-cluster doc]


Ligne 35 : Ligne 35 :
AJOUTER LES PORTS à OUVRIR
AJOUTER LES PORTS à OUVRIR


=== Avant tout : logs ===
== Avant tout : logs ==
Ceph peut être fort casse-pieds, et n'est pas explicite dans ses erreurs.
Ceph peut être fort casse-pieds, et n'est pas explicite dans ses erreurs.


Ligne 41 : Ligne 41 :
  ceph log last cephadm
  ceph log last cephadm


=== Mise en place avec ceph-adm ===
== Mise en place avec ceph-adm ==
Je pars de ma machine ceph-mon.
Je pars de ma machine ceph-mon.


Ligne 55 : Ligne 55 :
  ./cephadm install ceph-common
  ./cephadm install ceph-common


=== Initialisation du cluster ===
== 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.
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
  sudo cephadm --docker bootstrap --mon-ip 192.168.1.208
Ligne 62 : Ligne 62 :
  ssh-copy-id -f -i /etc/ceph/ceph.pub root@host
  ssh-copy-id -f -i /etc/ceph/ceph.pub root@host


=== Utilisation du shell Ceph ===
== 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:  
Le shell Ceph est un shell bash contenant toutes les commandes nécessaires. Pour y accéder, il suffit de faire:  
  cephadm shell
  cephadm shell


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


Ligne 72 : Ligne 72 :
  sudo ceph orch host add ceph-mon.sq.lan
  sudo ceph orch host add ceph-mon.sq.lan
...Pour chaque hôte.
...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.
Je peux enfin les lister.
Ligne 83 : Ligne 77 :
cephuser@ceph-mon:~$ sudo ceph orch host ls
cephuser@ceph-mon:~$ sudo ceph orch host ls
HOST              ADDR          LABELS  STATUS   
HOST              ADDR          LABELS  STATUS   
ceph-mon.sq.lan  192.168.1.208 mon/osd         
ceph-mon.sq.lan  192.168.1.208          
ceph-osd1.sq.lan  192.168.1.209 mon/osd         
ceph-osd1.sq.lan  192.168.1.209          
ceph-osd2.sq.lan  192.168.1.210 mon/osd   
ceph-osd2.sq.lan  192.168.1.210    
</nowiki>
</nowiki>


=== Infos sur les daemons d'un host ===
== Supprimer des hôtes ==
sudo ceph orch ps monhote
 
=== Supprimer des hôtes, des labels ===
Je peux supprimer un hôte en ligne:
Je peux supprimer un hôte en ligne:
  ceph orch host drain monhote
  ceph orch host drain monhote
Ligne 101 : Ligne 92 :
  ceph orch host rm <host> --offline --force
  ceph orch host rm <host> --offline --force
...au risque de perdre des données.
...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).
  ceph orch daemon add osd ceph-mon.sq.lan:debian-vg/CephLV
  ceph orch daemon add osd ceph-mon.sq.lan:debian-vg/CephLV
Ligne 113 : Ligne 101 :
  ceph -s
  ceph -s


=== Dashboard ===
== Dashboard ==
Ceph dispose d'un dashboard web. Je vais le déployer sur mon ceph-mon.
Ceph dispose d'un dashboard web. Je vais le déployer sur mon ceph-mon.
  ceph mgr module enable dashboard
  ceph mgr module enable dashboard
Ligne 183 : Ligne 171 :
Je vais mettre ce montage dans le fstab pour ne pas le perdre.
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
  192.168.1.208:6789:/ /data ceph name=swarm,noatime,_netdev 0 2
= Gestion du cluster =
== Labels ==
Les labels sont des tags sous forme libre, que l'on peut appliquer aux hôtes. Il peuvent être ajoutés à la création de l'hôte ou après:
<nowiki>
ceph orch host add my_hostname --labels=my_label1
ceph orch host add my_hostname --labels=my_label1,my_label2
ceph orch host label add my_hostname my_label
#Retirer un label
ceph orch host label rm my_hostname my_label
</nowiki>
Il existe 3 labels spéciaux qui ont une signification pour ceph:
* _no_schedule: Do not schedule or deploy daemons on this host.
* _no_autotune_memory: Do not autotune memory on this host.
* _admin: Distribute client.admin and ceph.conf to this host. Appliqué automatiquement au premier hôte du cluster.
== Rôles dans le cluster ==
* [https://docs.ceph.com/en/latest/cephadm/host-management/ Doc]
=== Lister les hôtes et leur daemons ===
Je peux lister mes hôtes
sudo ceph orch host ls
Et voir les daemons d'un hôte
sudo ceph orch ps monhote
=== Mode maintenance ===
Je peux placer un hôte en mode maintenance, ce qui va placer tous ses daemons en mode maintenance:
ceph orch host maintenance enter <hostname> [--force]
ceph orch host maintenance exit <hostname>
=== Gestion des monitors ===
* [https://docs.ceph.com/en/latest/%5C/cephadm/services/mon/ Doc]
Ceph modifie lui-même le nombre de monitors en fonction de la taille du cluster, d'après la documentation. Plus le cluster grandit, et plus on ajoute de monitors. Dans mon cas, mon cluster à 3 machines n'as qu'un seul monitor. Si toutes nos machines sont dans le même subnet, il n'y a pas de gestion à faire.
On peut désactiver ce comportement avec:
ceph orch apply mon --unmanaged
Ce qui permet d'ajouter à la main un monitor avec:
ceph orch daemon add mon *<host1:ip-or-network1>
==== Gestion réseau des monitors ====
J'en ai marre d'écrire. La doc dit:
To designate a particular IP subnet for use by ceph monitor daemons, use a command of the following form, including the subnet’s address in CIDR format (e.g., 10.1.2.0/24):
ceph config set mon public_network *<mon-cidr-network>*
For example:
ceph config set mon public_network 10.1.2.0/24
Cephadm deploys new monitor daemons only on hosts that have IP addresses in the designated subnet.
You can also specify two public networks by using a list of networks:
ceph config set mon public_network *<mon-cidr-network1>,<mon-cidr-network2>*
For example:
ceph config set mon public_network 10.1.2.0/24,192.168.0.1/24
=== Gestion des serveurs MDS ===

Version du 19 avril 2022 à 14:02

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 (OSD)

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 peux enfin les lister.

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

Supprimer des hôtes

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.

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

Gestion du cluster

Labels

Les labels sont des tags sous forme libre, que l'on peut appliquer aux hôtes. Il peuvent être ajoutés à la création de l'hôte ou après:

ceph orch host add my_hostname --labels=my_label1
ceph orch host add my_hostname --labels=my_label1,my_label2

ceph orch host label add my_hostname my_label

#Retirer un label
ceph orch host label rm my_hostname my_label

Il existe 3 labels spéciaux qui ont une signification pour ceph:

  • _no_schedule: Do not schedule or deploy daemons on this host.
  • _no_autotune_memory: Do not autotune memory on this host.
  • _admin: Distribute client.admin and ceph.conf to this host. Appliqué automatiquement au premier hôte du cluster.

Rôles dans le cluster

Lister les hôtes et leur daemons

Je peux lister mes hôtes

sudo ceph orch host ls

Et voir les daemons d'un hôte

sudo ceph orch ps monhote

Mode maintenance

Je peux placer un hôte en mode maintenance, ce qui va placer tous ses daemons en mode maintenance:

ceph orch host maintenance enter <hostname> [--force]
ceph orch host maintenance exit <hostname>

Gestion des monitors

Ceph modifie lui-même le nombre de monitors en fonction de la taille du cluster, d'après la documentation. Plus le cluster grandit, et plus on ajoute de monitors. Dans mon cas, mon cluster à 3 machines n'as qu'un seul monitor. Si toutes nos machines sont dans le même subnet, il n'y a pas de gestion à faire.

On peut désactiver ce comportement avec:

ceph orch apply mon --unmanaged

Ce qui permet d'ajouter à la main un monitor avec:

ceph orch daemon add mon *<host1:ip-or-network1>

Gestion réseau des monitors

J'en ai marre d'écrire. La doc dit: To designate a particular IP subnet for use by ceph monitor daemons, use a command of the following form, including the subnet’s address in CIDR format (e.g., 10.1.2.0/24):

ceph config set mon public_network *<mon-cidr-network>*

For example:

ceph config set mon public_network 10.1.2.0/24

Cephadm deploys new monitor daemons only on hosts that have IP addresses in the designated subnet.

You can also specify two public networks by using a list of networks:

ceph config set mon public_network *<mon-cidr-network1>,<mon-cidr-network2>*

For example:

ceph config set mon public_network 10.1.2.0/24,192.168.0.1/24

Gestion des serveurs MDS