Upgrade to Pro — share decks privately, control downloads, hide ads and more …

MongoDB - Replication and Replica Sets

Sridhar Nanjundeswaran
February 24, 2012
68

MongoDB - Replication and Replica Sets

Presented at MongoDB LA. Jan 2012

Sridhar Nanjundeswaran

February 24, 2012
Tweet

Transcript

  1. Agenda • Introduction to replica sets • Durability and Consistency

    • Options and configuration • Common deployment scenarios • Behind the Scenes
  2. Replica Set - Initialize • Initialize -> Election • Primary

    + data replication from primary to secondary Node 1 Secondary Node 2 Secondary Node 3 Primary Replication Replication Heartbeat
  3. Replica Set - Failure • Primary down/network failure • Automatic

    election of new primary if majority exists Node 1 Secondary Node 2 Secondary Node 3 Primary Heartbeat Primary Election
  4. Replica Set - Failover • New primary elected • Replication

    established from new primary Node 1 Secondary Node 2 Primary Node 3 Primary Heartbeat
  5. Replica Set - Recovery • Down node comes up •

    Rejoins sets • Recovery and then secondary Node 1 Secondary Node 2 Primary Node 3 Secondary Replication Replication Heartbeat
  6. Durability • Fire and forget • Wait for error •

    Wait for journal sync • Wait for fsync • Wait for replication
  7. Priorities • Floating point number between 0..1000 • Highest member

    that is up to date wins • Up to date == within 10 seconds of primary • If a higher priority member catches up, it will force election and win
  8. Slave Delay • Lags behind master by configurable time delay

    • Automatically hidden from clients • Protects against operator errors • Fat fingering • Application corrupts data
  9. Tagging • New in 2.0.0 • Control over where data

    is written to • Each member can have one or more tags e.g. • tags: {dc: "ny"} • tags: {dc: "ny",
 ip: "192.168",
 rack: "row3rk7"} • Replica set defines rules for where data resides • Rules can change without change application code
  10. Tagging - example { _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 : "allDCs"})
  11. Others • Arbiters • Vote in elections • Don’t store

    a copy of data • Use as tie breaker • Hidden • Not reported in isMaster • Hidden from slaveOk reads
  12. Replica Set – 1 Data Center • Single datacenter •

    Single switch & power • Points of failure: • Power • Network • Datacenter • Two node failure • Automatic recovery of single node crash Member 1 Member 2 Member 3
  13. Replica Set – 2 data centers • Multi datacenter •

    DR node for safety • Can’t do multi data center durable write safely since only 1 node in distant DC Member 1 Member 2 Member 3 DC1 DC2
  14. 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 Member 1 Member 2 Member 3 Member 4 DC2 Member 5 - DR DC1 DC3
  15. Local database • config • Oplog • Capped collection •

    Idempotent version of operation stored db.replsettest.update({},{$inc:{set:1}}) { "ts" : …, "h" : …, "op" : "u", "ns" : "mongo_la.replsettest", "o2" : { "_id" : ObjectId("4f177bc768dad821278224d8") }, "o" : { "$set" : { "set" : 2 } } }
  16. @mongodb © Copyright 2010 10gen Inc. conferences, appearances, and meetups

    http://www.10gen.com/events http://bit.ly/mongofb Facebook | Twitter | LinkedIn http://linkd.in/joinmongo download at mongodb.org We’re Hiring ! [email protected] @snanjund