MongoDB为我们提供了较为简单的管理方式,下面我们对MongoDB的管理进行简单的讲解。
安装
MongDB的安装非常轻量级,甚至可以称之为不是安装的安装:
1,从MongoDB的官网下载适合于本地平台的压缩包
2,解压安装包(下文中我们将解压的目录以MONGO_HOME代替)
上面这两步就完成了MongoDB的安装
启动和停止
从命令行启动
执行MONGO_HOME/bin目录下的mongod.sh/mongod.exe--dbpath mongoDB存储数据的数据目录位置。
使用命令行启动可以有多个选项,可以使用mongod --help命令查看所有选项的意义。
主要执行选项解释
- --dbpath
指定存储MongoDB数据的目录,默认值是/data/db/(Windows下是C:\data\db)。每个MongoDB进程都需要独立的数据目录,每个MongoDB进程都会在其所拥有的数据目录中创建mongo.lock文件放置其他MongoDB进程访问此数据目录
- --port
指定服务器监听的端口号,默认是27017。如果运行多个MongoDB进程那么需要对不同的MongoDB指定不同端口号
- --fork
以守护进程的方式运行MongoDB,创建服务器进程。
- --logpath
指定日志输出路径,而不是命令行。每次启动MongoDB的时候,MongoDB都会自动将历史的log重命名保存,不会覆盖历史日志。
- --config
指定配置文件,可方便的在配置文件中批量的设置启动选项,减少启动时的工作量。
配置文件
MongoDB为了减轻我们的工作量提供了配置文件中读入启动选项的功能,主要用于配置选项非常多或者自动化启动MongoDB进程使用。
常见的配置文件格式:
Mongo.conf
port =xxx
logpath=xxx
…
配置文件都是以key(选项)=value(选项值)的形式,每一行都是一个选项值。注意以下事项:
- #开头的是注释
- 文件内容区分大小写,所以选项的key一定要和--help的大小写一致
- 开关选项的值要设为true/false
停止MongoDB
正确的停止能够保证下次正确的启动。
当MongoDB以前台命令行窗口的方式运行,那么在命令行中使用Ctrl+C可以保证停止。
如果是以后台进程的方式,那么可以使用kill -2 进程号或kill 进程号的方式停止。
也可以使用mongoSehell中的db.shutdownServer()命令停止,这个命令必须在admin库下运行,即useadmin切换到admin库后执行该命令。
监控
对于日常的开发管理人员,我们做的最多的事情就是对MongoDB运行情况的监控,保证其状态和性能。MongoDB为我们考虑好了这些。
使用管理接口
默认情况下,MongoDB为我们提供了一个Web界面接口用来监控(该web接口的默认端口是28017,即mongoDB启动端口+1000)。在使用web端管理接口的时候,需要MongoDB进程在启动的时候提供--rest选项或配置文件中:rest=true 。
如果不想开启MongoDB的Web管理接口,可以在启动MongoDB进程时使用--nohttpinterface或在配置文件中使用nohttpinterface=true。
也可以使用db.runCommand({'serverStatus':1})来得到当前流程实例名称
状态说明
当使用Web接口或serverStatus命令查看系统状态的时候,系统会返回一个格式化好的系统状态的文档,下面对一些重要的键进行说明:、
- globalLock
表示全局写入锁占用了服务器多少时间,微秒为单位
- mem
包含服务器内存映射了多少数据,服务器进程的虚拟内存和常住内存的占用情况
- indexCounters
表示B树在磁盘索引('misses')和内存检索('hits')的次数。如果该比值过高就需要添加内存了。
- backgroudFlushing
表示后台做了多少次fsync以及用了多长时间
- opcounters
包含了每种主要操作的次数
- asserts
统计了断言的次数
上边说到的计数器都是从服务进程启动开始计算,如果数量达到计数器上限,那么asserts中的rollovers会增加,同时计数器置0。
使用mongostat命令
serverState虽然可以比较全面的显示当前进程的状态,但是由于是静态的,即每次只能监控当前的状态无法跟踪显示mongoDB进程运行的动态信息,所以MongoDB还为我们提供了mongostat命令来动态的监控进程运行状态(类似Linux下more和tail -t -n 200的区别(尾部游标))。
mongostat的参数
mongostat命令和mongod、mongo命令属于同一级别命令,都在mongo_home/bin目录中。常见的命令参数:
- --help
help大家都懂得,就是得到这个命令的帮助、使用信息
- --verbose/-v
增加命令行返回的内部报告数量。可以通过设置多个v来使得数据更加详细,例如-vvvvvv
- --version
显示当前mongodbstat命令版本
- --host
指定mongostat要监测的mongo实例的ip:port,默认情况下链接localhost:27017端口的MongoDB实例。如果要连接的是一个集合,那么可以按如下方式连接:
集合名/IP:PORT,IP1:PORT2…
- --port
如果MongoDB运行在默认的27017端口,那么不需要指定该端口。如果不是运行在27017端口,那么就需要使用该参数指明端口。
- --ipv6
启用IPv6支持,默认情况下,MongoDB实例没有开启IPv6网络连接。
- --ssl
2.4版本的mongostat新加入的命令参数,支持mongostat通过SSL连接MongoDB实例。默认情况下,MongoDB实例不支持SSL连接,需要设置MongoDB支持SSL连接,才能让mongostat通过SSL连接MongoDB
- --rowcount number,-n number
控制数据输出行数。number的值设定了输出的数据行数,即监听几次,当number为0的时候,那么就是无限次输出行数。
该参数配合sleeptime参数一起使用可以实现,监听number次,每次监听间隔sleeptime秒。
- --sleeptime
sleeptime参数使用的时候不需要前置参数,数字即可。例如:
mongostatsleeptime
其他参数详见:
http://docs.mongodb.org/manual/reference/program/mongostat/
mongostat返回列说明
mongostat返回的是一个表格形式,下面对返回的值的形式、列做出说明:
- Inserts
显示每秒插入到数据库中对象数量,如果后边跟着一个*,那么就说明该次是一个复制操作。
- Query
每秒执行的查询操作数。
- Update
每秒执行的更新操作数。
- Delete
每秒执行的删除操作数。
- Getmore
每秒执行的get more(cursor相关操作)操作的数量。
- Command
每秒执行的命令数。当在从属节点和辅助节点上执行mongostat命令的时候,这列会以 本地数|复制数 的方式展示。
- Flushes
每秒系统执行的从内存同步到硬盘的数量。
- Mapped
映射的数据总量,以M为单位。这个数据在每次调用mongostat时刷新。
- Size
虚拟内存在最后调用mongostat时,进程使用的兆字节的数量。
- non-mapped
虚拟内存不包括在最后调用mongostat时所有映射的内存总量,以M为单位。
- Res
驻留在内存中的,在最后调用mongostat时,进程使用的兆字节的数量。
- Faults
每秒的页面故障数。
- Locked
全局写入锁所占的百分比。
- locked db
时间在每个数据库上下文特定的锁的百分比。此值列出的数据库过度花费在全局锁的时间锁定状态量。正因为如此,取样方法,您可能会看到大于100%的一些值。
- idx miss
索引尝试访问数据时,错误页面的造成失败的百分比。
- Qr
等待从MongoDB实例读取数据的客户端队列长度。
- Qw
等待向MongoDB实例写入数据的客户端队列长度。
- Ar
执行读取操作的活动客户端的数量。
- Aw
执行写入操作的活动客户端的数量。
- netIn
由MongoDB实例接收的网络通信量,以字节为单位。这包括mongostat命令产生的流量。
- netOut
由MongoDB实例输出的网络通信量,以字节为单位。这包括mongostat命令产生的流量。
- Conn
所有打开的连接数量。
- Set
该集合副本的名称,如果使用才会出现。
- Repl
当前集群成员的复制状态。
Value | Replication Type |
M | 主节点 |
SEC | 备份节点 |
REC | 恢复节点 |
UNK | 位置状态 |
SLV | 从属节点 |
- Time
mongostat命令执行的服务器时间。
第三方MongoDB监控
Nagios、Munin、Ganglia(可以监控Hadoop),Cacti。