《MongoDB权威指南》读书笔记 —— PartⅥ:服务器管理

第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>):设置单个详细级别
    1. level:0 - 默认,-1 - 继承组件父级,1~5 - 日志详细程度
    2. component:指定日志详细级别的组件的名称
    • db.adminCommand( { setParameter: 1, logLevel: <int> } ):单个操作中设置多个详细级别

第21章 监控 MongoDB

  • mongostat 命令

    • 提供当前正在运行的mongod或mongos实例的状态的快速概述
    • 从系统命令行而不是mongo shell
    • 实例
    1. 指定收集周期和频率:mongostat --rowcount=5 10 每10s收集一次,收集5条数据结束,–rowcount 可简写为 -n,默认间隔1s收集一次,默认–rowcount=0表示一直收集
    2. 添加(-O)或指定(-o)字段到 mongostat 输出:mongostat -O=host,version,network.numRequests=network requests
    3. 使用 .rate( ) 查看字段的变化率:mongostat -o=host,mem,bits,metrics.document.inserted.rate()=inserted_rate,metrics.document.inserted=inserted --rowcount=5
    4. 使用 .diff( ) 查看字段的变化:mongostat -o=host,mem.bits,metrics.document.inserted.diff()=inserted_diff,metrics.document.inserted=inserted --rowcount=5
    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 配置方式
    1. RAID0:使用磁盘分割技术将多个磁盘并列,某个磁盘故障导致数据丢失不会存在备份
    2. RAID1:使用镜像来提高性能,同样的数据副本会写入到阵列中的每一个成员,性能低于RAID0
    3. RAID5:使用磁盘分割技术,额外存储数据的校验信息防止数据丢失(非常慢
    4. 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 即可,否则应恢复备份或重新与副本同步
  • 关闭定期任务

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值