Tutorials Logic, IN +91 8092939553 info@tutorialslogic.com
FAQs Support
Navigation
Home About Us Contact Us Blogs FAQs
Tutorials
All Tutorials
Services
Academic Projects Resume Writing Interview Questions Website Development
Compiler Tutorials

MongoDB Replication

What is a Replica Set?

A replica set is a group of MongoDB instances that maintain the same dataset. It provides redundancy and high availability. If the primary node fails, an automatic election promotes one of the secondaries to become the new primary — with no manual intervention required.

RoleDescription
PrimaryReceives all write operations. Only one primary per replica set at a time.
SecondaryReplicates data from the primary via the oplog. Can serve reads (with read preference).
ArbiterParticipates in elections but holds no data. Used to break ties in even-numbered sets.

Setting Up a 3-Node Replica Set

Initializing a Replica Set
// Start 3 mongod instances with --replSet flag
// mongod --replSet "rs0" --port 27017 --dbpath /data/rs0
// mongod --replSet "rs0" --port 27018 --dbpath /data/rs1
// mongod --replSet "rs0" --port 27019 --dbpath /data/rs2

// Connect to the first instance and initiate the replica set
mongosh --port 27017

rs.initiate({
  _id: "rs0",
  members: [
    { _id: 0, host: "localhost:27017", priority: 2 },  // preferred primary
    { _id: 1, host: "localhost:27018", priority: 1 },
    { _id: 2, host: "localhost:27019", priority: 1 }
  ]
})

// Check replica set status
rs.status()

// Check replica set configuration
rs.conf()

// Add a new member to an existing replica set
rs.add("localhost:27020")

// Add an arbiter
rs.addArb("localhost:27021")

// Remove a member
rs.remove("localhost:27020")

Read Preferences

Read Preferences and Write Concern
// Read Preferences — control where reads are routed
// primary          — always read from primary (default, most consistent)
// primaryPreferred — read from primary if available, else secondary
// secondary        — always read from a secondary
// secondaryPreferred — read from secondary if available, else primary
// nearest          — read from the member with lowest network latency

// Set read preference in connection string
mongosh "mongodb://host1:27017,host2:27018,host3:27019/mydb?replicaSet=rs0&readPreference=secondaryPreferred"

// Set read preference per query
db.users.find({ active: true }).readPref("secondary")

// Write Concern — control acknowledgment level for writes
db.users.insertOne(
  { name: "Alice" },
  { writeConcern: { w: "majority", j: true, wtimeout: 5000 } }
)
// w: 1         — acknowledged by primary only (fast, less safe)
// w: "majority" — acknowledged by majority of replica set (recommended)
// j: true      — write must be journaled before acknowledgment
// wtimeout     — max milliseconds to wait for write concern
Monitoring Replication Lag
// Check replica set status and replication lag
rs.status()
// Look for: members[].optimeDate and members[].lastHeartbeatMessage

// Check oplog size and usage
use local
db.oplog.rs.stats()
db.oplog.rs.find().sort({ $natural: -1 }).limit(1)

// Step down the primary (triggers election)
rs.stepDown()

// Freeze a secondary (prevent it from becoming primary for N seconds)
rs.freeze(120)

// Check if current node is primary
db.isMaster()
// or
rs.isMaster()

Ready to Level Up Your Skills?

Explore 500+ free tutorials across 20+ languages and frameworks.