文章目录
第20章 启停 MongoDB
1 从命令行启动
-
命令行运行
mongod -h [--help]
可列出所有选项,以下为十分重要的选项--dbpath arg
:指定数据目录,默认为MongoDB所在磁盘卷中的\data\db\
目录(linux中为\data\db
)--port arg
:指定服务器监听端口号,默认27017--fork
:--logpath arg
:指定系统日志的路径,必须是文件而不是目录--logappend
:系统日志会向logpath指定的文件持续追加而不是覆盖--directoryperdb
: 指定每个数据库将存储在单独的目录-f [ --config ] arg
:额外加载配置文件
-
示例:
mongod --port 6666 --logpath mongodb.log --logappend
2 停止MongoDB
-
db.shutdownServer()
:干净安全地关闭当前mongod或mongos进程 -
可选参数
force:true|false
:强制关闭timeoutSecs: int
:默认10s,主节点等待辅助节点赶上的秒数
-
如果在指定的时间内没有辅助对象跟上,则命令失败
3 安全性
-
不要将MongoDB 服务器暴露在外网,应该设置防火墙,只允许内网访问
-
配置选项:
--bind_ip arg
:指定监听ip(以,
分隔的 ip 列表) ,默认监听localhost--noscripting
:禁止服务器端 JavaScript 脚本运行--tlsOnNormalPorts
:在配置的端口上使用TLS--tlsMode arg
:设置TLS操作模式,disabled|allowTLS|preferTLS|requireTLS
4 日志
-
MongoDB 会输出大量日志信息,但别使用
--quiet
选项(隐藏部分日志消息) -
设置日志级别
db.setLogLevel(<level>, <component>)
:设置单个详细级别
- level:
0
- 默认,-1
- 继承组件父级,1~5
- 日志详细程度 - component:指定日志详细级别的组件的名称
db.adminCommand( { setParameter: 1, logLevel: <int> } )
:单个操作中设置多个详细级别
第21章 监控 MongoDB
-
mongostat 命令
- 提供当前正在运行的mongod或mongos实例的状态的快速概述
- 从系统命令行而不是mongo shell
- 实例
- 指定收集周期和频率:
mongostat --rowcount=5 10
每10s收集一次,收集5条数据结束,–rowcount 可简写为 -n,默认间隔1s收集一次,默认–rowcount=0表示一直收集 - 添加(-O)或指定(-o)字段到 mongostat 输出:
mongostat -O=host,version,network.numRequests=network requests
- 使用
.rate( )
查看字段的变化率:mongostat -o=host,mem,bits,metrics.document.inserted.rate()=inserted_rate,metrics.document.inserted=inserted --rowcount=5
- 使用
.diff( )
查看字段的变化:mongostat -o=host,mem.bits,metrics.document.inserted.diff()=inserted_diff,metrics.document.inserted=inserted --rowcount=5
- 查看副本集或分片群集的统计信息:
mongostat --discover
-
mongotop 命令
- 跟踪 mongod 在读写数据上的耗时,提供单个集合级别的统计信息,默认每1秒返回一个值
- 从系统命令行而不是mongo shell
- 默认连接到本地主机端口27017上运行的mongod实例
- 首先报告该连接,然后以配置的频率报告统计信息
- 指定每10秒返回一次:
mongotop 10
- 输出:
第22章 备份
1 服务器备份
-
文件系统快照(snapshot)
- 最简单的备份方法
- 需要文件系统支持快照技术以及运行的mongod开启日记系统
-
复制数据文件
- 备份时必须防止数据文件发生改变,可使用
db.fsyncLock()
实现 - 该命令强制mongod将所有未完成的写操作刷新到磁盘并锁定整个mongod实例,以防止其他写操作
- 可使用相应的
db.fsyncUnlock( )
命令释放该锁,便可再次进行写入操作
- 备份时必须防止数据文件发生改变,可使用
-
使用 mongodump
- 语法:
mongodump -h dbhost -p portNO -d dbname -o dbdirectory
备份所有数据 - 将备份指定数据库的集合:
mongodump --collection mycol --db test
- 恢复 mongodump 产生的备份:
mongorestore -h <hostname><:port> -d dbname <path>
- 语法:
-
不要同时使用 fsyncUnlock 和 mongodump,数据锁会使 mongodump 永远处于挂起状态
2 副本集备份
3 分片集群备份
4 使用 mongooplog 进行增量备份
第23章 部署 MongoDB
1 设计系统结构
-
存储介质选择:较少内存空间加较大的机械磁盘空间,经费充足时可购买更多的内存与SSD
-
RAID(独立磁盘冗余阵列)
- 一种可以让多块磁盘当作单独一块磁盘来使用的技术,提高磁盘的可靠性与性能
- RAID 配置方式
- RAID0:使用磁盘分割技术将多个磁盘并列,某个磁盘故障导致数据丢失不会存在备份
- RAID1:使用镜像来提高性能,同样的数据副本会写入到阵列中的每一个成员,性能低于RAID0
- RAID5:使用磁盘分割技术,额外存储数据的校验信息防止数据丢失(非常慢)
- RAID10:RAID0 和 RAID1的组合,分割提升速度,复制镜像提高可靠性(推荐)
-
操作系统选择
- 64位的 Linux 系统是运行 MongoDB 的最佳选择
- 64位的 Windows 系统也可很好的运行 MongoDB
- MongoDB 在所有的系统中使用相同的线路协议和数据文件存储格式
-
文件系统
- Linux 系统上推荐 ex4 或 XFS 文件系统作为数据卷(备份时可进行文件快照)
- Windows 系统上可使用 NTFS 或 FAT文件系统
2 虚拟化
-
运用虚拟化技术可方便地使用廉价的硬件来部署系统,并能迅速扩展
-
缺点是存在无法预知的网络和磁盘 IO 状况
-
内存过度分配
-
处理网络磁盘的 IO 问题:监视MongoDB使用的卷
- IO 利用率峰值
- 页缺失发生频率的峰值
- TCP丢包数的增长情况
- MongoDB 读写队列的峰值
-
使用非网络磁盘
- 临时驱动器是真正和虚拟机所在机器存在物理连接的磁盘
3 系统配置
-
禁用NUMA
- NUMA(非一致内存结构):每个 CPU 都具有一些距其更近、访问更快的内存的结构
- 禁用 NUMA 可提升性能
-
预读取数据
-
禁用大内存页面
-
选择磁盘调度算法:Deadline、CFQ(完全公平队列)、noop 调度算法
-
不记录访问时间
-
修改限制:进程可建立线程的数量、进程能打开文件描述符的数量设置为无限制
4 网络配置
-
在独立服务器上,客户端须能够与mongod 建立连接
-
分片连接
- 需要表示二者应当建立连接
- 不需要表示二者不会在指定方向通信,不需要建立连接
- 不推荐表示二者间不会通信,但错误操作会导致二者之间完成通信
5 系统管理
-
时钟同步
- 各系统间时差不超过一秒最为安全
- 保证时钟同步,Windows 使用 w32tm 工具,Linux 使用 ntp 后台进程
-
OOM Killer
- 某些情况(如建立索引),MongoDB 会因分配内存过多而被 OOM Killer 杀死进程
- 如果开启了日志系统,重启 mongod 即可,否则应恢复备份或重新与副本同步
-
关闭定期任务