MongoDB 集群中包含一个自动分片模块 (mongos). 自动分片可以用于构建一个大规模的可扩展的数据库集群,这个集群可以并入动态增加的机器。自动建立一个水平扩展的数据库集群系统,将数据库分表存储在sharding的各个节点上。在一个mongodb的集群中包括一些shar

MongoDB 集群中包含一个自动分片模块 ("mongos"). 自动分片可以用于构建一个大规模的可扩展的数据库集群,这个集群可以并入动态增加的机器。自动建立一个水平扩展的数据库集群系统,将数据库分表存储在sharding的各个节点上。在一个mongodb的集群中包括一些shards(mongod进程),mongos的路由进程,一个或多个config服务器。sharding是一种对大规模数据存储的一种策略,关于sharding的详细信息可以查看这里。也许有人会问,为什么需要做这种策略,因为在一个大型系统中最后的瓶颈会落在网络的带宽和磁盘的读写上,如果将数据分布在多个机器上的多个磁盘上,将会系统数据的处理能有所提高。

MongoDB 集群的结构:

下图中Shard是指每个节点的shard有一个或更多的服务器和存储数据的mongod进程,而mongod是MongoDB数据的核心进程。

每台机器上的mongod从配置获取服务器(元数据metadata ),然后,当收到客户端请求时,它请求路由到相应的服务器组和编译结果发送回客户端。

mongos进行可以被看作是一个路由和协调的过程,因为他可以使得每个单一的各个节点组成一个集群系统。 另外还需要强调一点mongos进程没有持久状态,每个实例都需要一定的数据存储的内存空间。

换而言之,所谓MongoDB 集群也就是 MongoDB做了一个数据库路由的策略,而且保证跨库操作的数据库事务,而MongoDB 集群中的关键部分Sharding不是一门新技术,而是一种策略,关键还是看应用场景和案例提供的可用性,因为Sharding不仅仅是MongoDB 集群中所提到的分布在不同的机器上,还可以分表,分区,分数据,等等。

MongoDB 集群的工作原理:

其中有一个服务器上存储着集群的metadata信息,包括每个服务器,每个shard的基本信息和chunk信息Config Server 主要存储的是chunk信息。每一个config服务器都复制了完整的chunk信息,就是下图中左边黄色的部分。

如果客户端对集群的MongoDB插入一条数据,客户端并不知道刚刚插入的数据被分配到具体哪个MongoDB节点上了,因为当一条数据被传入 MongoDB集群中通过mongos路由,所以我们并感觉不到是数据存放在哪个shard的 chunk上,但是通过后台的Sharding的管理命令可以看到插入的数据存放在哪个节点上。

配置MongoDB集群

模拟2个shard服务、一个config服务、一个mongos process,全部运行在一个测试的服务器上,具体配置步骤如下:

口水: –shardsvr 是表示以sharding模式启动Mongodb服务器,Mongodb数据同步方式参见我写的另外一篇文章“MongoDB 主(Master)/从(Slave)数据同步 ”

$ mkdir /data/db/a

$ mkdir /data/db/b

$ mkdir /data/db/config

$ ./mongod –shardsvr –dbpath /data/db/a –port 10000 > /tmp/sharda.log &

$ cat /tmp/sharda.log

$ ./mongod –shardsvr –dbpath /data/db/b –port 10001 > /tmp/shardb.log &

$ cat /tmp/shardb.log

$ ./mongod –configsvr –dbpath /data/db/config –port 20000 > /tmp/configdb.log &

$ cat /tmp/configdb.log

$ ./mongos –configdb localhost:20000 > /tmp/mongos.log &

$ cat /tmp/mongos.log

$ # we connect to mongos process

$ ./mongo

MongoDB shell version: 1.1.0-

url: test

connecting to: test

type "help" for help

> use admin

switched to db admin

> db.runCommand( { addshard : "localhost:10000", allowLocal : true } )

{"ok" : 1 , "added" : "localhost:10000"}

> db.runCommand( { addshard : "localhost:10001", allowLocal : true } )

{"ok" : 1 , "added" : "localhost:10001"}

> config = connect("localhost:20000")

> config = config.getSisterDB("config")

> test = db.getSisterDB("test")

test

> db.runCommand( { enablesharding : "test" } )

{"ok" : 1}

> db.runCommand( { shardcollection : "test.people", key : {name : 1} } )

{"ok" : 1}

> db.runCommand({listshards:1})

{"servers" : [{"_id" : ObjectId( "4a9d40c981ba1487ccfaa634") , "host" : "localhost:10000"},

{"_id" : ObjectId( "4a9d40df81ba1487ccfaa635") , "host" : "localhost:10001"}] ,

"ok" : 1}

>

BTW:

MongoDB是一个介于关系数据库和非关系数据库之间的产品,MongoDB的数据结构非常松散,他的数据格式类似json的bjson格式,因此可以存储比较复杂的数据类型。

另外,Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

Mongo还可以解决海量数据的查询效率,根据官方文档,当数据量达到50GB以上数据时,Mongo数据库访问速度是MySQL10 倍以上。对于这点我将来会去做些试验来进行证明。

每个节点上都是单点的,不知道MongoDB Sharding+Replication是什么效果,因为被散列的服务器还是存在着单点的现象,如果其中一个散列的节点坏点那么数据就不存在了。下面还要试试这2种方式的结合。

相关文章:

MongoDB 主(Master)/从(Slave)数据同步

Java操作 MongoDB NoSQL数据库

–end–

mysql mongodb 集群_MongoDB 集群相关推荐

  1. MongoDB 分片(sharding)+副本集(replSet)集群搭建

    文章目录 MongoDB安装 Windows平台安装 1.下载 2.安装 3.启动MongoDB服务 4.进入MongoDB后台 Linux平台安装MongoDB 1.下载 2.安装 3.创建数据库目 ...

  2. 深入学习MySQL、SQL优化、集群搭建

    个人博客欢迎访问 总结不易,如果对你有帮助,请点赞关注支持一下 微信搜索程序dunk,关注公众号,获取博客源码 日拱一卒,不期速成,厚积薄发 序号 内容 1 Java基础面试题 2 JVM面试题 3 ...

  3. 如何在Ubuntu 16.04上使用MySQL 5.6配置Galera集群

    原作者:梅丽莎安德森  转载翻译:https://www.digitalocean.com/community/tutorials/how-to-configure-a-galera-cluster- ...

  4. 想提高运维效率,那就把MySQL数据库部署到Kubernetes 集群中

    摘要:Kubernetes 很多看起来比较"繁琐"的设计的主要目的,都是希望为开发者提供更多的"可扩展性",给使用者带来更多的"稳定性"和& ...

  5. Mongodb sharding转换一个副本集为分片集群

    2019独角兽企业重金招聘Python工程师标准>>> 1. 部署一个测试副本集 创建第一个副本集实例,名称为firstset: 1.1 创建副本集并且插入数据如下:/data/ex ...

  6. Mongodb的三种集群方式的搭建

    Mongodb是时下流行的NoSql数据库,它的存储方式是文档式存储,并不是Key-Value形式.关于Mongodb的特点,这里就不多介绍了,大家可以去看看官方说明:http://docs.mong ...

  7. MongoDB 单节点升级为副本集高可用集群

    文章目录 项目背景 副本集架构 升级架构前注意事项 一.原单节点MongoDB配置信息 1.1 原配置文件 1.2 在原来配置文件增加副本集配置 二.新增节点信息 2.1 新增节点配置文件 2.2 启 ...

  8. WebDay19 MySQL存储引擎 索引 锁 集群

    MySQL存储引擎 索引 锁 集群 一.MySQL存储引擎 1.MySQL体系结构 2.MySQL存储引擎 3.常用引擎的特性对比 4.引擎的操作 5.总结:引擎的选择 二.MySQL索引 1.索引的 ...

  9. mongo学习笔记四:Mongodb的三种集群(Replica Set)

    Replica Set    中文翻译叫做副本集,不过我并不喜欢把英文翻译成中文,总是感觉怪怪的.其实简单来说就是集群当中包含了多份数据,保证主节点挂掉了,备节点能继续提供数据服务,提供的前提就是数据 ...

最新文章

  1. 微星网卡linux驱动,微星中国
  2. php设计模式之单例(多例),注册器,观察者模式
  3. HH SaaS电商系统的商品类目设计
  4. 从分析***方式来谈如何防御DDoS***
  5. 【Oracle】 expdp/impdp
  6. 三天学会HTML5——SVG和Canvas的使用
  7. sudo su 和sudo -s的区别
  8. Programiz 中文系列教程·翻译完成
  9. vivo手机刷鸿蒙教程,vivo手机怎么刷机_vivo手机刷机全教程
  10. 1分钟教会你如何截图文字识别,建议收藏备用
  11. QFD修改工作流并重新发布中的问题
  12. 使用docker 搭建 ceph 开发环境,使用aws sdk 存储数据
  13. win32简单只读文件程序
  14. 关于第二次考试的总结与反思
  15. 微信开发(1):VM331:2 未找到 pages/index/index.wxml 文件
  16. 再谈多态——向上映射及VMT/DMT
  17. 中国天气网天气预报API接口城市代码(XML格式,信息全)
  18. IDEA终于支持云端了,可同步所有配置和插件,一招搞定,重装不愁
  19. php接口内session,php4的session功能评述(一)
  20. html标签引入css样式的四种方式

热门文章

  1. dism失败 ox800f0818_win10无法安装 .NET framework 3.5 错误代码 0x8e5e03fa - Microsoft Community...
  2. idea自动导入包和删除没有用的包
  3. 南方科技大学与中国科学院深圳理工大学(筹) 2021年联合培养研究生(第二轮)调剂通知
  4. 【性能测试】Web性能测试
  5. CentOS-7-x86_64-DVD-1804镜像
  6. 荣耀9.0系统机器最简单激活Xposed框架的步骤
  7. The logbook of Android bug in daily development.
  8. 追涨行为因子:基于上交所投资者账户数据的散户交易行为量化策略
  9. SystemVerilog 接口之采样竞争
  10. ubuntu16.4版本安装docker-ce提示Package ‘docker-ce‘ has no installation candidate解决的办法