MongoDB 运维

1.启动

查看启动选项

mongod --help

几个重要的选项

dbpath:数据目录,启动时mongod实例会在该目录下创建mongod.lock文件,防止其它mongod实例使用该数据目录
port:服务器监听的端口号,默认为27017
fork:以守护进程的方式运行
logpath:日志文件
logappend:mongod启动时默认将清除原来的日志记录,此选项可以保留原来的日志记录
nohttpinterface:默认情况下,mongod会启动一个http服务器,该服务器的监听端口比port大1000,此选项可以关闭该端口
rest:开启REST支持,开启后可在http服务器上查看_commands
auth:开启权限校验
bindip:指定客户端的IP
noscripting:完全禁止服务端JS的执行
repair:修复所有数据库
config:指定配置文件

关于配置文件:

1)以#开头的行是注释

2)采用"选项=值"的方式指定选项,并且大小写敏感

3)开关选项的值为true

2.停止

1)Ctrl+C

2)kill -2 PID

3)kill PID

4)在admin数据库中运行db.shutdownServer()

关闭过程:

1)等待当前运行的操作或者文件预分配完成

2)关闭所有打开的连接

3)将缓存的数据刷新到磁盘

注:不能使用kill -9 PID,这样会导致数据库直接关闭,忽略上述步骤。

3.监控

1)通过HTTP查看

http://localhost:28017/

http://localhost:28017/_status

2)serverStatus命令

db.runCommand({"serverStatus": 1});

3)mongostat进程

4.安全和认证

1)权限管控

超级用户(管理员):admin数据库中的用户,可以读写所有数据库,执行特定的管理命令。

//新增
//方法一
db.addUser(name, pwd[, isReadOnly]);
e.g.
db.addUser("micromsg", "micromsg");
db.addUser("readonly", "readonly", true);
//方法二
db.addUser({
	"user": ...,
	"pwd": ...,
	"roles": [...]
});
roles:用户权限,权限列表如下:
--read
--readWrite
--dbAdmin
--userAdmin
--clusterAdmin
--readAnyDatabase
--readWriteAnyDatabase
--userAdminAnyDatabase
--dbAdminAnyDatabase
e.g.
db.addUser({
	"user": "test",
	"pwd": "test",
	"roles": ["read"]
});

//使用,必须使用auth选项启动服务才能开启权限校验
db.auth(name, pwd);
e.g.
db.auth("readonly", "readonly");

//删除
db.removeUser(name);
e.g.
db.removeUser("test");

2)工作原理

数据库的用户账号以文档的形式存储在system.users集合里

3)其它安全措施

--使用SSH隧道或者类似技术做客户端和服务器之间的加密

--将MongoDB服务器部署在防火墙后或只有应用服务器能访问的网络中

--使用bindip和noscripting选项启动服务

5.备份和修复

1)直接备份数据目录

直接创建dbpath数据目录中所有文件的副本

缺点:

在运行时复制数据目录不太安全

2)mongodump和mongorestore进程

mongodump是一种能在运行时备份的工具,原理是对运行的MongoDB做查询,然后将所有查到的文档写入磁盘。

缺点:

--使用普通的查询机制,所以产生的备份不一定是服务器数据的实时快照

--会对其它客户端的性能产生不利影响

mongorestore则是一个根据mongodump的备份来恢复数据库的工具。

3)fsync和锁

fsync命令强制服务器将所有缓冲区写入磁盘,还可以选择上锁阻止对数据库的进一步写入,知道释放锁为止。结合fsysnc,锁和mongodump可以获得数据目录的实时快照。

//清空缓存,加写入锁
db.runCommand({"fsync": 1, "lock": 1});
//备份
...
//解锁
db.$cmd.sys.unlock.findOne();
//确保已经解锁
db.currentOp();

4)从属备份

当以复制的方式运行MongoDB时,从服务器的数据几乎与主服务器同步。因为不在乎从属服务器的性能或是能不能读写,于是就能随意选择上面的3种备份方式。

5)修复

--通过repair选项启动MongoDB来修复所有数据库

原理:将所有的文档导出然后马上导入,忽略那些无效的文档,重建索引。

修复过程存在空间的回收,能起到压缩数据的作用。

--通过db.repairDatabase()来修复运行中的数据库

注:修复损毁的数据是不得已的最后一招。尽可能地稳妥地停掉服务器,利用复制功能实现故障恢复,经常做备份,这些才是最有效的管理数据的手段。

猜你喜欢

转载自siyuan-zhu.iteye.com/blog/2033064