MongoDB管理与维护手册
高性能、开源、无模式的文档数据库。
2. MongoDB的安装
在官方下载操作系统版本对应的MongoDB版本,解压即可。
3. MongoDB的启动
进入解压后的MongoDB目录,运行其bin目录下的mongod:
① 命令行方式
/usr/local/mongodb-linux-x86_64-static-legacy-2.0.2/bin/mongod--dbpath [datafile directory] --logpath [log file directory] --logappend--journal --oplogSize [N] --port [port] --fork
例如:/usr/local/mongodb-linux-x86_64-static-legacy-2.0.2/bin/mongod--dbpath /data1/mongodata/db/ --logpath /data1/mongodata/log/mongo.log--logappend --journal --oplogSize 1 --port 27017 --fork
② 配置文件方式
创建配置文件:vi/etc/mongod.cnf
dbpath= /data1/mongodata/db/
logpath= /data1/mongodata/log/mongo.log
logappend= true
journal= true
oplogSize= 1
port= 27017
fork= true
启动时加上-f参数,指向配置文件即可:
/usr/local/mongodb-linux-x86_64-static-legacy-2.0.2/bin/mongod-f /etc/mongod.cnf
① 在session中直接执行:ctrl+c
② 在admin库中执行db.shutdownServer()命令
use admin
db.shutdownServer()
/usr/local/mongodb-linux-x86_64-static-legacy-2.0.2/bin/mongo--port 27017
6. MongoDB一致性备份
mongodump
锁定数据库:
use admin
db.runCommand({"fsync":1,"lock":1})
一致性备份:
/usr/local/mongo/bin/mongodump-h 10.10.10.10 --port 27017 -d mytest -o/data/mytest.bak
mongorestore
/usr/local/mongo/bin/mongodump-h 10.10.10.10 --port 27017 -d mytest/data/mytest.bak
db.serverStatus()命令
命令解释可参考KM文档:http://km.oa.com/group/515/articles/show/122020
ps -ef | grep mongod
执行db.serverStatus().mem
另外,通过mongostat来监控mongodb的内存使用
use admin
db.runCommand({closeAllDatabases:1})
另外,通过调整内核参数drop caches可以释放缓存
sysctl -w vm.drop_caches=1
① 命令行方式
/usr/local/mongodb-linux-x86_64-static-legacy-2.0.2/bin/mongod--replSet rs --keyFile /data1/mongodata/key/key.file --dbpath/data1/mongodata/db/ --logpath /data1/mongodata/log/mongo.log --logappend--port 27017 --fork
注意:需要额外添加参数,--replSet(必须的),--keyFile(可选的)
② 配置文件方式
创建配置文件:vi/etc/mongod.cnf
replSet= rs
keyFile= /data1/mongodata/key/key.file
dbpath= /data1/mongodata/db/
logpath= /data1/mongodata/log/mongo.log
logappend= true
port= 27017
fork= true
启动时加上-f参数,指向配置文件即可:
/usr/local/mongodb-linux-x86_64-static-legacy-2.0.2/bin/mongod-f /etc/mongod.cnf
13. replSet复制集的状态
当有复制集成员出现故障,会有如下的状态信息:
同10中提到的,以相同的方式启动实例。
在PRIMARY实例的session中执行:rs.add("ip:port")
在PRIMARY实例的session中执行:rs.remove("ip:port")
① 命令行方式
/usr/local/mongodb-linux-x86_64-static-legacy-2.0.2/bin/mongod--shardsvr --replSet rs --dbpath/data1/mongodata/db/ --logpath /data1/mongodata/log/mongo.log --logappend--port 27017 --fork
注意:需要额外添加参数,--shardsvr(必须的),--replSet(必须的)
② 配置文件方式
创建配置文件:vi/etc/mongodb.cnf
shardsvr= true
replSet= rs
dbpath= /data1/mongodata/db/
logpath= /data1/mongodata/log/mongo.log
logappend= true
port= 27017
fork= true
启动时加上-f参数,指向配置文件即可:
/usr/local/mongodb-linux-x86_64-static-legacy-2.0.2/bin/mongod-f /etc/mongodb.cnf
① 命令行方式
/usr/local/mongodb-linux-x86_64-static-legacy-2.0.2/bin/mongod--configsvr --dbpath /data1/mongodata/db/ --logpath/data1/mongodata/log/mongo.log --logappend --port 27017 --fork
注意:需要额外添加参数,--configsvr(必须的)
② 配置文件方式
创建配置文件:vi/etc/mongo_config.cnf
configsvr= true
dbpath= /data1/mongodata/db/
logpath= /data1/mongodata/log/mongo.log
logappend= true
port= 27017
fork= true
启动时加上-f参数,指向配置文件即可:
/usr/local/mongodb-linux-x86_64-static-legacy-2.0.2/bin/mongod-f /etc/mongo_config.cnf
① 命令行方式
/usr/local/mongodb-linux-x86_64-static-legacy-2.0.2/bin/mongod--configdb ip:port,ip:port,ip:port --chunkSize 1 --logpath/data1/mongodata/log/mongo.log --logappend --port 27017 --fork
注意:需要额外添加参数,--configdb(必须的),--chunkSize(可选的)
chunkSize指分块的大小,单位是M,默认64M
② 配置文件方式
创建配置文件:vi/etc/mongos.cnf
configdb=ip:port,ip:port,ip:port
chunkSize= 1
logpath= /data1/mongodata/log/mongo.log
logappend= true
port= 27017
fork= true
启动时加上-f参数,指向配置文件即可:
/usr/local/mongodb-linux-x86_64-static-legacy-2.0.2/bin/mongod-f /etc/mongos.cnf
在mongos实例中执行:
use admin
db.runCommand({addshard:"rs/ip:port,ip:port,ip:port"})
……
use admin
db.runCommand({enablesharding:"test"})
db.runCommand({shardcollection:"test.users",key:{_id:1})
如前面的步骤,在mongos中注册sharding信息,
use admin
db.runCommand({addshard:"rs/ip:port,ip:port,ip:port"})
在mongos实例的session中执行:
use admin
db.runCommand({removeshard:"rs/ip:port,ip:port,ip:port"})
备注:如果将要被移除的sharding集群上有数据,系统首先会数据平均分配到其他sharding server上,然后将这个sharding集群踢下线。
① 如果mongod实例crash掉,当再次启动时出现错误。首先查看mongo.log日志文件(建议启动mongod时指定--logappend参数,该参数会追加的写日志,而不会覆盖)。
***********************
old lock file: /usr/local/www/mongodb/mongod.lock.probably means unclean shutdown
recommend removing file and running–repair
see:http://dochub.mongodb.org/core/repair for more information
***********************
此时,需要rm掉mongodata/db/目录下的mongod.locl文件,然后再尝试启动。
② 启动mongod后,关闭启动时的窗口,mongodb就会关闭。
A.命令行启动时加上--fork参数。
B.在配置文件中设置:fork = true
fork表示是否在后台运行。
PS:前面的内容中有用到fork的相关用法。
③ 总结:
replSet之间可以通过keyFile来相互认证。
在多个 mongos 和多个config 的情况下,mongos 与 mongos 之间是平行的存在,也就是说,一个mongos并不知道另外一个 mongos的存在。但是一个 mongos知道所有 config 的存在。
mongos和config之间不存在认证关系。