Introduction à Ceph et son architecture
Introduction à Ceph et son architecture
Yann Dupont
CCIPL / DSIN Université de Nantes
[Link] École de stockage IN2P3 – GANIL CAEN- 12-16 juin 2017
Les données sont irremplaçables
Partie serveur
Seulement sous
Linux
(FreeBSD +- OK)
##ceph
deb [Link] jessie main
RADOS
Un ensemble d'objets distribués, fiable et autonome, géré par des nœuds de stockage
capables d'auto gestion et auto réparation
2
RADOSGW RBD CEPHFS
Une passerelle Un gestionnaire de Un système de
LIBRADOS d'architecture "REST" périphériques bloc, fichiers distribué,
Une librairie compatible avec S3 fiable et totalement avec un client
permettant aux et SWIFT distribué, disposant incorporé au noyau
applications un d'un client incorporé Linux et un support
accès direct à au noyau Linux et pour FUSE
RADOS, supportant d'un pilote KVM
C,C++, Java, Python,
Ruby et PHP
RADOS
Un ensemble d'objets distribués, fiable et autonome, géré par des nœuds de stockage
capables d'auto gestion et auto réparation
3
RADOSGW RBD CEPHFS
Une passerelle Un gestionnaire de Un système de
LIBRADOS d'architecture "REST" périphériques bloc, fichiers distribué,
Une librairie compatible avec S3 fiable et totalement avec un client
permettant aux et SWIFT distribué, disposant incorporé au noyau
applications un d'un client incorporé Linux et un support
accès direct à au noyau Linux et pour FUSE
RADOS, supportant d'un pilote KVM
C,C++, Java, Python,
Ruby et PHP
RADOS
Un ensemble d'objets distribués, fiable et autonome, géré par des nœuds de stockage
capables d'auto gestion et auto réparation
RADOS
Un ensemble d'objets distribués, fiable et autonome, géré par des nœuds de stockage
capables d'auto gestion et auto réparation
Pour éviter le
MON MDS OSD
Monitor Meta Data Server Object Storage Daemon
Vérifie le bon état du cluster
Split BRAIN
Gère les méta données Stocke les objets
Assure la communication initiale
OPTIONNEL sur filesystem local (XFS)
avec les clients
(uniquement pour CephFS) Communique avec les clients
Vérifie les droits d'accès
Débit disque et réseau
Machine (VM) dédiée conseillée.
Dans Ceph,
Les mon se surveillent entre eux
B OK Cluster OK Les osd se surveillent entre eux
(et previennent les mons)
Machine A
Client
Ping B C1
Dans Ceph,
Lien PAXOS est utilisé pour gérer la
Cohérence du cluster.
Ping A Client
C2
Machine B
A OK Cluster OK
B OK Cluster OK
Machine A
Put A=10 Client
A=10 Put A=10 C1
Lien
A=10
Client
C2
Machine B
A OK Cluster OK
B OK Cluster OK
Machine A
Client
C1
Lien
Get A Get A
Client
A=10 C2
Machine B A=10
A OK Cluster OK
Cluster dégradé
Je suis le seul
B OK
HS survivant
Machine A
Put A=10 Client
Put A=10 Lorsque B est réparée,
A=10 C1
elle se resynchronisera.
Lien
Client
C2
Get A
Client
A=10 C2
Machine B A=10
Cluster dégradé
A HS Je suis le seul
survivant
20 Ceph école stockage IN2P3 12-16 Juin 2017
Split brain Cluster (6)
A,B OK Cluster OK
Machine C
B,C OK Cluster OK
Lien
Machine A Utiliser un système de Quorum :
Basé sur des votes ;
Quorum = majorité absolue des votes.
Lien
Seuls les systèmes satisfaisant ce quorum
sont valides.
Lien
Machine A
ICI 3 machines, donc quorum=2
Pas de SPOF
pas de SPOF Passif/Actif :
scalable Pas de SPOF
pas (encore) scalable scalable
(change en Luminous)
Bonnes pratiques
On utilisera des VM
Désirable Peut être plusieurs démons/VM
MON, MDS, OSD : (MAUVAISE PRATIQUE)
machines séparées (Sync global régulier)
MDS avec
disque rapide. Pratique pour manipuler
Pas représentatif des performances
OSD nécessite de la volumétrie
Va changer avec bluestore disque dédié, formatage en XFS
Journal sur SSD (mutualisé)
25 Ceph école stockage IN2P3 12-16 Juin 2017
Des machines « Pro !»
Performances,
Fiabilité
Assurées !
Réseau :
Bonne carte et bon driver (éviter bnx2x !) >=1 cœur / OSD
Iperf3 entre les nœuds pour vérifier le débit cœurs rapides : utiles pour Erasure coding
Bon switch pour baisser les latences Utiles pour OSD sur SSD, (cpu facteur limitant)
Rdma supporté – Infiniband, omnipath ?
Faisable
Et
Intéressant.
Cf Crush.
Choix 5 : On peut aussi compiler ...(2H!!), puis passer au choix 2 : Installer à la main.
Kernel : Faire le bon choix entre kernel récent et stable : 4.4 est notre choix (en deadline, plus en CFQ)
(4.9 est à qualifier) – CFQ servait à descendre la priorité des scrubs (Pre-Jewel)
4.12 : multiqueue + I/O scheduler : à évoluer pour prochain kernel LTS dans le cas des SSD : Kyber
Un bug du kernel peut avoir des résultats désastreux, BIEN les qualifier.
Un kernel trop ancien peut sévèrement pénaliser les performances, la gestion des disques (XFS)
XFS : formater avec les derniers utilitaires (format V5, qui implique crc=1, finobt=1)
Tuner la mémoire (favoriser inodes/dentries dans [Link]): vm.vfs_cache_pressure = 10
3 réseaux séparés
En taille : simplement ajouter des OSD au cluster : Les triplets des PG sont redistribués
→ Ce qui entraîne un mouvement important des données.
En performance : Ajouter des machines plus spécialisées (SSD , disques différents, CPU...)
(et utiliser des racines différentes).
Luminous devrait permettre une typologie des OSD et (à priori?) permettrait de ne plus avoir à
spécifier des racines différentes.
Toujours tenir compte de sa topologie et son domaine de panne (par ex : DC par DC)
[mon]
mon debug dump transactions = false
mon compact on start = true
mon initial members = a,b,c
[mon.a]
host = ceph-mon-lmb-D3-1
mon_addr = [Link]:6789
[mon.b]
filestore journal writeahead = true ; defaut pour XFS, mais pour LXC
filestore flusher = false ;
filestore max sync interval = 15;
[osd.0]
host = ceph-osd-lmb-D3-1
[osd.1]
host = ceph-osd-cha-D3-1
[osd.2]
debug_auth = 0/0
debug_buffer = 0/0
debug_context = 0/0
debug_crypto = 0/0
debug_finisher = 0/0
debug_ms = 0/0
debug_objectcacher = 0/0
debug_objecter = 0/0
debug_rados = 0/0
debug_rbd = 0/0
debug_striper = 0/0
debug_tp = 0/0
Où ?
Comment ?
GLOBAL:
SIZE AVAIL RAW USED %RAW USED
43483G 16986G 26496G 60.94
POOLS:
NAME ID USED %USED MAX AVAIL OBJECTS
mirrors 3 3341G 7.68 7646G 863776
cloud-perso 4 1296G 2.98 5097G 465044
os-patrons 6 209G 0.48 5097G 67193
os-dsin-prv 7 907G 2.09 5097G 262322
logs 9 2583G 5.94 5097G 666408
data-dsin 11 432G 1.00 5097G 111371
data-tiers 12 180G 0.41 5097G 46168
objets-utiles 13 21234M 0.05 5097G 5379
esxi-backup 14 8973M 0.02 5097G 2916
Chaque PG va contenir de
3.24 nombreux objets
vm vm vm vm vm vm vm vm vm vm vm vm
cha-c-1-1 cha-c-1-2 cha-c-3-1 cha-c-3-2 lmb-c-1-1lmb-c-1-2 lmb-c-3-1lmb-c-3-2 loi-c-1-1 loi-c-1-2 loi-c-3-1 loi-c-3-2
OSD OSD OSD OSD OSD OSD OSD OSD OSD OSD OSD OSD
2 3 6 10 0 1 8 9 4 5 11 7
vm vm vm vm vm vm vm vm vm vm vm vm
cha-c-1-1 cha-c-1-2 cha-c-3-1 cha-c-3-2 lmb-c-1-1lmb-c-1-2 lmb-c-3-1lmb-c-3-2 loi-c-1-1 loi-c-1-2 loi-c-3-1 loi-c-3-2
OSD OSD OSD OSD OSD OSD OSD OSD OSD OSD OSD OSD
2 3 6 10 0 1 8 9 4 5 11 7
1 3 2
vm vm vm vm vm vm vm vm vm vm vm vm
cha-c-1-1 cha-c-1-2 cha-c-3-1 cha-c-3-2 lmb-c-1-1lmb-c-1-2 lmb-c-3-1lmb-c-3-2 loi-c-1-1 loi-c-1-2 loi-c-3-1 loi-c-3-2
OSD OSD OSD OSD OSD OSD OSD OSD OSD OSD OSD OSD
2 3 6 10 0 1 8 9 4 5 11 7
2
1 Host Host 3 Host Host 4 Host Host P
Yquem Mornag Abouriou Magon Zantho Koudia
vm vm vm vm vm vm vm vm vm vm vm vm
cha-c-1-1 cha-c-1-2 cha-c-3-1 cha-c-3-2 lmb-c-1-1lmb-c-1-2 lmb-c-3-1lmb-c-3-2 loi-c-1-1 loi-c-1-2 loi-c-3-1 loi-c-3-2
OSD OSD OSD OSD OSD OSD OSD OSD OSD OSD OSD OSD
2 3 6 10 0 1 8 9 4 5 11 7
root@koudia:/var/lib/lxc/10-ceph-osd-loi-B-1/rootfs/CEPH/B.2/current/18.5_head# ls -al
total 16444
drwxr-xr-x 2 64045 64045 86 juin 12 11:16 .
drwxr-xr-x 554 64045 64045 32768 juin 12 11:15 ..
-rw-r--r-- 1 64045 64045 0 juin 12 11:15 __head_00000005__12
-rw-r--r-- 1 64045 64045 16777216 juin 12 11:16 ObjetTireBouchon__head_04384205__12
[Link]._:
0000 0F 08 F5 00 00 00 04 03 31 00 00 00 00 00 00 00 ........1.......
0010 10 00 00 00 4F 62 6A 65 74 54 69 72 65 42 6F 75 ....ObjetTireBou
[Link]:
0000 02 02 19 00 00 00 00 00 00 00 00 00 00 00 01 00 ................
0010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ...............
[Link]._@1:
0000 FF .
root@koudia:/var/lib/lxc/10-ceph-osd-loi-B-1/rootfs/CEPH/B.2/current/18.5_head# ls -al
total 16444
drwxr-xr-x 2 64045 64045 86 juin 12 11:16 .
drwxr-xr-x 554 64045 64045 32768 juin 12 11:15 ..
-rw-r--r-- 1 64045 64045 0 juin 12 11:15 __head_00000005__12
-rw-r--r-- 1 64045 64045 16777216 juin 12 11:16 ObjetTireBouchon__head_04384205__12
Straw2
Tunables
Nouveautés de Luminous
ceph-mon-lmb-A-1:~# ceph df
GLOBAL:
SIZE AVAIL RAW USED %RAW USED
66469G 24553G 41915G 63.06
POOLS:
NAME ID USED %USED MAX AVAIL OBJECTS
data 0 0 0 6360G 0
metadata 1 0 0 6360G 0
rbd 2 0 0 6360G 1
data-kvm-tiers 33 2107G 24.89 6360G 540584
ECisa2p1 50 22024G 63.39 12721G 5648511
HOTECisa2p1 51 818G 11.41 6360G 209939
~over filled %~
~type~
device 30.15
host 10.53
root 0.00
ms
1.1 ~ 600 iops
0.7
ms
s
ms
5
0 .9 m
m
0.3
s
OSD.4
(LOI)
Contrôle Liste
Cluster
Des
Contient Stockent
Des Composé PG
de Sur
Pool Assignés à
Applique Disque et
contient des FS local
Règles de Objets
Placement
(CRUSH) Conditionne le placement
Clients :
Krbd,Fuse,Librbd.
Pas de client Windows ou Vmware.
Comme n’importe quel périphérique bloc, peut aussi être réexporté par samba ou NFS.
6.3e
PG
PG
Root =datacenter
6.6
6.3f b
PG Size = 3
PG
Les objets = blocs de 4 Mo
6.1 de données.
Allocation de l’objet
lors de sa 1ere écriture
Attention à la sur-réservation !
Dans RBD les snapshots peuvent être clonés (y compris dans un autre pool)
Et deviennent des nouvelles images à part entière, comme un calque
Docker procède aussi ainsi (overlayFS)
e
on
Clone
Kvm
0+évo
Cl
(Jessie)
0+évo
ne
o
Kvm
Cl
Kvm (Jessie)
(Jessie) Snap PATRON Kvm
(Jessie)
Par défaut Jewel active certaines features pour les volumes RBD :
deep-flatten,fast-diff,object-map,exclusive-lock
Cela les rend incompatibles avec krbd (sauf noyau très récent)
Mais ne pas les désactiver aveuglément, car compatibles libRBD
Client Client
1 Accès R/W Accès R/W 2
(BOUM ! )
Mais pas forcément scalable : Support multi-mds déconseillé pour Jewel (mode actif passif : cf TP)
Pour Luminous, Actif/Actif stable
real 0m32.595s
user 0m0.216s
sys 0m2.488s
real 3m30.366s
user 0m0.492s
sys 0m3.908s
(Benchmark de 5 minutes).
Ceph répére les nouveaux blocs alloués et crée des objets Le FS peut ainsi être vide, alors que le volume
RBD à chaque nouveau besoin CEPH est alloué à 100 %
(blocs de 4Mo émulant des secteurs disques)
Le problème est le même avec les SSD ou
Allocation à la volée, consommation à l'utilisation. Les baies intelligentes (compellent).
Il est possible de provisionner des volumes de 200 Il faut INFORMER le système bloc sous-jacent
To sans les avoir physiquement. À l’aide d’une commande spéciale : TRIM
Promote
b.3
Promote
Promote
Promote
Flush
Flush
Flush
Pool B.1 Pool B.4
(X2) Pool B.2 Pool B.3 (X3) Pool D.1
(X3) (EC 2+1)
(EC 4+1)
r ie
tre
Réplicat x2 (!!)
an
(x3 en Juillet 2017)
ch
rs
ve
b/s
Découpage en clusters/LXC comme
G
R630 S6010 autres machines
40
8x SSD 400 Gb DC-A
40 Gb/s 40 Gb/s Machines orientées performance
Lombarderie (E5 2637 , 3,5 Ghz
40 Gb/s
4 ports 10 Gb/s
40 Gb/s 40 Gb/s
40 2 bondings 2x10 Gb/s mode actif
R630 S6010 Gb Passage en 2x40 Gb/s
/s v
8x SSD 400 Gb DC-B ers
L oir
e
80 Ceph école stockage IN2P3 12-16 Juin 2017
Risques associés
Adhérence des objets au cache : jamais flushé si mauvais réglage des règles.
Erasure Coding : Pas mieux que 2+1 pour garantir une tolérance à la panne.
(sur notre setup)
[Video].
Monitoring
Lire les logs
Avoir une bonne connaissance du système sous-jacent
Lire les listes de diffusion
SAUVEGARDER !
Risque n°1 :
Erreur Humaine !
Répliqua x3
~75 To
utiles
9 pools
Plus d’obligation de mettre en place un système de cache/tier pour les pools d’erasure coding
Meilleur temps de détection des pannes d’OSD (pour éviter les freezes)
Rados GW NFSv3
....
Pour une présentation plus complète de Ceph, notre infrastructure, son évolution :
cf Jres 2013, Meetup Openstack Paris, Ceph Days Paris 2014, Bio Ouest 2014, Cargo Days 2015...
TutoJres 18, ANF CNRS
Stockage SAN
trop centralisé
Loire
> 500 To
(LOI)
> 100 Luns
(Utilisation de virtualisation,
conteneurs LXC)
A OSD.79
A OSD.78
A OSD.77
D OSD.26
D OSD.27
D OSD.25
D OSD.28
Libre
Libre
Libre
Libre
Libre
LXC D LXC A
1 OSD = 1 Disk «Seulement» 5 LXC max/machine.
1 seul LXC par cluster Beaucoup d'axes. Orientation
Pas de SSD. Journal en tête des disques. performances en lecture
24 OSD / machines (Racines IaaS)
Capacité Brute : ~ 24To
102 Ceph école stockage IN2P3 12-16 Juin 2017
Évolution (Début 2016 /2017)
Libre
Libre
Libre
Libre
Libre
Libre OSD.1 Libre
OSD.1 OSD.2 OSD.3 Libre Libre
LXC D LXC A
1 OSD = 1 Disk Mellanox 40 Gb/s.
1 seul LXC par cluster
SSD Write intensive 12G SAS (Sandisk) Sera décliné avec des SSD
8 OSD / machines Read intensive , moins cher pour
Capacité Brute : ~ 3,2To Certains clusters.
103 Ceph école stockage IN2P3 12-16 Juin 2017
Gen 5
Pour fin 2017
Machines déployées, capacité BRUTE globale (Perf lecture)
Gén Destination Nb Taille Version Volume
1 Mixé 3 12 x 3 To R720xd 108
2 SSD MLC Juin 2013
10 Gb/s Cluster :
bond0.2096
b /s 12xOSD, Gen2-
G
40
40 Gb
LMB (datacenter) 24xOSD, Gen3
s/
Routage local
Vlans 2091,2097
40 LOI 48xOSD, Gen4
Gb Routage local
/s
Vlans 2092,2098
Panne d'onduleur
et disjoncteur Les problèmes sur machine physique sont rares
LOI En général, une salle machine complète est impactée
3 répliquas permettent d'éviter une reconstruction
Beaucoup de connexions,
stresse les firewalls
10 Gbits/s pour de
Bonnes performances
Création optionnelle des mds (pour cephfs) ceph-deploy mds create mds1 mds2 mds3
ceph df
GLOBAL:
SIZE AVAIL RAW USED %RAW USED
Cluster CEPH 3055G 3055G 100M 0 1 pool par
fonctionnel !
POOLS:
NAME ID USED %USED MAX AVAIL OBJECTS
défaut : rbd
rbd 0 0 0 1018G 0
Copier la config et les clefs ceph depuis un des mon (pas bon pour la sécurité !)
root@mon1 : rsync -av /etc/ceph [Link]:/etc
Sur la VM cliente
ssh root@[Link]
echo deb [Link] jessie main > /etc/apt/[Link].d/[Link]
apt update && apt upgrade && apt install ceph-common
ceph -s
ceph df
mkdir /mnt/rbd
mkdir /mnt/cephfs
root@debian:~# ceph df
GLOBAL:
SIZE AVAIL RAW USED %RAW USED
3055G 3050G 5310M 0.17
POOLS:
NAME ID USED %USED MAX AVAIL OBJECTS
rbd 0 1742M 0.17 1016G 501 Pool par défaut
root@debian:~# ceph osd pool get rbd size
size: 3
root@debian:~# ceph osd pool get rbd pg_num Réplicat x3
pg_num: 64
64 placement groups
ceph pg dump
root@mona1:/var/lib/ceph/osd/ceph-0/current/2.5_head# ls -al
total 16396
drwxr-xr-x 2 ceph ceph 72 Dec 10 17:35 .
drwxr-xr-x 260 ceph ceph 8192 Dec 10 17:27 ..
-rw-r--r-- 1 ceph ceph 0 Dec 10 17:27 __head_00000005__2
-rw-r--r-- 1 ceph ceph 16777216 Dec 10 17:51 ObjetTireBouchon__head_04384205__2
root@mona3:/var/lib/ceph/osd/ceph-2/current/2.5_head# md5sum
ObjetTireBouchon__head_04384205__2
eb05fa217d1b9569c426b07e92a84854 ObjetTireBouchon__head_04384205__2
2 pools de créés
ceph df
rbd ls La commande rbd utilise le pool rbd par défaut
rbd create test1 --size=100G --image-feature layering Création d’un volume (idem LUN)
rbd info test1 Informations sur le volume créé
rbd map test1
mkfs.ext4 /dev/rbd0 On le mappe sur la machine
mount /dev/rbd0 /mnt/rbd
df
ceph df Remarquer que les 100G n’ont pas étés alloués
time cp -avx / /mnt/rbd
df
ceph df Mais qu’ici l’allocation (x3) a eu lieu
ceph df
rbd snap test1@snap1 Le Snapshot n’utilise pas de place
rbd snap ls test1
rbd snap protect test1@snap1
ceph df
rbd clone test1@snap1 test2
Le clone non plus. Attention à l’UUID
ceph df
rbd map test2
mount /dev/rbd1 /mnt/2
Cephfs
Création des pools nécessaires
ceph osd pool create ANF_cephfs_data 64 replicated
ceph osd pool create ANF_cephfs_metadata 64 replicated
Création du système de fichiers
ceph fs new ANF_fs ANF_cephfs_metadata ANF_cephfs_data
ceph fs ls
name: ANF_fs, metadata pool: ANF_cephfs_metadata,
data pools: [ANF_cephfs_data ]
ceph fs set_default ANF_fs
Sur la VM cliente
Extraire la clef admin du keyring, ajouter le client de montage
ceph auth get [Link] | head -2 | tail -1 > /etc/ceph/[Link]
apt install ceph-fs-common
Scruter /var/log/ceph :
monclient: _check_auth_rotating possible clock skew, rotating keys expired way too early (before 2016-
12-11 16:52:00.157565)
Détails de santé du cluster
ceph health
HEALTH_WARN mon.mona1 low disk space; mon.mona2 low disk space; mon.mona3 low disk space
200 Go bruts.
root@mon1:~# crushtool -c [Link] -o crushmap2 La règle existe dans le cluster mais est
root@mon1:~# ceph osd setcrushmap -i crushmap2 Non appliquée.
root@mon1:~# ceph osd pool set rbd crush_ruleset 1
set pool 0 crush_ruleset to 1 Elle l’est !
ceph osd pool create poolEC 32 erasure p2p1ANF Place disponible 2x supérieure dans ce pool
ceph df
Sur le client
rados get -p objets_utiles ObjetTireBouchon FichierTireBouchon2 ; md5sum FichierTireBouchon2
eb05fa217d1b9569c426b07e92a84854 FichierTireBouchon2
Relancer, vérifier...
root@debian:~# mount /dev/rbd0 /mnt/rbd Le noyau 3.16 ne peut accepter ces règles
[Ne rend pas la main] LibRBD est plus souple (pour KVM)
root@debian:~# uname -a
Linux 4.8.10-dsiun-dl-160725 #201 SMP Fri Nov 25 11:37:30 UTC 2016 x86_64 GNU/Linux
Questions ?
Crédits : Opencliparts / Openstreetmap / [Link]