Oui Si tu as 3 disques dur, et 2 SSD, un size = 3 et min_size = 2, et une map cohérente, l'écriture va se faire sur les 2 SSD et sur un disque dur Lorsque deux écritures seront validés, l'IO sera valider
Une timeline: t: début de l'IO t + 1: écriture sous-jacente sur SSD1, SSD2 et HDD1 t + 2: SSD1 ack, SSD2 ack, HDD1 travaille encore, l'IO est validé au client t + 3: HDD1 ack (mais à ce niveau, le client est déjà parti, ce n'est plus que de la réplication) Autrement dit, dans ce cas, tes performances en écriture sont directement relié à tes min_size OSD les plus performants On 10/10/2017 21:31, Francois Lafont wrote: > On 10/10/2017 11:28 AM, fr...@jack.fr.eu.org wrote: > >> Pas vraiment, je pense plutôt à min_size pour l'écriture, et affinity >> pour la lecture > > Ok pour la priority affinity par rapport à la lecture uniquement en > effet. > > Mais par contre je suis pas d'accord pour le min_size qui, pour ce > que j'ai compris de Ceph, n'a pas de rapport avec la redondance > inter-dc. > > Pour moi, le min_size d'un pool en mode réplication c'est juste le > nombre minimum de replicas en dessous duquel une écriture est > impossible. En clair, si tu as un pool avec size == 3 (3 réplications > de chaque objet stocké) et un min_size égal à 2, si un client ceph > doit écrire dans le pool mais que l'écriture ne peut se faire que sur > 1 seul OSD (car par exemple les 2 autres sont down à ce moment là), > alors l'I/O est bloquée. Pour moi c'est tout ce que fait min_size. > >> Pour moi, c'est la même chose >> Dans la mesure où tu as X size et Y min_size, même si la différence >> entre Y et X est "loin" (autre DC, stockage lent, etc), cela n'a aucune >> importance : lorsque les Y replica seront validés (et donc, sur les SSD >> / sur le DC proche), l'écriture sera acquittée >> >> Me tromperai-je ? > > Pour moi oui mais ton expression « la différence entre Y et X est "loin" » > me met le doute (j'ai l'impression qu'on ne parle pas du tout de la même chose > du coup). > > Pour moi size et min_size, c'est ce que tu définis sur un replicated pool > avec la commande : > > ceph osd pool set poolname size 3 > ceph osd pool set poolname min_size 2 > > Dans le cas ci-dessus : > > * Une écriture d'un objet sera faite en 3 exemplaires (3 réplicas) a priori > sur 3 OSD distincts. > * Si les 3 OSDs sont UP, lors d'une écriture, un client sera acquittée > uniquement lorsque l'écriture s'est faite sur les 3 OSDs, pas avant. > * Pas d'acquittement d'écriture au client si seulement 0 ou 1 OSD peut > écrire l'objet, par contre avec 2 OSDs ça passera. > > Voilà, pour moi c'est comme ça que ça fonctionne sur des replicated pool > et il n'est pas question de topologie ici (OSD dans un DC, OSD SSD etc). > Je suis relativement sûr que ça fonctionnait comme ça il y a 1 an ou 2 > (car c'est à ce moment là que j'ai un peu creusé la question) mais peut-être > que depuis les choses ont changé. > > J'espère ne pas avoir dit trop de bêtises. Je serais heureux qu'on me > rectifie si c'est le cas. > -- "UNIX was not designed to stop its users from doing stupid things, as that would also stop them from doing clever things." – Doug Gwyn _______________________________________________ Liste de diffusion du FRsAG http://www.frsag.org/