Working with Replication

1. Understanding Replica Set Architecture

   ┌──────────┐   replication    ┌──────────┐
   │ Primary  │ ───────────────▶ │Secondary │
   └────┬─────┘                  └──────────┘
        │                        ┌──────────┐
        └──────────────────────▶ │Secondary │
                                 └──────────┘
      
RoleDetail
PrimaryAccepts writes
SecondaryReplicates oplog; can serve reads
ArbiterVotes only; no data

2. Initiating Replica Set

rs.initiate({ _id: "rs0", members: [
  { _id: 0, host: "m1:27017" },
  { _id: 1, host: "m2:27017" },
  { _id: 2, host: "m3:27017" }
]});
MethodDetail
rs.initiate()Bootstraps replica set
rs.conf() / rs.status()Inspect

3. Adding Replica Members

MethodForm
rs.addrs.add("m4:27017")
With configrs.add({host, priority, votes, hidden})

4. Removing Replica Members

MethodDetail
rs.remove("host:port")Removes from config
ReconfigUse rs.reconfig() for atomic updates

5. Configuring Priority

ValueEffect
0Cannot become primary
1 (default)Normal eligibility
>1Preferred primary

6. Setting Up Arbiter

AspectDetail
Addrs.addArb("host:port")
PurposeBreak ties in odd-vote situations
CautionAvoid PSA topologies—affects majority writes

7. Using Hidden Members

PropertyDetail
hidden: trueInvisible to clients
priority: 0Required
UseAnalytics, backup, reporting

8. Configuring Delayed Members

PropertyDetail
secondaryDelaySecsDelay before applying ops
Requirespriority:0, hidden:true
UseProtection against operator errors

9. Checking Replica Status

MethodDetail
rs.status()Member states, lag, optime
rs.printReplicationInfo()Oplog window summary
rs.printSecondaryReplicationInfo()Per-secondary lag

10. Forcing Election

MethodDetail
rs.stepDown(secs)Steps down current primary
rs.freeze(secs)Prevent secondary from being elected
replSetStepUpRequest election

11. Understanding Oplog

AspectDetail
Namespacelocal.oplog.rs (capped)
IdempotentOps can be re-applied safely
WindowHow far back secondaries can resync

12. Setting Oplog Size

MethodDetail
--oplogSize MBSet at startup
replSetResizeOplogResize at runtime (4.0+)
minRetentionHoursMinimum retention window (4.4+)