On 10/10/2017 10:34 PM, frsag@jack.fr.eu.org wrote:
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
On peut en effet cibler les OSDs (les disques) pour un pool donné avec la CRUSH map, ça on est d'accord.
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
Pas d'accord sur ce dernier point (t+2). Le min_size ne signifie pas que l'IO sera acquitté au bout de <min_size> acks sur les OSDs (ie les disques pour être clair). Ceci est faux à mon humble avis.
Pour moi, ton client ne sera acquitté de l'IO _que_ lorsque tu auras un ack de SSD1, SSD2 _et_ _aussi_ de HDD1, pas avant.
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
Pour moi c'est une « légende urbaine » sur le paramètre min_size.
Regarde le schéma juste au _dessus_ de ce lien : http://docs.ceph.com/docs/master/architecture/#dynamic-cluster-management
Tu pourras constater que le ack envoyé au client se produit seulement une fois l'écriture faite les 3 OSDs (l'OSD primaire, celui avec qui le client est en contact direct, et les OSDs secondaires).
« The client writes the object to the identified placement group in the primary OSD. Then, the primary OSD with its own copy of the CRUSH map identifies the secondary and tertiary OSDs for replication purposes, and replicates the object to the appropriate placement groups in the secondary and tertiary OSDs (as many OSDs as additional replicas), and responds to the client once it has confirmed the object was stored successfully. »
Le paramètre min_size ne change rien à cela. Comme je disais dans mon message précédent, il t'assure seulement qu'en mode dégradé (ie quand tous les OSDs ne sont pas UP) aucune écriture ne sera possible s'il n'y a pas au moins <min_size> ODS(s) UP. C'est tout.