MongoDB Core Architecture and Deployment Strategies

Transparent Huge Pages Configuration

Linux Transparent Huge Pages (THP) can degrade database performance due to non-contiguous memory access patterns. MongoDB requires disabling THP for optimal operation:

# Permanent system configuration
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
  echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
  echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi

Apply temporary settings without reboot:

echo never | sudo tee /sys/kernel/mm/transparent_hugepage/enabled
echo never | sudo tee /sys/kernel/mm/transparent_hugepage/defrag

Service Installation Procedure

Create dedicated service account:

sudo useradd -r mdbuser
sudo passwd mdbuser

Establish directory structure:

sudo mkdir -p /var/mongodb/{conf,logs,primary/db}
sudo chown -R mdbuser:mdbuser /var/mongodb

Deploy MongoDB binaries:

tar xzf mongodb-linux-x86_64-6.0.10.tgz
sudo cp -a mongodb-linux-x86_64-6.0.10/bin/ /var/mongodb/bin

Configure environment for service account:

su - mdbuser
echo 'export PATH=/var/mongodb/bin:$PATH' >> ~/.bashrc
source ~/.bashrc

YAML Configuration Implementation

Sample configuration file (/var/mongodb/conf/mongod.yaml):

systemLog:
  destination: file
  path: /var/mongodb/logs/server.log
  logAppend: true
storage:
  dbPath: /var/mongodb/primary/db
  journal:
    enabled: true
processManagement:
  fork: true
net:
  port: 27000
  bindIp: 0.0.0.0
security:
  authorization: enabled

Start service using configuration:

mongod -f /var/mongodb/conf/mongod.yaml

Systemd service unit (/etc/systemd/system/mongodb.service):

[Unit]
Description=MongoDB Database Server
After=network.target

[Service]
User=mdbuser
ExecStart=/var/mongodb/bin/mongod -f /var/mongodb/conf/mongod.yaml
Restart=always

[Install]
WantedBy=multi-user.target

Access Control Configuration

Create administrative user:

use admin
db.createUser({
  user: "admin_user",
  pwd: "secure_password_123",
  roles: [{ role: "root", db: "admin" }]
})

Enable authentication in configuration:

security:
  authorization: enabled

Connect with authentication:

mongo -u admin_user -p secure_password_123 --authenticationDatabase admin

Create application-specific user with limited privileges:

use application_db
db.createUser({
  user: "app_writer",
  pwd: "writer_password",
  roles: [{ role: "readWrite", db: "application_db" }]
})

Replica Set Deployment

Configure multi-instance environment (ports 27001-27003):

replication:
  replSetName: "mdb_cluster"
  oplogSizeMB: 4096

Initialize replica set:

rs.initiate({
  _id: "mdb_cluster",
  members: [
    { _id: 0, host: "localhost:27001" },
    { _id: 1, host: "localhost:27002" },
    { _id: 2, host: "localhost:27003", arbiterOnly: true }
  ]
})

Configure delayed secondary node:

cfg = rs.conf()
cfg.members[2].priority = 0
cfg.members[2].hidden = true
cfg.members[2].slaveDelay = 3600
rs.reconfig(cfg)

Sharded Cluster Architecture

Three-tier deployment structure:

  • Config servers (3-node replica set)
  • Shard servers (2 replica sets)
  • Query routers (mongos instances)

Config server configuration:

sharding:
  clusterRole: configsvr
replication:
  replSetName: "config_cluster"

Mongos configuration:

sharding:
  configDB: config_cluster/localhost:27011,localhost:27012,localhost:27013

Add shards to cluster:

sh.addShard("shard1/localhost:27021,localhost:27022,localhost:27023")
sh.addShard("shard2/localhost:27024,localhost:27025,localhost:27026")

Data Partitioning Strategies

Range-based sharding:

sh.enableSharding("application_db")
db.collection.createIndex({ shard_key: 1 })
sh.shardCollection("application_db.collection", { shard_key: 1 })

Hash-based sharding:

db.collection.createIndex({ hash_key: "hashed" })
sh.shardCollection("application_db.collection", { hash_key: "hashed" })

Backup and Recovery Operations

Logical export using mongoexport:

mongoexport --uri="mongodb://admin_user:password@localhost:27000/application_db" \
  --collection=logs --out=logs.json

Point-in-time recovery with oplog:

mongodump --port 27001 --oplog -o /backup/snapshot
mongorestore --port 27002 --oplogReplay /backup/snapshot

Restoring to specific operation point:

mongorestore --port 27002 --oplogReplay \
  --oplogLimit "1689245000:1" /backup/snapshot

Tags: MongoDB 6.0 WiredTiger Sharding Replica Sets YAML Configuration

Posted on Mon, 26 Oct 2026 16:07:17 +0000 by JayNak