Basic Cluster Administration
mongod is the core database process. mongo is the interactive MongoDB shell that you use to connect to mongod.
mongod --dbpath /data/db --logpath /data/log/mongod.log --fork --replSet "M103" --keyFile /data/keyfile --bind_ip "127.0.0.1,192.168.103.100" --tlsMode requireTLS --tlsCAFile "/etc/tls/TLSCA.pem" --tlsCertificateKeyFile "/etc/tls/tls.pem"
note : --bind_ip 127.0.0.1,192.168.103.100
storage:
dbPath: /data/db/
journal:
enabled: true
# engine:
# mmapv1:
# wiredTiger:
# where to write logging data.
systemLog:
destination: file
logAppend: true
path: first_mongod/mongod.log
# network interfaces
net:
port: 27000
bindIp: "127.0.0.1,192.168.103.100"
# how the process runs
processManagement:
fork: true
timeZoneInfo: /usr/share/zoneinfo
tls:
mode: "requireTLS"
certificateKeyFile: "/etc/tls/tls.pem"
CAFile: "/etc/tls/TLSCA.pem"
security:
keyFile: "/data/keyfile"
processManagement:
fork: true
security:
authorization: enabled
mongo admin --host localhost:27000 --eval '
db.createUser({
user: "m103-admin",
pwd: "m103-pass",
roles: [
{role: "root", db: "admin"}
]
})
'
db.createUser(
{ user: "m103-application-user",
pwd: "m103-application-pass",
roles: [ { db: "applicationData", role: "readWrite" } ]
}
)
mongod --config /etc/mongod.conf
- ERROR: child process failed, exited with error number 1 To see additional information in this output, start without the "--fork" option
vagrant@m103:~$ sudo nano /etc/mongod.conf
vagrant@m103:~$ mongod --config /etc/mongod.conf
2020-03-09T12:28:25.617 0000 F CONTROL [main] Failed global initialization: FileNotOpen: Failed to open "/first_mongod/mongod.log"
Solution: Make sure the folder is created, else create it using mkdir and assign RW access
sudo chown vagrant:vagrant first_mongod/mongod.log
2020-03-09T12:40:31.616 0000 E QUERY [thread1] Error: listDatabases failed:{ "ok" : 0, "errmsg" : "there are no users authenticated", "code" : 13, "codeName" : "Unauthorized" } : _getErrorWithCode@src/mongo/shell/utils.js:25:13 Mongo.prototype.getDBs@src/mongo/shell/mongo.js:67:1 shellHelper.show@src/mongo/shell/utils.js:860:19 shellHelper@src/mongo/shell/utils.js:750:15 @(shellhelp2):1:1 MongoDB Enterprise > db.auth('m103-admin','m103-pass') Error: Authentication failed.
Solution: Login with user credentials
mongo --host localhost:27000 --authenticationDatabase "admin" -u "m103-admin" -p "m103-pass"
- QUERY [thread1] Error: listDatabases failed:{ "ok" : 0, "errmsg" : "not master and slaveOk=false", "code" : 13435, "codeName" : "NotMasterNoSlaveOk" } : _getErrorWithCode@src/mongo/shell/utils.js:25:13 Mongo.prototype.getDBs@src/mongo/shell/mongo.js:67:1 shellHelper.show@src/mongo/shell/utils.js:860:19 shellHelper@src/mongo/shell/utils.js:750:15 @(shellhelp2):1:1
Solution: Note: rs is the replication set
MongoDB Enterprise >
rs.status()
{
"info" : "run rs.initiate(...) if not yet done for the set",
"ok" : 0,
"errmsg" : "no replset config has been received",
"code" : 94,
"codeName" : "NotYetInitialized"
}
MongoDB Enterprise >
rs.initiate()
{
"info2" : "no configuration specified. Using a default configuration for the set",
"me" : "192.168.103.100:27000",
"ok" : 1
}
MongoDB Enterprise M103:OTHER>
rs.status()
{
"set" : "M103",
"date" : ISODate("2020-03-09T12:49:58.116Z"),
"myState" : 1,
"term" : NumberLong(1),
"syncingTo" : "",
"syncSourceHost" : "",
"syncSourceId" : -1,
"heartbeatIntervalMillis" : NumberLong(2000),
( Not complete)
- Different DB path than the default path /data/db. Mongod will now store data files in this new directory instead. Solution: create a new folder /var/mongodb/db/ and allow mongod to write files to this directory create this directory with sudo, because /var is owned by root use chown to change the owner of this directory to vagrant:vagrant edit your config file to use this new directory as the dbpath
use admin
db.shutdownServer()
quit()
Start to see reflected changes
~$ mongod --config /etc/mongod.conf
Aborted (core dumped)
Solution: Likely there is an other instance of mongod running. Find the process and kill it
To find process
vagrant@m103:~$ sudo lsof -i -P -n | grep 27000
mongod 2109 vagrant 12u IPv4 13601 0t0 TCP 127.0.0.1:27000 (LISTEN)
mongod 2109 vagrant 13u IPv4 13602 0t0 TCP 192.168.103.100:27000 (LISTEN)
mongo 2138 vagrant 4u IPv4 13619 0t0 TCP 127.0.0.1:56336->127.0.0.1:27000 (ESTABLISHED)
vagrant@m103:~$ sudo lsof -i -P -n | grep mongod
mongod 2109 vagrant 12u IPv4 13601 0t0 TCP 127.0.0.1:27000 (LISTEN)
mongod 2109 vagrant 13u IPv4 13602 0t0 TCP 192.168.103.100:27000 (LISTEN)
To kill the process
kill -9 2109
- Detected unclean shutdown - /data/db/mongod.lock is not empty.
Solution:
mongod --repair
Not recommanded but if you want to repair your data files without preserving the original files
sudo rm /var/lib/mongodb/mongod.lock
sudo mongod --dbpath /var/lib/mongodb/ --repair
sudo mongod --dbpath /var/lib/mongodb/ --journal
Make sure that you leave you terminal running in which you have run above lines, don't press 'Ctrl c' or quit it. Type the command to start mongo now in another window.
- Error: couldn't connect to server localhost:27000, connection attempt failed: SocketException: Error connecting to localhost:27000 (127.0.0.1:27000) :: caused by :: Connection refused : connect@src/mongo/shell/mongo.js:343:13 @(connect):2:6 exception: connect failed
Hint: Check the mongod logs for failure
- exception in initAndListen: 29 Data directory /data/db not found., terminating Solution: Error happen because dbpath /data/db/ (default config) does not exist. You need to create data folder and set permission for it.
sudo mkdir -p /data/db/
sudo chown id -u /data/db
then start the mongo