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()