管理Mongodb 集群所用到的系统管理及监控

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介:

先说下主从

 
  1. 随着数据量的增多单台mongodb服务器已经满足不了现状,所以用到了主从集群 

  2.    主从复制是最mongodb最常用的复制方式,他最大的特点是备份,对于读易扩展,降低服务器的压力! 

MongoDB支持在多个机器中通过异步复制到底故障转移和实现冗余,多台机器中同一时刻只有一台是用于写操作,这为mongoDB提供了数据一致性的保障.担当Primary角色的机器能把读操作分发给slave机器.

 

MongoDB的主从集群分为两种

Master-Slave 复制(主从复制)  

Replica Sets 复制(副本集)

主服务器支持增删该,从服务器主要支持读.

 

 

Master-Slave(主从复制)

只需要在某一个服务启动时加上-master参数,以指明此服务器的角色是primary,而另一个服务加上-slave与-source参数,以指明此服务器的角色是slave. 即可实现同步,

MongoDB的最新版本已经不推荐使用这种方法了.

 

Replica Sets 复制(副本集)

MongoDB在1.6版本开发了replica set,主要增加了故障自动切换和自动修复成员节点.各个DB之间数据完全一致,最为显著的区别在于,副本集没有固定的主节点,它是整个集群选举得出的一个主节点.当其不工作时变更其它节点. 

 

 

235829434.jpg

两种启动方式,一种是配置文件,另一种是加参数

master

 
  1. 在主服务器上加--master 选项启动 

  2. ./mongod --dbpath=/home/mongodb/db --master --oplogSize 64 

slave

 
  1. 从服务器上加 --slave选项启动并指定 master 的地址。 

  2. mongod --dbpath=/data/db --slave --source 192.168.0.2 --only test --slavedelay 10 

测试主从的效果

在主服务器上加一些数据。打开客户端

bin/mongo

> db.foo.save({"id":123,"name":'chenlb'})


成功的话可以在从服务器看到数据:


bin/mongo

> db.foo.find({"id":123}) 

集群副本的使用

 

000439658.png

 
  1. #Server1:  

  2. mkdir -p /data2/mongodb/shard11  

  3. mkdir -p /data2/mongodb/shard21  

  4. /mongodb/bin/mongod --shardsvr --replSet shard1 --port 27017 --dbpath /data2/mongodb/shard11 --oplogSize 100 --logpath /data2/mongodb/shard11.log --logappend --fork --rest  

  5. /mongodb/bin/mongod --shardsvr --replSet shard2 --port 27018 --dbpath /data2/mongodb/shard21 --oplogSize 100 --logpath /data2/mongodb/shard21.log --logappend --fork –rest 

  6. #Server2:  

  7. mkdir -p /data2/mongodb/shard12/  

  8. mkdir -p /data2/mongodb/shard22/  

  9. /mongodb/bin/mongod --shardsvr --replSet shard1 --port 27017 --dbpath /data2/mongodb/shard12 --oplogSize 100 --logpath /data2/mongodb/shard12.log --logappend --fork --rest  

  10. /mongodb/bin/mongod --shardsvr --replSet shard2 --port 27018 --dbpath /data2/mongodb/shard22 --oplogSize 100 --logpath /data2/mongodb/shard22.log --logappend --fork –rest 

  11. #Server3:  

  12. mkdir -p /data2/mongodb/shard13/  

  13. mkdir -p /data2/mongodb/shard23/  

  14. /mongodb/bin/mongod --shardsvr --replSet shard1 --port 27017 --dbpath /data2/mongodb/shard13 --oplogSize 100 --logpath /data2/mongodb/shard13.log --logappend --fork --rest  

  15. /mongodb/bin/mongod --shardsvr --replSet shard2 --port 27018 --dbpath /data2/mongodb/shard23 --oplogSize 100 --logpath /data2/mongodb/shard23.log --logappend --fork –rest 

  16. 3、初始化Replica Set 

  17. 通过命令行初始化两组Replica Set,通过mongo连接到一个mongod 

  18. /mongodb/bin/mongo 172.17.0.121:27017 

  19. config = {_id: ‘shard1′, members: [  

  20.                           {_id: 0, host: '172.17.0.121:27017'},  

  21.                           {_id: 1, host: '172.17.0.122:27017'},  

  22.                           {_id: 2, host: '172.17.0.123:27017'}]}; 

  23. rs.initiate(config); 

  24. /mongodb/bin/mongo 172.17.0.121:27018 

  25. config = {_id: ‘shard2′, members: [  

  26.                           {_id: 0, host: '172.17.0.121:27018'},  

  27.                           {_id: 1, host: '172.17.0.122:27018'},  

  28.                           {_id: 2, host: '172.17.0.123:27018'}]}; 

  29. rs.initiate(config); 

 

 博客地址: http://rfyiamcool.blog.51cto.com/1030776/1193765

 

备份与恢复:

冷备份: 关闭mongod,拷贝数据库文件,启动mongod,恢复时一样

热备份:(1)、使用mongodump备份,mongorestore恢复

       (2)、使用mongoexport备份,mongoimport恢复

       (3)、创建主从复制机制,自动同步

 

冷备份     用这个方法的时候 最好关闭进程  不然大数据的时候 会出现问题

224951927.jpg

下面是还原 

225054699.jpg

热备份

 
  1. mongodump mongo导出数据库命令 mongodump --help 可以查看该命令下所有的帮助 

  2. -h 导出源 

  3. -d 要导出的数据库名称 

  4. -o 数据库要导出的位置 

  5. 在终端滚过N行之后,数据库导出完成 


225107116.jpg

225121546.jpg

 
  1. 恢复使用:mongorestore 命令 

  2. -d 使用的数据库名称 

  3. 后面直接加你刚才导出的目录,这样是直接恢复所有表 

  4. 如果-c 是恢复一个表 

  5. --drop:恢复的时候,先删除当前数据,然后恢复备份的数据。就是说,恢复后,备份后添加修改的数据都会被删除,慎用哦

  6.  

225140959.jpg

 

 
  1. 导入 

  2. mongoimport -d my_mongodb -c user user.dat 

  3. 参数说明: 

  4. -d 指明使用的库, 本例中为” my_mongodb” 

  5. -c 指明要导出的表, 本例中为”user” 

  6. 可以看到导入数据的时候会隐式创建表结构 

  7. 4. 导出 

  8. mongoexport -d my_mongodb -c user -o user.dat 

  9. 参数说明: 

  10. -d 指明使用的库, 本例中为” my_mongodb” 

  11. -c 指明要导出的表, 本例中为”user” 

  12. -o 指明要导出的文件名, 本例中为”user.dat” 

  13. 从上面可以看到导出的方式使用的是JSON 的样式 

 

博客地址:http://rfyiamcool.blog.51cto.com/

231447309.jpg

 

Mongodb 性能的监控

232020225.jpg

 

 

 
  1. 它的输出有以下几列: 

  2.                insert               每秒插入次数 

  3.                query               每秒查询次数 

  4.                update             每秒更新次数 

  5.                delete              每秒删除次数 

  6.                getmore          每秒执行getmore次数 

  7.                command       每秒的命令数,比以上插入、查找、更新、删除的综合还多,还统计了别的命令 

  8.                flushs              每秒执行fsync将数据写入硬盘的次数。 

  9.                mapped          所有的被mmap的数据量 

  10.                vsize                虚拟内存使用量 

  11.                res                   物理内存使用量 

  12.                faults               每秒访问失败数(只有Linux有),数据被交换出物理内存,放到swap。不要超过100,否则就是机器内存太小,造成频繁swap写入。此时要升级内存或者扩展 

  13.                locked %        被锁的时间百分比,尽量控制在50%以下吧 

  14.                idx miss %     索引不命中所占百分比。如果太高的话就要考虑索引是不是少了 

  15.                qr                     客户端等待从 MongoDB 实例读取数据的队列长度。 

  16.                qw                   客户端等待向 MongoDB 实例写入数据的队列长度。 

  17.                ar                     执行读取操作的活动客户端的数目。 

  18.                aw                   执行写入操作的活动客户端的数目。 

  19.                netIn               MongoDB 收到的网络流量,这包括 mongostat 本身的流量。 

  20.                netOut            MongoDB 发送的网络流量,这包括 mongostat 本身的流量。 

  21.                conn                打开连接的总数。 

  22.                set                   副本集的名称(如适用)。 

  23.                repl                 节点的复制状态。(M:主版本,SEC:次,REC:恢复,UNK:未知,SLV:从属) 

 

优化器profile

在MySQL 中,慢查询日志是经常作为我们优化数据库的依据,那在MongoDB 中是否有类似的功能呢?答案是肯定的,那就是MongoDB Database Profiler。

db.setProfilingLevel(2);上面profile 的级别可以取0,1,2 三个值,他们表示的意义如下:

1.0 – 不开启

2.1 – 记录慢命令 (默认为>100ms)

3.2 – 记录所有命令

Profile 记录在级别1 时会记录慢命令,那么这个慢的定义是什么?上面我们说到其默认为100ms,当然有默认就有设置,其设置方法和级别一样有两种,一种是通过添加–slowms 启动参数配置。第二种是调用db.setProfilingLevel 时加上第二个参数:

与MySQL 的慢查询日志不同,MongoDB Profile 记录是直接存在系统db 里的,记录位置system.profile ,所以,我们只要查询这个Collection 的记录就可以获取到我们的 Profile 记录了。列出执行时间长于某一限度(5ms)的 Profile 记录:


db.system.profile.find( { millis : { $gt : 5 } } )

MongoDB Shell 还提供了一个比较简洁的命令show profile,可列出最近5 条执行时间超过1ms 的 Profile 记录。

 

 zabbix 对mongodb监控

 
  1. 添加MongoDB监控 

  2. 1、zabbix客户端配置文件zabbix_agentd.conf文件,添加如下内容: 

  3. UserParameter=MongoDB.Status[*],/bin/echo "db.serverStatus().$1" | /usr/local/sbin/mongo admin | grep "$2"|awk -F: '{print $$2}'|awk -F, '{print $$1}' 

  4. 2、重新启动zabbix客户端 

  5. /etc/init.d/zabbix_agentd restart 

剩下的模板就是增加模板了



 本文转自 rfyiamcool 51CTO博客,原文链接:http://blog.51cto.com/rfyiamcool/1193765,如需转载请自行联系原作者




相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
相关文章
|
10月前
|
NoSQL Cloud Native MongoDB
MongoDB 主从集群 2
MongoDB 主从集群 2
|
11月前
|
运维 NoSQL 安全
【最佳实践】高可用mongodb集群(1分片+3副本):规划及部署
结合我们的生产需求,本次详细整理了最新版本 MonogoDB 7.0 集群的规划及部署过程,具有较大的参考价值,基本可照搬使用。 适应数据规模为T级的场景,由于设计了分片支撑,后续如有大数据量需求,可分片横向扩展。
953 1
|
3月前
|
JSON NoSQL MongoDB
Rockmongo详解:高效管理MongoDB的图形化利器
Rockmongo详解:高效管理MongoDB的图形化利器
|
30天前
|
存储 NoSQL 算法
MongoDB保姆级指南(中):从副本集群、分片集群起航,探索分布式存储的趋势!
本文一起来聊聊MongoDB集群,顺带以MongoDB集群为起点,共同探讨一下分布式存储的发展趋势~
78 15
|
18天前
|
存储 运维 NoSQL
轻松上手:逐步搭建你的高可用MongoDB集群(分片)
【8月更文挑战第13天】在数据激增的背景下,传统单机数据库难以胜任。MongoDB作为流行NoSQL数据库,采用分片技术实现水平扩展,有效处理海量数据。分片将数据分散存储,提高并发处理能力和容错性,是高可用架构基石。构建MongoDB集群需理解shard、config server和router三组件协同工作原理。通过具体实例演示集群搭建流程,包括各组件的启动及配置,确保数据高可用性和系统稳定性。合理规划与实践可构建高效稳定的MongoDB集群,满足业务需求并支持未来扩展。
34 0
|
2月前
|
自然语言处理 运维 NoSQL
MongoDB集群同步
实现 MongoDB Cluster-to-Cluster 即集群同步的工具是:mongosync 详情可参考如下官方文档: https://www.mongodb.com/zh-cn/docs/cluster-to-cluster-sync/current/quickstart/ 以上这个地址的文档一看就是机器翻译的,可能有不恰当的地方,但基本可参考使用。 以下是本次在某项目地配置集群同步的简要步骤,可参考使用。
60 6
|
3月前
|
存储 负载均衡 NoSQL
MongoDB的架构设计基于三种集群模式
【6月更文挑战第5天】MongoDB的架构设计基于三种集群模式
120 3
|
4月前
|
监控 NoSQL MongoDB
【MongoDB 专栏】MongoDB 的监控与性能调优
【5月更文挑战第11天】在数字化时代,MongoDB作为流行的非关系型数据库,其监控和性能调优至关重要。监控能实时了解数据库运行状态,预防性能问题,评估系统健康。关键监控指标包括系统资源、查询性能、连接数和数据存储量。常用工具如`mongostat`、`mongotop`,以及Prometheus、Grafana等。性能调优涉及索引、查询优化、数据模型调整、配置修改及分片复制。通过持续监控和调优,可确保MongoDB高效稳定运行,适应业务发展需求。
130 1
【MongoDB 专栏】MongoDB 的监控与性能调优
|
3月前
|
存储 JSON NoSQL
MongoDB 插入文档:轻松管理数据录入与批量导入
MongoDB 插入文档:轻松管理数据录入与批量导入
|
3月前
|
监控 NoSQL MongoDB
深入MongoDB监控:全面解析命令、实用示例与最佳实践
深入MongoDB监控:全面解析命令、实用示例与最佳实践
下一篇
云函数