replication and replica sets
TRANSCRIPT
![Page 1: Replication and Replica Sets](https://reader034.vdocument.in/reader034/viewer/2022042816/558bc438d8b42ac24b8b46af/html5/thumbnails/1.jpg)
Chief Evangelist, 10gen
Steve Francia
#MongoDBTokyo
Replication and Replica Sets
![Page 2: Replication and Replica Sets](https://reader034.vdocument.in/reader034/viewer/2022042816/558bc438d8b42ac24b8b46af/html5/thumbnails/2.jpg)
Agenda
• Replica Sets Lifecycle
• Developing with Replica Sets
• Operational Considerations
• Behind the Curtain
![Page 3: Replication and Replica Sets](https://reader034.vdocument.in/reader034/viewer/2022042816/558bc438d8b42ac24b8b46af/html5/thumbnails/3.jpg)
Why Replication?
• How many have faced node failures?
• How many have been woken up from sleep to do a fail-over(s)?
• How many have experienced issues due to network latency?
• Different uses for data – Normal processing – Simple analytics
![Page 4: Replication and Replica Sets](https://reader034.vdocument.in/reader034/viewer/2022042816/558bc438d8b42ac24b8b46af/html5/thumbnails/4.jpg)
ReplicaSet Lifecycle
![Page 5: Replication and Replica Sets](https://reader034.vdocument.in/reader034/viewer/2022042816/558bc438d8b42ac24b8b46af/html5/thumbnails/5.jpg)
Node 1 Node 2
Node 3
Replica Set – Creation
![Page 6: Replication and Replica Sets](https://reader034.vdocument.in/reader034/viewer/2022042816/558bc438d8b42ac24b8b46af/html5/thumbnails/6.jpg)
Node 1Secondary
Node 2Secondary
Node 3Primary
Replication
Heartbeat
ReplicationReplica Set – Initialize
![Page 7: Replication and Replica Sets](https://reader034.vdocument.in/reader034/viewer/2022042816/558bc438d8b42ac24b8b46af/html5/thumbnails/7.jpg)
Node 1Secondary
Node 2Secondary
Node 3
Heartbeat
Primary Election
Replica Set – Failure
![Page 8: Replication and Replica Sets](https://reader034.vdocument.in/reader034/viewer/2022042816/558bc438d8b42ac24b8b46af/html5/thumbnails/8.jpg)
Node 1Secondary
Node 2Primary
Node 3
Replication
Heartbeat
Replica Set – Failover
![Page 9: Replication and Replica Sets](https://reader034.vdocument.in/reader034/viewer/2022042816/558bc438d8b42ac24b8b46af/html5/thumbnails/9.jpg)
Node 1Secondary
Node 2Primary
Replication
Heartbeat
Node 3Recovery
Replication
Replica Set – Recovery
![Page 10: Replication and Replica Sets](https://reader034.vdocument.in/reader034/viewer/2022042816/558bc438d8b42ac24b8b46af/html5/thumbnails/10.jpg)
Node 1Secondary
Node 2Primary
Replication
Heartbeat
Node 3Secondary
Replication
Replica Set – Recovered
![Page 11: Replication and Replica Sets](https://reader034.vdocument.in/reader034/viewer/2022042816/558bc438d8b42ac24b8b46af/html5/thumbnails/11.jpg)
ReplicaSet Roles & Configuration
![Page 12: Replication and Replica Sets](https://reader034.vdocument.in/reader034/viewer/2022042816/558bc438d8b42ac24b8b46af/html5/thumbnails/12.jpg)
Node 1Secondary
Node 2Arbiter
Node 3Primary
Heartbeat
ReplicationReplica Set Roles
![Page 13: Replication and Replica Sets](https://reader034.vdocument.in/reader034/viewer/2022042816/558bc438d8b42ac24b8b46af/html5/thumbnails/13.jpg)
> conf = { _id : "mySet", members : [ {_id : 0, host : "A”, priority : 3}, {_id : 1, host : "B", priority : 2}, {_id : 2, host : "C”}, {_id : 3, host : "D", hidden : true}, {_id : 4, host : "E", hidden : true, slaveDelay : 3600} ]
} > rs.initiate(conf)
Configuration Options
![Page 14: Replication and Replica Sets](https://reader034.vdocument.in/reader034/viewer/2022042816/558bc438d8b42ac24b8b46af/html5/thumbnails/14.jpg)
> conf = { _id : "mySet”, members : [ {_id : 0, host : "A”, priority : 3}, {_id : 1, host : "B", priority : 2}, {_id : 2, host : "C”}, {_id : 3, host : "D", hidden : true}, {_id : 4, host : "E", hidden : true, slaveDelay : 3600} ]
} > rs.initiate(conf)
Configuration Options
Primary DC
Primary DC
![Page 15: Replication and Replica Sets](https://reader034.vdocument.in/reader034/viewer/2022042816/558bc438d8b42ac24b8b46af/html5/thumbnails/15.jpg)
> conf = { _id : "mySet”, members : [ {_id : 0, host : "A”, priority : 3}, {_id : 1, host : "B", priority : 2}, {_id : 2, host : "C”}, {_id : 3, host : "D", hidden : true}, {_id : 4, host : "E", hidden : true, slaveDelay : 3600} ]
} > rs.initiate(conf)
Configuration Options
Secondary DC Default Priority = 1
![Page 16: Replication and Replica Sets](https://reader034.vdocument.in/reader034/viewer/2022042816/558bc438d8b42ac24b8b46af/html5/thumbnails/16.jpg)
> conf = { _id : "mySet”, members : [ {_id : 0, host : "A”, priority : 3}, {_id : 1, host : "B", priority : 2}, {_id : 2, host : "C”}, {_id : 3, host : "D", hidden : true}, {_id : 4, host : "E", hidden : true, slaveDelay : 3600} ]
} > rs.initiate(conf)
Configuration Options
Analytics node
![Page 17: Replication and Replica Sets](https://reader034.vdocument.in/reader034/viewer/2022042816/558bc438d8b42ac24b8b46af/html5/thumbnails/17.jpg)
> conf = { _id : "mySet”, members : [ {_id : 0, host : "A”, priority : 3}, {_id : 1, host : "B", priority : 2}, {_id : 2, host : "C”}, {_id : 3, host : "D", hidden : true}, {_id : 4, host : "E", hidden : true, slaveDelay : 3600} ]
} > rs.initiate(conf)
Configuration Options
Backup node
![Page 18: Replication and Replica Sets](https://reader034.vdocument.in/reader034/viewer/2022042816/558bc438d8b42ac24b8b46af/html5/thumbnails/18.jpg)
Developing with Replica Sets
![Page 19: Replication and Replica Sets](https://reader034.vdocument.in/reader034/viewer/2022042816/558bc438d8b42ac24b8b46af/html5/thumbnails/19.jpg)
Secondary Secondary
Primary
Client ApplicationDriver
Write
Read
Strong Consistency
![Page 20: Replication and Replica Sets](https://reader034.vdocument.in/reader034/viewer/2022042816/558bc438d8b42ac24b8b46af/html5/thumbnails/20.jpg)
Secondary Secondary
Primary
Client ApplicationDriver
Write
Read Read
Delayed Consistency
![Page 21: Replication and Replica Sets](https://reader034.vdocument.in/reader034/viewer/2022042816/558bc438d8b42ac24b8b46af/html5/thumbnails/21.jpg)
Write Concern
• Network acknowledgement
• Wait for error
• Wait for journal sync
• Wait for replication
![Page 22: Replication and Replica Sets](https://reader034.vdocument.in/reader034/viewer/2022042816/558bc438d8b42ac24b8b46af/html5/thumbnails/22.jpg)
write
Driver
Primary
apply inmemory
Unacknowledged
![Page 23: Replication and Replica Sets](https://reader034.vdocument.in/reader034/viewer/2022042816/558bc438d8b42ac24b8b46af/html5/thumbnails/23.jpg)
Driver
Primary
apply inmemory
getLastError
MongoDB Acknowledged (wait for error)
![Page 24: Replication and Replica Sets](https://reader034.vdocument.in/reader034/viewer/2022042816/558bc438d8b42ac24b8b46af/html5/thumbnails/24.jpg)
Driver
Primary
write tojournal
apply inmemory
getLastError
write
j:trueWait for Journal Sync
![Page 25: Replication and Replica Sets](https://reader034.vdocument.in/reader034/viewer/2022042816/558bc438d8b42ac24b8b46af/html5/thumbnails/25.jpg)
Driver
Primary
Secondary
getLastError
write
w:2
replicate
apply inmemory
Wait for Replication
![Page 26: Replication and Replica Sets](https://reader034.vdocument.in/reader034/viewer/2022042816/558bc438d8b42ac24b8b46af/html5/thumbnails/26.jpg)
Tagging
• New in 2.0.0
• Control where data is written to, and read from
• Each member can have one or more tags – tags: {dc: "ny"} – tags: {dc: "ny",
subnet: "192.168", rack: "row3rk7"}
• Replica set defines rules for write concerns
• Rules can change without changing app code
![Page 27: Replication and Replica Sets](https://reader034.vdocument.in/reader034/viewer/2022042816/558bc438d8b42ac24b8b46af/html5/thumbnails/27.jpg)
{ _id : "mySet", members : [ {_id : 0, host : "A", tags : {"dc": "ny"}}, {_id : 1, host : "B", tags : {"dc": "ny"}}, {_id : 2, host : "C", tags : {"dc": "sf"}}, {_id : 3, host : "D", tags : {"dc": "sf"}}, {_id : 4, host : "E", tags : {"dc": "cloud"}}], settings : { getLastErrorModes : { allDCs : {"dc" : 3}, someDCs : {"dc" : 2}} } } > db.blogs.insert({...}) > db.runCommand({getLastError : 1, w : "someDCs"})
Tagging Example
![Page 28: Replication and Replica Sets](https://reader034.vdocument.in/reader034/viewer/2022042816/558bc438d8b42ac24b8b46af/html5/thumbnails/28.jpg)
Driver
Primary (SF)
Secondary (NY)
getLastError
write
W:allDCs
Secondary (Cloud)
replicate
replicate
apply inmemory
Wait for Replication (Tagging)
![Page 29: Replication and Replica Sets](https://reader034.vdocument.in/reader034/viewer/2022042816/558bc438d8b42ac24b8b46af/html5/thumbnails/29.jpg)
Read Preference Modes
• 5 modes (new in 2.2) – primary (only) - Default – primaryPreferred – secondary – secondaryPreferred – Nearest
When more than one node is possible, closest node is used for reads (all modes but primary)
![Page 30: Replication and Replica Sets](https://reader034.vdocument.in/reader034/viewer/2022042816/558bc438d8b42ac24b8b46af/html5/thumbnails/30.jpg)
Tagged Read Preference
• Custom read preferences
• Control where you read from by (node) tags – E.g. { "disk": "ssd", "use": "reporting" }
• Use in conjunction with standard read preferences – Except primary
![Page 31: Replication and Replica Sets](https://reader034.vdocument.in/reader034/viewer/2022042816/558bc438d8b42ac24b8b46af/html5/thumbnails/31.jpg)
Operational Considerations
![Page 32: Replication and Replica Sets](https://reader034.vdocument.in/reader034/viewer/2022042816/558bc438d8b42ac24b8b46af/html5/thumbnails/32.jpg)
Maintenance and Upgrade
• No downtime
• Rolling upgrade/maintenance – Start with Secondary – Primary last
![Page 33: Replication and Replica Sets](https://reader034.vdocument.in/reader034/viewer/2022042816/558bc438d8b42ac24b8b46af/html5/thumbnails/33.jpg)
Replica Set – 1 Data Center
• Single datacenter
• Single switch & power
• Points of failure: – Power – Network – Data center – Two node failure
• Automatic recovery of single node crash
Datacenter 2
Datacenter
Member 1
Member 2
Member 3
![Page 34: Replication and Replica Sets](https://reader034.vdocument.in/reader034/viewer/2022042816/558bc438d8b42ac24b8b46af/html5/thumbnails/34.jpg)
Replica Set – 2 Data Centers
• Multi data center
• DR node for safety
• Can’t do multi data center durable write safely since only 1 node in distant DC
Member 3
Datacenter 2
Member 1
Member 2
Datacenter 1
![Page 35: Replication and Replica Sets](https://reader034.vdocument.in/reader034/viewer/2022042816/558bc438d8b42ac24b8b46af/html5/thumbnails/35.jpg)
Replica Set – 3 Data Centers
• Three data centers
• Can survive full data center loss
• Can do w= { dc : 2 } to guarantee write in 2 data centers (with tags)
Datacenter 1Member 1
Member 2
Datacenter 2Member 3
Member 4
Datacenter 3Member 5
![Page 36: Replication and Replica Sets](https://reader034.vdocument.in/reader034/viewer/2022042816/558bc438d8b42ac24b8b46af/html5/thumbnails/36.jpg)
Just Use It
• Use replica sets
• Easy to setup – Try on a single machine
• Check doc page for RS tutorials – http://docs.mongodb.org/manual/replication/#tutorials
![Page 37: Replication and Replica Sets](https://reader034.vdocument.in/reader034/viewer/2022042816/558bc438d8b42ac24b8b46af/html5/thumbnails/37.jpg)
Chief Evangelist, 10gen
Steve Francia
#MongoDBSeoul
Thank You