There are some production notes about mongodb version 3.2 before install. https://docs.mongodb.org/manual/administration/production-notes/ Installation on Ubuntu
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv EA312927
echo "deb http://repo.mongodb.org/apt/ubuntu trusty/mongodb-org/3.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.2.list
sudo apt-get update
For latest stable version:
sudo apt-get install -y mongodb-org
For specific release of MongoDB:
sudo apt-get install -y mongodb-org=3.2.0 mongodb-org-server=3.2.0 mongodb-org-shell=3.2.0 mongodb-org-mongos=3.2.0 mongodb-org-tools=3.2.0
Service:
sudo service mongod start/stop/restart
Mongo Command Line:
$ mongo
MongoDB shell version: 3.2.0
connecting to: test
>
Port of mongod service: 27017
Mongod Log Location: /var/log/mongodb
Mongod Installation Location: /var/lib/mongodb
After Ubuntu 16.04 there is no service to start MongoDB. We just need to edit some service configuration. Open a new text then edit as below.
sudo nano /etc/systemd/system/mongodb.service
[Unit]
Description=High-performance, schema-free document-oriented database
After=network.target
[Service]
User=mongodb
ExecStart=/usr/bin/mongod --quiet --config /etc/mongod.conf
[Install]
WantedBy=multi-user.target
sudo systemctl start mongodb
Sample Init Script For mongos Service
#!/bin/bash
### BEGIN INIT INFO
# Provides: MongoDB Config Server
# Required-Start: $network
# Required-Stop: $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start/Stop MongoDB Config server
### END INIT INFO
start() {
/usr/bin/mongos --configdb 192.168.3.187:27018 --port 27019 &
}
stop() {
for a in `ps -ef | grep 27018 | awk '{print $2}'`; do kill -9 $a; done
}
case $1 in
start|stop) $1;;
restart) stop; start;;
*) echo "Run as $0 <start|stop|restart>"; exit 1;;
esac
sudo update-rc.d mongos defaults
Problem of WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'
sudo nano /etc/init/mongod.conf
// add after 'chown $DEAMONUSER /var/run/mongodb.pid' //
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
// and before 'end script' //
sudo service mongod restart
Adding some users (Role-based)
$ mongo
use admin
db.createUser(
{
user: "root",
pwd: "abc1234",
roles: [ "root" ]
}
)
use mqtt
db.createUser(
{
user: "mqttUser",
pwd: "abc1234",
roles: [ { role: "readWrite", db: "mqtt" } ]
}
)
Enable Role Based Authentication
security:
authorization: enabled
Sample Connection of mongod Service
mongo --host 192.168.1.50 --port 27017 -u root -p abc1234 --authenticationDatabase admin
Diagram of mongo Services
Enable Internal Authentication
openssl rand -base64 741 > mongodb-keyfile
sudo su
$ root
mkdir /srv/mongodb
openssl rand -base64 741 > /srv/mongodb/mongodb-keyfile
chmod 600 /srv/mongodb/mongodb-keyfile
chown mongodb:mongodb mongodb-keyfile
exit
$ username
Deploy a Replicated Config Servers
security:
keyFile: /srv/mongodb/mongodb-keyfile
sharding:
clusterRole: configsvr
replication:
replSetName: configReplSet
Deloy a Replicated Shard Servers
security:
keyFile: /srv/mongodb/mongodb-keyfile
sharding:
clusterRole: shardsvr
replication:
replSetName: shardReplSet
Initiate the Replica Sets
rs.initiate()
rs.conf({
_id: <string>,
version: <int>,
protocolVersion: <number>,
members: [
{
_id: <int>,
host: <string>,
arbiterOnly: <boolean>,
buildIndexes: <boolean>,
hidden: <boolean>,
priority: <number>,
tags: <document>,
slaveDelay: <int>,
votes: <number>
},
...
],
settings: {
chainingAllowed : <boolean>,
heartbeatIntervalMillis : <int>,
heartbeatTimeoutSecs: <int>,
electionTimeoutMillis : <int>,
getLastErrorModes : <document>,
getLastErrorDefaults : <document>
}
})
rs.status()
For more details: https://docs.mongodb.org/manual/reference/replica-configuration/ Adding some members
rs.add("mongodb1.example.net")
rs.add("mongodb2.example.net")
Start to mongos Services
mongos --configdb configReplSetName/<cfgsvr1:port1>,<cfgsvr2:port2>,<cfgsvr3:port3>
Add Shards to the Cluster
$ mongo --host <hostname of machine running mongos> --port <port mongos listens on>
sh.addShard( "shardReplSet/mongodb0.example.net:27017" )
sh.enableSharding("<database>")
sh.shardCollection("<database>.<collection>", shard-key-pattern)
Example of shard-key pattern is
{ "zipcode": 1, "name": 1 }
sh.status()