MongoDB的分布式部署

  一、分片的概念

    分片(sharding)是指根据片键,将数据进行拆分,使其落在不同的机器上的过程。如此一来,不需要功能,配置等强大的机器,也能储存大数据量,处理更高的负载。

  二、分片的原理和思想

   MongoDB分片的基本思想就是将集合切分成小块。这些块分散到若干片里面,每个片只负责总数据的一部分。

      对于客户端来说,无需知道数据被拆分了,也无需知道服务端哪个分片对应哪些数据。数据在分片之前需要运行一个路由进程,进程名为mongos。这个路由器知道所有数据的存放位置,知道数据和片的对应关系。对客户端来说,它仅知道连接了一个普通的mongod,在请求数据的过程中,通过路由器上的数据和片的对应关系,路由到目标数据所在的片上,如果请求有了回应,路由器将其收集起来回送给客户端

   

  二、分片的简单实现

   (1)片键的概念

       设置分片时,需要从集合里面选一个键,用该键的值作为数据拆分的依据。这个键称为片键(shard key)。

      {department:"IT",name:"zhangsan"},{department:"HR",name:"lisi"},{department:"SUPPORT",name:"zhaowu"}

      以该数据为例,表示的是职员名字以及所在的部门,假若我们设置部门(department)为片键,那么第一片可能存放名称以字母A-F开头的部门,第二片存放名称以G~P开头的部门,第三片存Q~Z,如此类推。随着添加或者删除片,MongoDB会重新平衡数据,使每片的流量都比较均衡,数据量也在合理范围内。

    (2)本地模拟实现

       a、首先mongod开启服务端3个节点,端口分别为8080,8081,8082

       b、开启config服务器 。mongos要把mongod之间的配置放到config服务器里面,所以首先开启它,这里就使用8083端口。 命令为:

        mongod --dbpath E:\sharding\config_node --port 8083

       c、开启mongos服务器 。端口8084,同时指定下config服务器。命令为:

        mongos --port 8084 --configdb=127.0.0.1:8083

       d、 路由指定服务端节点。客户端直接跟mongos打交道,也就说明我们要连接mongos服务器,然后将8080,8081,8082的mongod交给mongos,添加分片也就是addshard()。需要进到路由节点的admin数据库进行配置。allowLocal表示该服务端节点,可被客户端直接连接而无需经过路由。

        db.runCommand({"addshard":"127.0.0.1:8080",allowLocal:true})

        db.runCommand({"addshard":"127.0.0.1:8081",allowLocal:true})

        db.runCommand({"addshard":"127.0.0.1:8082",allowLocal:true})

         e、 开启数据库分片功能,命令为enablesharding(),并指定数据库名称,如下指定每个mongod都有的test数据库

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

       f、 指定集合中分片的片键,这里就指定为company.department键.

        db.runCommand({"shardcollection":"company.department","key":{"depatment":1}})

       g、 通过向mongos节点插入100万条数据,查看各节点保存的数据。

       h、 通过向mongos插入一条数据,查看数据被分配到哪个片

时间: 2024-10-29 19:12:20

MongoDB的分布式部署的相关文章

mongodb的分布式集群(1、主从复制)

分布式集群的理解 关于分布式集群的概念有很多的解释,我比较倾向于"分布式集群"为两个概念,即,分布式是一个概念,集群是另一概念. 分布式是把一个整体系统分成多个部分,分别部署到不同的服务器上,然后由中心服务器统一控制,形成的一个对外来说为一个整体的系统.集群是把一个整体,整体的分别部署到多个服务器上的结果. 分布式和集群都是部署上的现象的描述,都涉及到多台服务器的部署,这是分布式和集群相同的地方,当然,其达到的效果也有很多一样的,但是,他们却是描述着两种不同的现象.今天就讲一下关于mo

mongodb的分布式集群(3、分片)

概述 上面两篇博客都是关于mongodb的集群的配置,没有涉及到分布式,该片博客就是写mongodb的分布式,把一个整体,分成多个片,每个片部署到不同的服务器上,这个就是mongodb的分布式,即:mongodb的分片操作. 部署图 mongos服务器做的是路由服务器,config服务器就是保存相应配置的服务器,shard1和shard2就是分片服务器,这两个服务器合在一起才是一个整体,而mongos服务器就是他们的和点,所以,我们客户端只需要和mongos服务器交互就可以了,后面的,服务器自己

Mongodb集群部署以及集群维护命令

Mongodb集群部署以及集群维护命令 http://lipeng200819861126-126-com.iteye.com/blog/1919271 mongodb分布式集群架构及监控配置 http://freeze.blog.51cto.com/1846439/884925/ 见文中: 七.监控配置:      早在去年已经出现MongoDB和Redis的Cacti模板,使用它,你可以对你的MongoDB和Redis服务进行流量监控.cacti的模板一直在更新,若企业已经用到nosql这种

Zabbix基于Proxy分布式部署实现Web监控

前言 在日常运维工作中,难免会遇到这样或那样的故障,如何能在第一时间发现故障,并及时定位故障原因,保证业务不受影响,我想这应该是做好一个运维必须要掌握的技能.但人力不可能实时掌控系统的变化,于是监控系统应运而生,监控便是运维的眼睛,把监控和性能管理做好后,运维就是一件很轻松的事情.目前比较流行的开源监控工具有Cacti.Nagios(Icinga).Zabbix等.本文带来的是Zabbix基于Proxy分布式部署实现Web监控. Zabbix 简介 Zabbix是一个基于Web界面提供分布式系统

Apache/nginx转发设置-分布式部署(转)

转自http://blog.csdn.net/fujianianhua/article/details/8062234 Apache转发设置 1.  Weblogic安装 Weblogic8和Weblogic10默认安装,选择完全安装即可,如果是Weblogic9则选择自定义安装,勾选WebService plugin 2.apache服务器安装 安装说明详见文档<Apache服务器搭建说明.doc> 版本对应关系: Weblogic版本   Apache版本 weblogic8     Ap

【G】开源的分布式部署解决方案(二) - 好项目是从烂项目基础上重构出来的

G.系列导航 [G]开源的分布式部署解决方案 - 预告篇 [G]开源的分布式部署解决方案(一) - 开篇 [G]开源的分布式部署解决方案(二) - 好项目是从烂项目基础上重构出来的 分析目前项目结构 眼前出现这么一坨坨的文件夹,相信很多人已经看不下去了.是的,首先就是要把它给做掉. 按照这个项目文件夹的命名意图,大概可以划分如下: 1.Business:业务代码 2.Data:数据访问 3.Helpers:辅助类(通用类库之类的) 4.Models:各种模型(包括视图模型) 5.theme:皮肤

Hadoop2经典分布式部署模式

Hadoop2经典分布式部署模式 基于QJN的HA模式的分布式部署,不含Federation模块的实践是一个经典的Hadoop2的高可用的分布式部署模式. 1.准备测试环境 准备4台PC服务器做Hadoop2部署 ip hostname namenode fc datanode rm nodemanage QJN 10.71.84.237 hadoop201 Y Y Y Y Y Y 10.71.84.223 hadoop202 Y Y Y Y Y Y 10.71.84.222 hadoop203

Apache Spark探秘:三种分布式部署方式比较

目前Apache Spark支持三种分布式部署方式,分别是standalone.spark on mesos和 spark on YARN,其中,第一种类似于MapReduce 1.0所采用的模式,内部实现了容错性和资源管理,后两种则是未来发展的趋势,部分容错性和资源管理交由统一的资源管理系统完成:让Spark运行在一个通用的资源管理系统之上,这样可以与其他计算框架,比如MapReduce,公用一个集群资源,最大的好处是降低运维成本和提高资源利用率(资源按需分配).本文将介绍这三种部署方式,并比

EF之MSSQL分布式部署一:EFContext自定义数据库链接

不废话,上代码: 来源:http://bbs.csdn.net/topics/390823046 原文地址:EF之MSSQL分布式部署一:EFContext自定义数据库链接 /// <summary> /// 得到Entity的连接字符串 /// </summary> /// <param name="edmxFullName">Edmx的包括命名空间的全名称</param> /// <param name="server