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/

Répondre à