Mongodb的安装与使用

2021年2月25日 作者 陈益

一、配置mongodb.conf

数据库文件位置

dbpath=/usr/local/mongodb-3.4.24/27017/data

日志文件的路径

logpath=/usr/local/mongodb-3.4.24/27017/log/mongodb.log

是否追加方式写入日志,默认True

logappend=true

设置绑定ip

bind_ip = 0.0.0.0

设置端口

port = 27017

是否以守护进程方式运行,默认false

fork = true

启用日志文件,默认启用

journal=true

设置启用授权

auth = true

设置副本集

keyFile = /usr/local/mongodb-3.4.24/mongodb-keyfile
replSet=balidropMogdo

二、写入 mongodb-keyfile
openssl rand -base64 745 > mongodb-keyfile
chmod 600 mongodb-keyfile

三、启动3台MongoDB实例
mongod –config /usr/local/mongodb-3.4.24/27017/mongodb.conf
mongod –config /usr/local/mongodb-3.4.24/27018/mongodb.conf
mongod –config /usr/local/mongodb-3.4.24/27019/mongodb.conf

四、通过shell远程链接
mongo 121.4.43.75:27017/admin -uroot -p
mongo 121.4.43.75:27018/admin -uroot -p
mongo 121.4.43.75:27019/admin -uroot -p

五、配置副本集
let rsconf={_id:’balidropMogdo’,members:[{_id:0,host:’192.168.8.167:27017′},{_id:1,host:’192.168.8.167:27018′},{_id:2,host:’192.168.8.167:27019′}]};
rs.initiate(rsconf);

//如果是副本集,远程连接,那么必须设置members中的成员为外网的IP
let reconf = rs.conf();
reconf.members[0].host = "121.4.43.75:27017";
reconf.members[1].host = "121.4.43.75:27018";
reconf.members[2].host = "121.4.43.75:27019";
rs.reconfig(reconf );

六、测试
进入备份节点:

show dbs
balidropMogdo:SECONDARY> show dbs
2021-02-02T14:10:29.700+0800 E QUERY [thread1] Error: listDatabases failed:{
"ok" : 0,
"errmsg" : "not master and slaveOk=false",
"code" : 13435,
"codeName" : "NotMasterNoSlaveOk"
}
报错了

rs.slaveOk()
balidropMogdo:SECONDARY> show dbs
admin 0.000GB
local 0.000GB
summer 0.000GB

执行insert操作
balidropMogdo:SECONDARY> db.tmp.find();
Error: error: {
"ok" : 0,
"errmsg" : "not master and slaveOk=false",
"code" : 13435,
"codeName" : "NotMasterNoSlaveOk"
}

进入主节点
balidropMogdo:PRIMARY> show dbs
admin 0.000GB
local 0.000GB
summer 0.000GB

balidropMogdo:PRIMARY> use summer
switched to db summer

balidropMogdo:PRIMARY> db.tmp.insert({‘name’:’kee’});
WriteResult({ "nInserted" : 1 })

测试节点自动切换

自动变成了主节点
停掉3个节点中的2个从节点之后,主节点自动变成了从节点了,副本集提供只读功能,没有写的功能。

启动另外两个节点之后,集群已经工作了。

注意事项:
如果启用了 auth = true ,那么 keyFile 必须。
在其它的接点上不需要设置root用户,仅在执行节点上进行设置即可。