MongoDB Replication Interview Questions

Introduction

This guide covers essential MongoDB replication concepts commonly asked in technical interviews. Each question includes detailed answers and practical examples.

Medium

1. What is MongoDB replication and why is it important?

MongoDB replication is a process of synchronizing data across multiple servers to ensure high availability and data redundancy. Key benefits include:

  • High Availability
  • Data Redundancy
  • Disaster Recovery
  • Read Scaling
  • Maintenance without Downtime
Replication Components:
  • Primary Node
  • Secondary Nodes
  • Arbiter Node
  • Oplog
  • Replica Set
Hard

2. How do you set up and configure a replica set?

Replica set setup and configuration:

1. Basic Configuration
# Create replica set configuration
config = {
    _id: "myReplicaSet",
    members: [
        { _id: 0, host: "mongodb1:27017" },
        { _id: 1, host: "mongodb2:27017" },
        { _id: 2, host: "mongodb3:27017" }
    ]
}

# Initialize replica set
rs.initiate(config)

# Check replica set status
rs.status()

# Add a new member
rs.add("mongodb4:27017")

# Remove a member
rs.remove("mongodb4:27017")
2. Advanced Configuration
# Configure with priority and tags
config = {
    _id: "myReplicaSet",
    members: [
        { _id: 0, host: "mongodb1:27017", priority: 2 },
        { _id: 1, host: "mongodb2:27017", priority: 1 },
        { _id: 2, host: "mongodb3:27017", priority: 0.5 },
        { _id: 3, host: "mongodb4:27017", arbiterOnly: true }
    ],
    settings: {
        chainingAllowed: true,
        heartbeatTimeoutSecs: 10,
        electionTimeoutMillis: 10000
    }
}

# Initialize with advanced config
rs.reconfig(config)
Hard

3. How do you manage replica set operations?

Replica set operations management:

1. Monitoring and Maintenance
# Check replica set status
rs.status()

# Check replication lag
db.printSlaveReplicationInfo()

# Check oplog status
db.getReplicationInfo()

# Force reconfiguration
rs.reconfig(config, { force: true })

# Step down primary
rs.stepDown()

# Freeze secondary
rs.freeze(60)  # Freeze for 60 seconds
2. Failover Handling
# Check current primary
rs.isMaster()

# Force election
rs.freeze(0)  # Unfreeze all nodes
rs.stepDown()  // On current primary

# Check failover status
db.adminCommand({ replSetGetStatus: 1 })

# Monitor failover events
db.currentOp().inprog.forEach(function(op) {
    if (op.command && op.command.replSetStepDown) {
        printjson(op);
    }
})
Hard

4. How do you handle replication lag and consistency?

Replication lag and consistency management:

1. Monitoring Lag
# Check replication lag
db.printSlaveReplicationInfo()

# Monitor oplog window
db.getReplicationInfo()

# Check secondary status
rs.status().members.forEach(function(member) {
    if (member.stateStr === "SECONDARY") {
        print("Lag for " + member.name + ": " + member.optimeDate);
    }
})

# Set read preference
db.getMongo().setReadPref('secondary')
2. Consistency Management
# Write concern configuration
db.users.insert({
    name: "John",
    email: "john@example.com"
}, { writeConcern: { w: "majority", wtimeout: 5000 } })

# Read concern configuration
db.users.find().readConcern("majority")

# Check consistency
db.runCommand({
    findAndModify: "users",
    query: { name: "John" },
    update: { $set: { status: "active" } },
    writeConcern: { w: "majority" }
})
Hard

5. What are the replication best practices?

Follow these replication best practices:

1. Configuration Best Practices
# Optimal replica set configuration
config = {
    _id: "myReplicaSet",
    members: [
        { _id: 0, host: "mongodb1:27017", priority: 2 },
        { _id: 1, host: "mongodb2:27017", priority: 1 },
        { _id: 2, host: "mongodb3:27017", priority: 0.5 }
    ],
    settings: {
        chainingAllowed: false,
        heartbeatTimeoutSecs: 10,
        electionTimeoutMillis: 10000,
        catchUpTimeoutMillis: 2000
    }
}

# Configure write concern
db.adminCommand({
    setDefaultRWConcern: 1,
    defaultWriteConcern: { w: "majority" },
    defaultReadConcern: { level: "majority" }
})
2. Monitoring and Maintenance
# Regular health checks
function checkReplicaSetHealth() {
    const status = rs.status();
    
    // Check member states
    status.members.forEach(function(member) {
        if (member.stateStr !== "PRIMARY" && 
            member.stateStr !== "SECONDARY") {
            print("Warning: " + member.name + " is " + member.stateStr);
        }
    });
    
    // Check replication lag
    const lag = db.printSlaveReplicationInfo();
    if (lag > 10) {  // More than 10 seconds
        print("Warning: High replication lag");
    }
    
    // Check oplog window
    const oplog = db.getReplicationInfo();
    if (oplog.timeDiff < 24 * 60 * 60) {  // Less than 24 hours
        print("Warning: Small oplog window");
    }
}

Next Steps

Continue your MongoDB interview preparation with: