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

本文涉及的产品
云数据库 MongoDB,通用型 2核4GB
简介:

先说下主从

 
  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
相关文章
|
5月前
|
NoSQL Cloud Native MongoDB
MongoDB 主从集群 2
MongoDB 主从集群 2
|
6月前
|
运维 NoSQL 安全
【最佳实践】高可用mongodb集群(1分片+3副本):规划及部署
结合我们的生产需求,本次详细整理了最新版本 MonogoDB 7.0 集群的规划及部署过程,具有较大的参考价值,基本可照搬使用。 适应数据规模为T级的场景,由于设计了分片支撑,后续如有大数据量需求,可分片横向扩展。
482 1
|
5月前
|
存储 NoSQL 网络协议
MongoDB 主从集群 1
MongoDB 主从集群 1
|
1月前
|
NoSQL MongoDB
搭建MongoDB分片式集群
搭建MongoDB分片式集群
13 0
|
2月前
|
存储 缓存 NoSQL
MongoDB详解(三)——MongoDB集群
MongoDB详解(三)——MongoDB集群
35 4
|
6月前
|
NoSQL MongoDB
MongoDB分片+副本集高可用集群的启停步骤
MongoDB分片+副本集高可用集群的启停步骤
138 0
|
7月前
|
存储 NoSQL 网络安全
如何开通MongoDB的专属集群
本案例旨在展示如何开通MongoDB的专属集群。
66 1
|
4月前
|
存储 监控 NoSQL
数据存储与分析:办公室电脑屏幕监控的MongoDB应用实例
在当今数字时代,数据的存储和分析变得愈发重要,尤其是在办公环境中,对电脑屏幕进行监控成为一种日益普遍的需求。本文将介绍如何利用MongoDB数据库实现办公室电脑屏幕监控,并通过代码实例展示其应用。
219 0
|
9月前
|
NoSQL MongoDB 数据库
【mongo 系列】mongodb 学习九,MongoDB 主从集群 2
继续咱们 mongodb 集群的学习和分享 上次分享了 mongodb 主从集群的同步机制(oplog),心跳机制,这次我们继续看看选举机
|
4月前
|
NoSQL MongoDB Docker
docker搭建mongodb集群
docker搭建mongodb集群
85 0