
mongodb-replication-sharding
by pluginagentmarketplace
MongoDB developer plugin with NoSQL patterns and aggregation pipelines
SKILL.md
name: mongodb-replication-sharding version: "2.1.0" description: Master MongoDB replication, replica sets, and sharding for distributed deployments. Learn failover, shard keys, and cluster management. Use when setting up high availability or scaling horizontally. sasmp_version: "1.3.0" bonded_agent: 05-mongodb-replication-sharding bond_type: PRIMARY_BOND
Production-Grade Skill Configuration
capabilities:
- replica-set-setup
- sharding-configuration
- failover-management
- shard-key-design
- cluster-monitoring
input_validation: required_context: - deployment_type - availability_requirements optional_context: - data_size - geographic_distribution - rpo_rto_targets
output_format: topology_design: object configuration_steps: array monitoring_setup: object failover_procedure: object
error_handling: common_errors: - code: REP001 condition: "No primary in replica set" recovery: "Check member connectivity, verify election priority, review heartbeat" - code: REP002 condition: "Replication lag too high" recovery: "Check oplog size, network latency, secondary hardware" - code: REP003 condition: "Shard key causing hotspot" recovery: "Analyze chunk distribution, consider resharding with hashed key"
prerequisites: mongodb_version: "4.0+" required_knowledge: - basic-administration - networking-basics infrastructure_requirements: - "Minimum 3 nodes for replica set" - "Minimum 3 config servers for sharding"
testing: unit_test_template: | // Verify replica set status const status = await admin.command({ replSetGetStatus: 1 }) expect(status.members.filter(m => m.stateStr === 'PRIMARY')).toHaveLength(1) expect(status.members.filter(m => m.stateStr === 'SECONDARY').length).toBeGreaterThanOrEqual(1)
MongoDB Replication & Sharding
Master distributed MongoDB architectures.
Quick Start
Replica Set Setup
# Start mongod instances with replica set config
mongod --replSet rs0 --port 27017
mongod --replSet rs0 --port 27018
mongod --replSet rs0 --port 27019
# Initiate replica set
mongo mongodb://localhost:27017
> rs.initiate({
_id: 'rs0',
members: [
{ _id: 0, host: 'localhost:27017', priority: 1 },
{ _id: 1, host: 'localhost:27018', priority: 0.5 },
{ _id: 2, host: 'localhost:27019', priority: 0 }
]
})
# Check replica set status
> rs.status()
Replication Concepts
Primary: Accepts reads and writes
Secondary: Replicates from primary, serves reads only
Arbiter: Participates in elections, no data
Write Concerns
// Unacknowledged
await collection.insertOne(doc, { writeConcern: { w: 0 } })
// Acknowledged (single node)
await collection.insertOne(doc, { writeConcern: { w: 1 } })
// Majority
await collection.insertOne(doc, { writeConcern: { w: 'majority' } })
// Majority with timeout
await collection.insertOne(doc, {
writeConcern: { w: 'majority', wtimeout: 5000 }
})
Read Preferences
// Read from primary only (default)
find().setReadPreference('primary')
// Read from primary, failover to secondary
find().setReadPreference('primaryPreferred')
// Read from secondary if available
find().setReadPreference('secondary')
// Read from secondary, failover to primary
find().setReadPreference('secondaryPreferred')
// Read from nearest node
find().setReadPreference('nearest')
Sharding
Enable Sharding
# Start config servers
mongod --configsvr --dbpath /data/config0 --port 27019
mongod --configsvr --dbpath /data/config1 --port 27020
mongod --configsvr --dbpath /data/config2 --port 27021
# Start mongos router
mongos --configdb localhost:27019,localhost:27020,localhost:27021
# Start shard servers
mongod --shardsvr --dbpath /data/shard0 --port 27017
mongod --shardsvr --dbpath /data/shard1 --port 27018
Shard Key Design
// Enable sharding on database
sh.enableSharding('myapp')
// Shard collection with key
sh.shardCollection('myapp.users', { email: 1 })
// Hash-based sharding (better distribution)
sh.shardCollection('myapp.logs', { userId: 'hashed' })
// Compound shard key
sh.shardCollection('myapp.events', { tenantId: 1, timestamp: 1 })
Check Sharding Status
// Get sharding status
sh.status()
// Get shard information
db.adminCommand({ listShards: 1 })
// Get chunk distribution
sh.balancerStatus()
Failover & High Availability
Replica Set Elections
// Trigger election (step down)
rs.stepDown()
// View election status
rs.status()
// Check oplog
db.oplog.rs.find().sort({ ts: -1 }).limit(5)
Monitor Replication Lag
// Check replica set members lag
rs.status().members
// Monitor oplog length
db.oplog.rs.find().limit(1).sort({ $natural: -1 })
Transactions (MongoDB 4.0+)
// Multi-document transaction
const session = client.startSession();
try {
await session.withTransaction(async () => {
await users.insertOne({ name: 'John' }, { session });
await accounts.insertOne({ userId: '...', balance: 100 }, { session });
});
} finally {
await session.endSession();
}
Python Examples
from pymongo import MongoClient
# Connect to replica set
client = MongoClient('mongodb://localhost:27017,localhost:27018,localhost:27019/?replicaSet=rs0')
# Write concern
collection.insert_one(
{'name': 'John'},
write_concern=WriteConcern(w='majority')
)
# Read preference
collection.find().with_options(
read_preference=ReadPreference.SECONDARY
)
Monitoring
✅ Check replica set status regularly ✅ Monitor replication lag ✅ Watch chunk migration progress ✅ Monitor oplog size ✅ Alert on member failures ✅ Track failover events ✅ Monitor balancer activity ✅ Check data distribution
Score
Total Score
Based on repository quality metrics
SKILL.mdファイルが含まれている
ライセンスが設定されている
100文字以上の説明がある
GitHub Stars 100以上
3ヶ月以内に更新がある
10回以上フォークされている
オープンIssueが50未満
プログラミング言語が設定されている
1つ以上のタグが設定されている
Reviews
Reviews coming soon