原址如下:
http://www.itpub.net/thread-1739455-1-1.html
Mongodb管理与维护手册
1. 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
4. MongoDB关闭
① 在session中直接执行:ctrl+c
② 在admin库中执行db.shutdownServer()命令
use admin
db.shutdownServer()
5. 启动MongoDB Console
/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.132.74.35 --port 27017 -d mytest -o /data/mytest.bak
7. MongoDB恢复
mongorestore
/usr/local/mongo/bin/mongodump -h 10.132.74.35 --port 27017 -d mytest /data/mytest.bak
8. MongoDB状态
db.serverStatus()命令
命令解释可参考KM文档:http://km.oa.com/group/515/articles/show/122020
9. 监控MongoDB进程
ps -ef | grep mongod
10. 监控MongoDB使用的内存情况
执行db.serverStatus().mem
另外,通过mongostat来监控mongodb的内存使用
11. 释放MongoDB占用的内存
use admin
db.runCommand({closeAllDatabases:1})
另外,通过调整内核参数drop caches可以释放缓存
sysctl -w vm.drop_caches=1
12. 建立RepSer复制集
① 命令行方式
/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复制集的状态
当有复制集成员出现故障,会有如下的状态信息:
14. 增加复制集成员
同10中提到的,以相同的方式启动实例。
在PRIMARY实例的session中执行:rs.add("iport"
15. 移除复制集成员
在PRIMARY实例的session中执行:rs.remove("iport"
16. 建立Sharding集群
① 命令行方式
/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
17. 配置ConfigSvr
① 命令行方式
/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
18. 配置mongos
① 命令行方式
/usr/local/mongodb-linux-x86_64-static-legacy-2.0.2/bin/mongod --configdb iport,ip
ort,ip
ort --chunkSize 1 --logpath /data1/mongodata/log/mongo.log --logappend --port 27017 --fork
注意:需要额外添加参数,--configdb(必须的), --chunkSize(可选的)
chunkSize 指分块的大小,单位是M,默认64M
② 配置文件方式
创建配置文件:vi /etc/mongos.cnf
configdb= iport,ip
ort,ip
ort
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
19. 配置sharding集群
在mongos实例中执行:
use admin
db.runCommand({addshard:"rs/iport,ip
ort,ip
ort"})
……
20. 激活分片
use admin
db.runCommand({enablesharding:"test"})
db.runCommand({shardcollection:"test.users",key:{_id:1})
21. Sharding状态
22. 添加sharding集群
如前面的步骤,在mongos中注册sharding信息,
use admin
db.runCommand({addshard:"rs/iport,ip
ort,ip
ort"})
23. 移除sharding集群
在mongos实例的session中执行:
use admin
db.runCommand({removeshard:"rs/iport,ip
ort,ip
ort"})
备注:如果将要被移除的sharding集群上有数据,系统首先会数据平均分配到其他sharding server上,然后将这个sharding集群踢下线。
24. 常见故障处理
① 如果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之间不存在认证关系。