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