Question Configuration de Cassandra pour la cohérence entre plusieurs centres de données


Actuellement, nous exécutons un anneau Cassandra à 4 nœuds dans chacun des deux centres de données. Nous aimerions les reconstruire en un seul anneau à 8 nœuds. Toutes choses étant égales par ailleurs, nous aimerions vraiment avoir des lectures cohérentes. Nous utilisons donc actuellement les lectures et les écritures QUORUM. Toutefois, si nous perdons un centre de données, il apparaît que cela entraînerait l’échec de nombreuses demandes, voire de toutes, en raison de l’incapacité de respecter ConsistencyLevel. Puisque nous prévoyons d’envoyer des demandes aux deux centres de données, le passage à LOCAL_QUORUM ne devrait pas être suffisant pour garantir la cohérence.

Cassandra semble manquer cruellement de paramètres ConsistencyLevel qui sont mesurés uniquement par rapport aux nœuds disponibles.

Que peut-on faire pour obtenir une cohérence maximale sans défaillance de disponibilité dans ce scénario et que doit-on échanger pour l'obtenir?


7
2018-05-21 23:01


origine


Avez-vous examiné le Théorème de la PAC? - Matthew Flaschen
Oui. A = P> C. La question est de savoir comment obtenir C gracieusement se dégradent lorsque A et P sont exercés. - zstewart
Vous avez besoin de trois centres de données si vous voulez une cohérence QUORUM. - serbaut


Réponses:


Vous pouvez avoir votre application en lecture / écriture en utilisant QUORUM dans des opérations normales, puis basculer vers LOCAL_QUORUM en cas de panne du contrôleur de domaine. C’est quelque chose que vous devrez faire vous-même, car Cassandra ne le fera pas automatiquement. En cas de panne du contrôleur de domaine, vous pouvez éventuellement effectuer une réparation nodetool avant de l'ouvrir pour un accès en lecture / écriture. Évidemment, dans un scénario multi-contrôleurs, QUORUM peut signifier que vous aurez des problèmes de latence en fonction du tuyau qui les sépare, mais c'est un compromis que vous devrez peser.


1
2018-05-24 15:26





ce n'est tout simplement pas possible. Lorsque votre réseau devient partitionné (c’est-à-dire que la liaison entre les centres de données est interrompue), puis est rétabli, comment allez-vous réconcilier les modifications apportées dans chaque centre de données pendant la panne? Je demande spécifiquement les enregistrements qui ont changé dans les deux centres de données.

Cassandra semble manquer cruellement les paramètres ConsistencyLevel qui ont été mesurés uniquement par rapport aux nœuds disponibles.

il y a une raison pour laquelle, dans les systèmes distribués, des éléments tels que ConsistencyLevel et quorum prennent la planification de la part de l'administrateur et ne sont pas laissés au système pour décider automatiquement. Si tel était le cas, alors (encore une fois, à l'aide de votre exemple), vous pourriez avoir 2 nœuds adjacents séparés et ces 2 nœuds décideraient qu'ils ont un quorum et deviennent incohérents avec le reste des nœuds.


1
2018-05-22 21:39



Ceci est un bon point et doit être traité, mais la disponibilité est roi et nous devons toujours fonctionner avec la moitié des nœuds. - zstewart