章节:第八章 管理
时间:2013-07-23
内容:
-
启动和停止MongoDB
-
从命令行启动
-
执行mongod,启动MongoDB服务器,主要的配置选项如下:
-
--dpath:指定数据目录,默认是/data/db/,每个mongod实例都必须有独立的数据目录
-
--port:指定服务器监听的端口,默认端口27017
-
--fork:以守护进程方式运行MongoDB,创建服务器进程
-
--logpath:指定日志输出路径;若想保留原来的日志,需使用--logappend选项
-
--config:指定配置文件,加载命令行未指定的各种选项
-
-
配置文件
-
MongoDB支持从文件获取配置信息,当需要的配置非常多或者要自动化MongoDB的启动时就会用到这个,用-f或--config选项
-
-
停止MongoDB
-
若mongod作为前台进程运行的,直接Ctrl-C结束
-
若mongod作为后台进程运行的,可kill PID(SIGTERM信号)或者kill -2 PID(SIGINT信号)(不可kill -9 PID)
-
在admin库下,利用管理命令关闭mongod,如use admin;db.shutdownServer()
-
当mongod收到SIGINT或SIGTERM信号时,会稳妥退出,即会等到当前运行的操作或文件预分配完成,关闭所有打开的链接,将缓存的数据刷新到磁盘,最后停止
-
-
-
监控
-
使用管理接口
-
默认情况下,启动mongod时会启动一个基本的HTTP服务器,端口号比mongod监听端口大1000,可以查看MongoDB的一些基本信息
-
浏览器中访问http://localhost:28017,可以看到断言、锁、索引和复制等相关信息
-
要想利用好管理接口(比如访问命令列表),需要用--rest 选项开启REST支持;
-
也可以在启动mongod时使用--nohttpinterface关闭管理接口
-
-
serverStatus1
-
要获取运行中的MongoDB服务器统计信息,最基本工具就是serverStatus命令,如db.runCommand({"serverSatus" : 1})
-
serverStatus呈现了MongoDB内部的详细信息,比如当前服务器版本、运行时间、当前连接数,还有:
-
globalLock:表示全局写入锁占用了服务器多少时间(ms)
-
mem:包含服务器内存映射了多少数据,服务器进程的虚拟内存和常驻内存的占用情况(单位MB)
-
indexCounters:表示B树在磁盘检索(misses)和内存检索(hits)的次数;若此比值开始上升则需添加内存了,否则系统性能就会收到影响
-
backgroudFlushing:表示后台做了多少次fsync以及用了多少时间
-
opcounters:包含了每种主要操作的次数,如insert、query等
-
asserts:统计断言的次数,如regular、warnning
-
serverStatus结果中的所有计数都是在服务器启动时开始计算的,如果过大就会复位;当发生复位时,所有计数器都复位,asserts中的rollovers只会增加
-
-
mongostat
-
mongostat可实时查看serverStatus的结果,输出多列,分别是inserts/s、commands/s、vsize和% locked,与serverStatus的数据相对应
-
查看方法:mongostat --port 10000
-
-
第三方插件
-
serverStatus和/_status URL的出现使得编写MongoDB的监控插件非常容易
-
-
-
安全和认证
-
认证的基础知识
-
每个MongoDB实例中的数据库都可以有许多用户,如果开启了安全检查,则只有数据库认证用户执行读或写操作,
-
addUser不仅能添加用户,还能修改用户口令或者只读状态,如:db.addUser("read_only" ,"ijkl" ,true)
-
重启服务器,加入--auth命令行选项,开启安全检查
-
-
认证的工作原理
-
数据库的用户账号以文档的形式存储在system.users集合里面
-
用户认证时,服务器将认证和连接绑定来跟踪认证,也就是说如果驱动程序或是工具使用了连接池或是因故障切换到另一个节点,所有认证用户必须对每个新连接重新认证
-
-
其他安全考虑
-
即便使用了认证,MongoDB传输协议也是不加密的,若需要加密,可以用SSH隧道或者类似的技术做客户端和服务器之间的加密
-
建议将MongoDB服务器部署在防火墙后或者布置在只有应用服务器能访问的网络中
-
若MongoDB必须能被外面访问到的话,建议使用--bindip选项,可以指定mongod绑定到的本地IP地址,如:mongod --bindip localhost
-
--nohttpinterface:关闭HTTP管理接口
-
--noscripting:完全禁止服务端Javascript的执行
-
-
-
备份和恢复
-
数据文件备份(属于冷备份)
-
默认的数据目录是 /data/db/,存放着MongoDB的所有数据,也就是说,要想备份MongoDB,只要简单地创建数据目录中所有文件的副本就可以了
-
优点:可以完全保证数据一致性
-
缺点:需要数据库引擎离线
-
-
mongodump和mongorestore(属于热备份)
-
mongodump备份数据:如mongod -d test -o backup
-
mongorestore恢复数据:如mongod -d foo --drop backup/test/
-
优点:数据库引擎无需离线
-
缺点:不能保证数据完整性,操作时会降低MongoDB性能
-
-
fsync和锁
-
MongoDB的fsync命令能在MongoDB运行时复制数据目录还不会损毁数据
-
fsync命令会强制服务器将所有缓冲区写入磁盘,还可以选择上锁阻止对数据库的进一步写入,直到释放锁为止
-
优点:备份灵活,不用停止服务器,也不用牺牲备份的实时特性
-
缺点:一些写入操作被暂时阻塞了
-
-
从属备份
-
创建主从复制机制,配置完成后数据会自动同步
-
优点:可以保持MongoDB处于联机状态,不影响性能
-
缺点:在数据写入密集的情况下可能无法保持数据完整性
-
-
修复
-
停机修复:mongod --repair;修复的过程:将所有的文档导出然后马上导入,忽略那些无效的文档,完成后会重新建立索引
-
在线修复:db.repairDatabase():
-
修复数据库还可以起到压缩数据的作用
-
修复数据库的操作相当耗时,万不得已不要使用
-
建议经常做数据备份
-
-