Mongodb管理与维护手册
1. MongoDB概略 3
2. MongoDB的安装 3
3. MongoDB的启动 3
4. MongoDB关闭 4
5. 启动MongoDB Console 4
6. MongoDB一致性备份 4
7. MongoDB恢复 5
8. MongoDB状态 5
9. 监控MongoDB进程 8
10. 监控MongoDB使用的内存情况 8
11. 释放MongoDB占用的内存 9
12. 建立RepSer复制集 9
13. replSet复制集的状态 10
14. 增加复制集成员 11
15. 移除复制集成员 11
16. 建立Sharding集群 11
17. 配置ConfigSvr 12
18. 配置mongos 13
19. 配置sharding集群 14
20. 激活分片 14
21. Sharding状态 14
22. 添加sharding集群 15
23. 移除sharding集群 15
24. 常见故障处理 15
1. MongoDB 概略
高性能、开源、无模式的文档数据库。
官方网址: http://www.mongodb.org/
2. MongoDB的安装
在官方下载操作系统版本对应的MongoDB版本,解压即可。
3. MongoDB的启动
进入解压后的MongoDB目录,运行其 bi n目录下的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("ip
ort"
15. 移除复制集成员
在PRIMARY实例的session中执行:rs.remove("ip
ort"
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 ip
ort,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= ip
ort,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/ip
ort,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/ip
ort,ip
ort,ip
ort"})
23. 移除sharding集群
在mongos实例的session中执行:
use admin
db.runCommand({removeshard:"rs/ip
ort,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 的存在。
1. MongoDB概略 3
2. MongoDB的安装 3
3. MongoDB的启动 3
4. MongoDB关闭 4
5. 启动MongoDB Console 4
6. MongoDB一致性备份 4
7. MongoDB恢复 5
8. MongoDB状态 5
9. 监控MongoDB进程 8
10. 监控MongoDB使用的内存情况 8
11. 释放MongoDB占用的内存 9
12. 建立RepSer复制集 9
13. replSet复制集的状态 10
14. 增加复制集成员 11
15. 移除复制集成员 11
16. 建立Sharding集群 11
17. 配置ConfigSvr 12
18. 配置mongos 13
19. 配置sharding集群 14
20. 激活分片 14
21. Sharding状态 14
22. 添加sharding集群 15
23. 移除sharding集群 15
24. 常见故障处理 15
1. MongoDB 概略
高性能、开源、无模式的文档数据库。
官方网址: http://www.mongodb.org/
2. MongoDB的安装
在官方下载操作系统版本对应的MongoDB版本,解压即可。
3. MongoDB的启动
进入解压后的MongoDB目录,运行其 bi n目录下的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("ip
![](https://i-blog.csdnimg.cn/blog_migrate/4f06a01a81d5603cca001c0e92e5ebda.gif)
![](http://www.itpub.net/static/image/smiley/qqbiaoqin/baiy.gif)
15. 移除复制集成员
在PRIMARY实例的session中执行:rs.remove("ip
![](https://i-blog.csdnimg.cn/blog_migrate/4f06a01a81d5603cca001c0e92e5ebda.gif)
![](http://www.itpub.net/static/image/smiley/qqbiaoqin/baiy.gif)
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 ip
![](https://i-blog.csdnimg.cn/blog_migrate/4f06a01a81d5603cca001c0e92e5ebda.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f06a01a81d5603cca001c0e92e5ebda.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f06a01a81d5603cca001c0e92e5ebda.gif)
注意:需要额外添加参数,--configdb(必须的), --chunkSize(可选的)
chunkSize 指分块的大小,单位是M,默认64M
② 配置文件方式
创建配置文件:vi /etc/mongos.cnf
configdb= ip
![](https://i-blog.csdnimg.cn/blog_migrate/4f06a01a81d5603cca001c0e92e5ebda.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f06a01a81d5603cca001c0e92e5ebda.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f06a01a81d5603cca001c0e92e5ebda.gif)
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/ip
![](https://i-blog.csdnimg.cn/blog_migrate/4f06a01a81d5603cca001c0e92e5ebda.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f06a01a81d5603cca001c0e92e5ebda.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f06a01a81d5603cca001c0e92e5ebda.gif)
……
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/ip
![](https://i-blog.csdnimg.cn/blog_migrate/4f06a01a81d5603cca001c0e92e5ebda.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f06a01a81d5603cca001c0e92e5ebda.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f06a01a81d5603cca001c0e92e5ebda.gif)
23. 移除sharding集群
在mongos实例的session中执行:
use admin
db.runCommand({removeshard:"rs/ip
![](https://i-blog.csdnimg.cn/blog_migrate/4f06a01a81d5603cca001c0e92e5ebda.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f06a01a81d5603cca001c0e92e5ebda.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f06a01a81d5603cca001c0e92e5ebda.gif)
备注:如果将要被移除的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之间不存在认证关系。