![Page 1: Ippevent - Regarde les instances tomber - 20 mai 2014](https://reader033.vdocuments.pub/reader033/viewer/2022042816/5597b9ef1a28abd8438b4669/html5/thumbnails/1.jpg)
Regarde les instances tomber20 mai 2014
Vincent Beretti
![Page 2: Ippevent - Regarde les instances tomber - 20 mai 2014](https://reader033.vdocuments.pub/reader033/viewer/2022042816/5597b9ef1a28abd8438b4669/html5/thumbnails/2.jpg)
Ippon Technologies © 2014
Sommaire
● Théorie● MongoDB● Cassandra● Conclusion
![Page 3: Ippevent - Regarde les instances tomber - 20 mai 2014](https://reader033.vdocuments.pub/reader033/viewer/2022042816/5597b9ef1a28abd8438b4669/html5/thumbnails/3.jpg)
Ippon Technologies © 2014
Objectifs
Objectifs de la présentation● Comprendre les contraintes d’un système distribué● Voir ces contraintes en application sur 2 architectures
différentes● Observer les comportements lors
○ de la chute d’instances○ du morcellement du réseau
● Comprendre certains mécanismes de haute disponibilité● Utiliser la configuration pour privilégier la disponibilité ou la
cohérence
![Page 4: Ippevent - Regarde les instances tomber - 20 mai 2014](https://reader033.vdocuments.pub/reader033/viewer/2022042816/5597b9ef1a28abd8438b4669/html5/thumbnails/4.jpg)
Ippon Technologies © 2014
Théorie
![Page 5: Ippevent - Regarde les instances tomber - 20 mai 2014](https://reader033.vdocuments.pub/reader033/viewer/2022042816/5597b9ef1a28abd8438b4669/html5/thumbnails/5.jpg)
Ippon Technologies © 2014
Théorème CAP
Theoreme CAPConjecture décrite en 2000 par Eric Brewer de Berkeley. Il y présente les contraintes inhérentes à tout système distribué.
3 propriétés :● Consistency (Cohérence) : tous les noeuds possèdent
exactement la même donnée à un instant T● Availability (Disponibilité) : la donnée est disponible à tout
moment.● Partition tolerance (Résistance au “morcellement”): le
système peut continuer à opérer même en cas de perte d’une partie du système.
![Page 6: Ippevent - Regarde les instances tomber - 20 mai 2014](https://reader033.vdocuments.pub/reader033/viewer/2022042816/5597b9ef1a28abd8438b4669/html5/thumbnails/6.jpg)
Ippon Technologies © 2014
Théorème CAP
Un système distribué a au plus 2 des 3 propriétés énoncées ci-dessus.
![Page 7: Ippevent - Regarde les instances tomber - 20 mai 2014](https://reader033.vdocuments.pub/reader033/viewer/2022042816/5597b9ef1a28abd8438b4669/html5/thumbnails/7.jpg)
Ippon Technologies © 2014
Theorème CAP
A
C PMongoDB
CassandraRDBMS
![Page 8: Ippevent - Regarde les instances tomber - 20 mai 2014](https://reader033.vdocuments.pub/reader033/viewer/2022042816/5597b9ef1a28abd8438b4669/html5/thumbnails/8.jpg)
Ippon Technologies © 2014
MongoDB
![Page 9: Ippevent - Regarde les instances tomber - 20 mai 2014](https://reader033.vdocuments.pub/reader033/viewer/2022042816/5597b9ef1a28abd8438b4669/html5/thumbnails/9.jpg)
Ippon Technologies © 2014
MongoDB● Base orientée document● Modèle asymétrique
○ 1 noeud primaire○ n noeuds secondaires
● CP : consistency + network partition tolerance● Redondance et haute disponibilité grâce au “Replica Set”
MongoDB
Secondary Secondary
Primary
WriteRead
ReplicationReplication
![Page 10: Ippevent - Regarde les instances tomber - 20 mai 2014](https://reader033.vdocuments.pub/reader033/viewer/2022042816/5597b9ef1a28abd8438b4669/html5/thumbnails/10.jpg)
Ippon Technologies © 2014
Bac à sable
● Docker○ mongod○ ssh
● REST App○ spring boot○ spring data mongoDB
● Gatling
MongoDB
mongod
docker container
REST App
Gatling
mongod
docker container
mongod
docker container
![Page 11: Ippevent - Regarde les instances tomber - 20 mai 2014](https://reader033.vdocuments.pub/reader033/viewer/2022042816/5597b9ef1a28abd8438b4669/html5/thumbnails/11.jpg)
Ippon Technologies © 2014
Primary - KO
Et si le noeud primaire tombe ?
DEMOScénario● 3 noeuds● read & upsert en continu
Secondary Secondary
Primary
WriteRead
ReplicationReplication
![Page 12: Ippevent - Regarde les instances tomber - 20 mai 2014](https://reader033.vdocuments.pub/reader033/viewer/2022042816/5597b9ef1a28abd8438b4669/html5/thumbnails/12.jpg)
Ippon Technologies © 2014
Primary - KO
● Environ 5 secondes d’indisponibilité● Nouveau noeud Primaire est disponible● Écritures & lectures envoyées au nouveau noeud Primaire
![Page 13: Ippevent - Regarde les instances tomber - 20 mai 2014](https://reader033.vdocuments.pub/reader033/viewer/2022042816/5597b9ef1a28abd8438b4669/html5/thumbnails/13.jpg)
Ippon Technologies © 2014
Primary - OK - Election
Secondary Secondary
Primary
Primary Secondary
Primary
Client
Client
heartbeat
heartbeat
T
T+1
![Page 14: Ippevent - Regarde les instances tomber - 20 mai 2014](https://reader033.vdocuments.pub/reader033/viewer/2022042816/5597b9ef1a28abd8438b4669/html5/thumbnails/14.jpg)
Ippon Technologies © 2014
Primary - OK - Election
Critères d’élection● ! hidden, ! arbitrer, priority !=0● priority + haute● optime + récent● ! vetoed● quorum visibility
Pas plus de 7 votersPossibilité de veto même par les non-voters
![Page 15: Ippevent - Regarde les instances tomber - 20 mai 2014](https://reader033.vdocuments.pub/reader033/viewer/2022042816/5597b9ef1a28abd8438b4669/html5/thumbnails/15.jpg)
Ippon Technologies © 2014
Primary - OK - Client JavaDefaultServer.java
this.stateNotifier = new ServerStateNotifier(serverAddress, serverStateListener,
settings.getHeartbeatSocketSettings(), mongo);
this.scheduledFuture = scheduledExecutorService.scheduleAtFixedRate(stateNotifier, 0,
settings.getHeartbeatFrequency(MILLISECONDS),
MILLISECONDS);
ServerStateNotifier.java
final CommandResult isMasterResult = connection.runCommand(mongo.getDB("admin"),
new BasicDBObject("ismaster", 1));
final CommandResult buildInfoResult = connection.runCommand(mongo.getDB("admin"),
new BasicDBObject("buildinfo", 1));
serverDescription = createDescription(isMasterResult, buildInfoResult, elapsedNanosSum /
count);
// [...]
serverStateListener.stateChanged(
new ChangeEvent<ServerDescription>(currentServerDescription,
serverDescription));
![Page 16: Ippevent - Regarde les instances tomber - 20 mai 2014](https://reader033.vdocuments.pub/reader033/viewer/2022042816/5597b9ef1a28abd8438b4669/html5/thumbnails/16.jpg)
Ippon Technologies © 2014
Primary + Secondary - KO
Et si le dernier noeud secondaire tombe ?
DEMO
Primary Secondary
Primary
Client
heartbeat
![Page 17: Ippevent - Regarde les instances tomber - 20 mai 2014](https://reader033.vdocuments.pub/reader033/viewer/2022042816/5597b9ef1a28abd8438b4669/html5/thumbnails/17.jpg)
Ippon Technologies © 2014
Primary + Secondary - KO
Base totalement indisponible alors qu’il reste 1 noeud !
![Page 18: Ippevent - Regarde les instances tomber - 20 mai 2014](https://reader033.vdocuments.pub/reader033/viewer/2022042816/5597b9ef1a28abd8438b4669/html5/thumbnails/18.jpg)
Ippon Technologies © 2014
Primary + Secondary - KO
Secondary Secondary
Primary
Primary Secondary
Primary
heartbeat
T
T+1
[rsMgr] can't see a majority of the set, relinquishing primary[rsMgr] replSet relinquishing primary state
![Page 19: Ippevent - Regarde les instances tomber - 20 mai 2014](https://reader033.vdocuments.pub/reader033/viewer/2022042816/5597b9ef1a28abd8438b4669/html5/thumbnails/19.jpg)
Ippon Technologies © 2014
Primary - KO - ReadPreferences
Par défaut,Si le primaire tombe● perte des lectures et écritures durant l'élection
Si le dernier noeud secondaire tombe● perte complète des lectures et écritures
Noeuds secondaires utiles qu’en cas de failover.
Sacrifier la cohérence pour gagner en disponibilité ?
![Page 20: Ippevent - Regarde les instances tomber - 20 mai 2014](https://reader033.vdocuments.pub/reader033/viewer/2022042816/5597b9ef1a28abd8438b4669/html5/thumbnails/20.jpg)
Ippon Technologies © 2014
Primary - KO - ReadPreferences
ReadPreferencesParamètre d’appel● PRIMARY : default, cohérence +++, disponibilité --● PRIMARY_PREFERRED : cohérence ++ et disponibilité + ● SECONDARY : cohérence --, disponibilité ++● SECONDARY_PREFERRED : cohérence --, disponibilité +++● NEAREST : disponibilité +++
A configurer en fonction du besoin métier
![Page 21: Ippevent - Regarde les instances tomber - 20 mai 2014](https://reader033.vdocuments.pub/reader033/viewer/2022042816/5597b9ef1a28abd8438b4669/html5/thumbnails/21.jpg)
Ippon Technologies © 2014
Primary - KO - ReadPreferences
Et si le noeud primaire tombe ?
DEMOScénario● 3 noeuds● read & upsert en continu● ReadPreferences
○ Primary preferred○ Secondary preferred
Secondary Secondary
PrimaryReplicationReplication
![Page 22: Ippevent - Regarde les instances tomber - 20 mai 2014](https://reader033.vdocuments.pub/reader033/viewer/2022042816/5597b9ef1a28abd8438b4669/html5/thumbnails/22.jpg)
Ippon Technologies © 2014
Primary - KO - Primary Preferred
Reads
Writes
![Page 23: Ippevent - Regarde les instances tomber - 20 mai 2014](https://reader033.vdocuments.pub/reader033/viewer/2022042816/5597b9ef1a28abd8438b4669/html5/thumbnails/23.jpg)
Ippon Technologies © 2014
Primary - KO - Secondary Preferred
Répartition de charge (au détriment de la cohérence)
![Page 24: Ippevent - Regarde les instances tomber - 20 mai 2014](https://reader033.vdocuments.pub/reader033/viewer/2022042816/5597b9ef1a28abd8438b4669/html5/thumbnails/24.jpg)
Ippon Technologies © 2014
Morcellement
MorcellementPartitionnement du réseau au sein du clusterCas déploiement multi-datacenter
![Page 25: Ippevent - Regarde les instances tomber - 20 mai 2014](https://reader033.vdocuments.pub/reader033/viewer/2022042816/5597b9ef1a28abd8438b4669/html5/thumbnails/25.jpg)
Ippon Technologies © 2014
Morcellement
Et si le cluster est morcelé ?
DEMOScénario● 5 noeuds● iptables Primary
172.17.0.2
Secondary172.17.0.3
Secondary172.17.0.4
Secondary172.17.0.5
Secondary172.17.0.6
![Page 26: Ippevent - Regarde les instances tomber - 20 mai 2014](https://reader033.vdocuments.pub/reader033/viewer/2022042816/5597b9ef1a28abd8438b4669/html5/thumbnails/26.jpg)
Ippon Technologies © 2014
Morcellement
IPTables sur noeuds 172.17.0.2 et 172.17.0.3iptables -A INPUT -p ALL -s 172.17.0.4 -j DROPiptables -A INPUT -p ALL -s 172.17.0.5 -j DROPiptables -A INPUT -p ALL -s 172.17.0.6 -j DROPiptables -A OUTPUT -p ALL -d 172.17.0.4 -j DROPiptables -A OUTPUT -p ALL -d 172.17.0.5 -j DROPiptables -A OUTPUT -p ALL -d 172.17.0.6 -j DROP
Primary172.17.0.2
Secondary172.17.0.3
Secondary172.17.0.4
Secondary172.17.0.5
Secondary172.17.0.6
![Page 27: Ippevent - Regarde les instances tomber - 20 mai 2014](https://reader033.vdocuments.pub/reader033/viewer/2022042816/5597b9ef1a28abd8438b4669/html5/thumbnails/27.jpg)
Ippon Technologies © 2014
Secondary172.17.0.2
Secondary172.17.0.3
Primary172.17.0.4
Secondary172.17.0.5
Secondary172.17.0.6
[rsMgr] can't see a majority of the set, relinquishing primary[rsMgr] replSet relinquishing primary state[rsMgr] replSet SECONDARY[rsMgr] replSet closing client sockets after relinquishing primary
Election
![Page 28: Ippevent - Regarde les instances tomber - 20 mai 2014](https://reader033.vdocuments.pub/reader033/viewer/2022042816/5597b9ef1a28abd8438b4669/html5/thumbnails/28.jpg)
Ippon Technologies © 2014
Secondary172.17.0.2
Secondary172.17.0.3
Primary172.17.0.4
Secondary172.17.0.5
Secondary172.17.0.6
[rsMgr] not electing self, [...] but 172.17.0.4:27017 is already primary and more up-to-date'
![Page 29: Ippevent - Regarde les instances tomber - 20 mai 2014](https://reader033.vdocuments.pub/reader033/viewer/2022042816/5597b9ef1a28abd8438b4669/html5/thumbnails/29.jpg)
Ippon Technologies © 2014
Cassandra
![Page 30: Ippevent - Regarde les instances tomber - 20 mai 2014](https://reader033.vdocuments.pub/reader033/viewer/2022042816/5597b9ef1a28abd8438b4669/html5/thumbnails/30.jpg)
Ippon Technologies © 2014
Cassandra
Cassandra● Base orientée colonnes● Modèle symétrique
○ n noeuds disponibles en lectures et ecriture● AP : Availability + network partition tolerance
A
B C
![Page 31: Ippevent - Regarde les instances tomber - 20 mai 2014](https://reader033.vdocuments.pub/reader033/viewer/2022042816/5597b9ef1a28abd8438b4669/html5/thumbnails/31.jpg)
Ippon Technologies © 2014
Replication FactorNombre de noeuds sur lesquels une données va être répliquée.A définir lors de la définition du keyspace (~= schema)
Cassandra - Replication Factor
A
B C
CREATE KEYSPACE IF NOT EXISTS myKsp WITH REPLICATION = { 'class' : 'SimpleStrategy', 'replication_factor' : 3 }
A
B C
A
B C
RF : 1 RF : 2 RF : 3
![Page 32: Ippevent - Regarde les instances tomber - 20 mai 2014](https://reader033.vdocuments.pub/reader033/viewer/2022042816/5597b9ef1a28abd8438b4669/html5/thumbnails/32.jpg)
Ippon Technologies © 2014
Bac à sable
● Docker○ dsc-community○ ssh○ iptables
● REST App○ spring boot○ datastax java driver
● Datastax Ops Center
Cassandra
REST App
GatlingOpsCenter
cassandra
docker container
agent
cassandra
docker container
agent
cassandra
docker container
agent
![Page 33: Ippevent - Regarde les instances tomber - 20 mai 2014](https://reader033.vdocuments.pub/reader033/viewer/2022042816/5597b9ef1a28abd8438b4669/html5/thumbnails/33.jpg)
Ippon Technologies © 2014
Noeud KO
Et si un noeud tombe ?
DEMOScénario● 3 noeuds, RF=3● read & upsert en continu
A
B C
![Page 34: Ippevent - Regarde les instances tomber - 20 mai 2014](https://reader033.vdocuments.pub/reader033/viewer/2022042816/5597b9ef1a28abd8438b4669/html5/thumbnails/34.jpg)
Ippon Technologies © 2014
Noeuds KO
Et si 2 noeuds tombent ?
A
B C
![Page 35: Ippevent - Regarde les instances tomber - 20 mai 2014](https://reader033.vdocuments.pub/reader033/viewer/2022042816/5597b9ef1a28abd8438b4669/html5/thumbnails/35.jpg)
Ippon Technologies © 2014
Noeuds KO
Pas d’interruption du service : aucune requête KO !Mais la cohérence n’est pas assurée.
Cependant, Cassandra dispose de plusieurs mécanismes pour assurer une cohérence “à terme” (eventually consistent)
![Page 36: Ippevent - Regarde les instances tomber - 20 mai 2014](https://reader033.vdocuments.pub/reader033/viewer/2022042816/5597b9ef1a28abd8438b4669/html5/thumbnails/36.jpg)
Ippon Technologies © 2014
Hinted off Repair
Hinted off RepairLe noeud conserve la réplication dans la table system.hints si un noeud est KO pour la rejouer quand il sera à nouveau disponible.Temps de conservation par défaut de 3h.
A
B CWrite 1
Repl.
Repl.
A
B CRepl. Write 1
T T+1
![Page 37: Ippevent - Regarde les instances tomber - 20 mai 2014](https://reader033.vdocuments.pub/reader033/viewer/2022042816/5597b9ef1a28abd8438b4669/html5/thumbnails/37.jpg)
Ippon Technologies © 2014
Hinted off Repair - DEMO
$ ./nodetool --host 172.17.0.3 tpstatsPool Name Active Pending Completed [...]HintedHandoff 1 1 3
Stockage des Hints
Renvoi des hints au noeud défaillant
![Page 38: Ippevent - Regarde les instances tomber - 20 mai 2014](https://reader033.vdocuments.pub/reader033/viewer/2022042816/5597b9ef1a28abd8438b4669/html5/thumbnails/38.jpg)
Ippon Technologies © 2014
Read Repair
Read repairRéparation asynchrone des données● Demande client d’une donnée à un noeud A● Réponse du noeud A● Envoi un digest de sa valeur du noeud A aux autres noeuds
B et C pour vérifier la valeur○ la valeur de A est trop ancienne: re-synchronization○ un des noeuds B et C a une valeur trop ancienne: re-
synchronization
Échange peu coûteux (digest)Aléatoire (10%) : read_repair_chance configurable
![Page 39: Ippevent - Regarde les instances tomber - 20 mai 2014](https://reader033.vdocuments.pub/reader033/viewer/2022042816/5597b9ef1a28abd8438b4669/html5/thumbnails/39.jpg)
Ippon Technologies © 2014
ReadRepair
A
B C
T+3A
B C
T+2
A
B C
T A
B C
T+1
Read
digest query
digest query
OK
KO update value
![Page 40: Ippevent - Regarde les instances tomber - 20 mai 2014](https://reader033.vdocuments.pub/reader033/viewer/2022042816/5597b9ef1a28abd8438b4669/html5/thumbnails/40.jpg)
Ippon Technologies © 2014
Consistency Level
Assurer la cohérenceCassandra propose le mécanisme de Consistency Level.Le consistency level permet de s’assurer de l’application de la requête sur le nombre de noeuds suivants:● ONE (par défaut)● TWO● THREE● QUORUM : (total/2) +1● ALL
Cette valeur est configurable au niveau de chaque requête.
![Page 41: Ippevent - Regarde les instances tomber - 20 mai 2014](https://reader033.vdocuments.pub/reader033/viewer/2022042816/5597b9ef1a28abd8438b4669/html5/thumbnails/41.jpg)
Ippon Technologies © 2014
Consistency Level
Une donnée sera forcément cohérente si
R + W > NR : nombre de noeuds écrits; W : nombre de noeuds lus; N : nombre total de noeuds
Exemples :● QUORUM + QUORUM > N● ALL + ONE > N● ONE + ALL > N
![Page 42: Ippevent - Regarde les instances tomber - 20 mai 2014](https://reader033.vdocuments.pub/reader033/viewer/2022042816/5597b9ef1a28abd8438b4669/html5/thumbnails/42.jpg)
Ippon Technologies © 2014
R + W > N
A
B C
ONE + ALLA
B C
ALL + ONEA
B C
QUORUM + QUORUM
![Page 43: Ippevent - Regarde les instances tomber - 20 mai 2014](https://reader033.vdocuments.pub/reader033/viewer/2022042816/5597b9ef1a28abd8438b4669/html5/thumbnails/43.jpg)
Ippon Technologies © 2014
Noeuds KO - Consistency Level
Et si un noeud ou 2 noeuds tombent ?
DEMOScénario● 3 noeuds, RF=3● read & upsert en continu
○ Consistency level = QUORUM
A
B C
![Page 44: Ippevent - Regarde les instances tomber - 20 mai 2014](https://reader033.vdocuments.pub/reader033/viewer/2022042816/5597b9ef1a28abd8438b4669/html5/thumbnails/44.jpg)
Ippon Technologies © 2014
La configuration en “mode cohérent” avec QUORUM ne permet pas de résister à la chute de 2 noeuds.
Noeuds KO - Consistency Level
![Page 45: Ippevent - Regarde les instances tomber - 20 mai 2014](https://reader033.vdocuments.pub/reader033/viewer/2022042816/5597b9ef1a28abd8438b4669/html5/thumbnails/45.jpg)
Ippon Technologies © 2014
Conclusion
![Page 46: Ippevent - Regarde les instances tomber - 20 mai 2014](https://reader033.vdocuments.pub/reader033/viewer/2022042816/5597b9ef1a28abd8438b4669/html5/thumbnails/46.jpg)
Ippon Technologies © 2014
Conclusion
“On a long enough timeline, the survival rate for everyone drops to zero”
● Contraintes d’un système distribué : C - A - P● Impact architecture symétrique / asymétrique● CP / AP n’est pas figé● Utilisation de la configuration au niveau requête pour
privilégier cohérence ou disponibilité● Contraintes dictées par l’utilisation fonctionnelle de la
donnée
https://github.com/vberetti/ippevent-20-05-2014
![Page 47: Ippevent - Regarde les instances tomber - 20 mai 2014](https://reader033.vdocuments.pub/reader033/viewer/2022042816/5597b9ef1a28abd8438b4669/html5/thumbnails/47.jpg)
Ippon Technologies © 2014
Questions
MongoDB ReadPreferences
Election
Questions ?
Cassandra
ConsistencyLevel
Hinted off Repair
Read Repair
ReplicaSet
Hints
CAP Theorem
Morcellement
Replication Factor