mongodb分片实战

mongodb分片实战

大家好,又见面了,我是全栈君。

分片技术其实就是一个分布式的过程,但是mongodb的负载和其他的负载有所不同,在整个mongodb分布式的集群中一共有如下角色:

    mongos:mongos就是一个路由服务器,它会根据管理员设置的“片键”将数据分摊到自己管理的mongod集群,负责和客户端直接交互

    config:数据和片的对应关系以及相应的配置信息保存在”config服务器”上

    mongodb:负责存放数据的地方,如果不做分片的话,我们会直接连接mongodb

信息大概如下图所示:

              wKiom1Ph9B3gh67UAAEow0c6rGw678.jpg

端口介绍:

        mongodb1 27017

        mongodb2 27018

        config   27027

        mongos   40000

步骤一

    创建mongodb1和mongodb2的db目录和log目录,并启动mongodb1和mongodb2

       mkdir -p /opt/mongodb/data/s1

    mkdir -p /opt/mongodb/data/s2

    mkdir -p /opt/mongodb/log/

    ./mongod –port 27017 –dbpath /opt/mongodb/data/s1 –fork –logpath /opt/mongodb/log/s1.log

    ./mongod –port 27018 –dbpath /opt/mongodb/data/s2 –fork –logpath /opt/mongodb/log/s2.log

步骤二

    创建Config Server的db目录,启动Config Server

    mkdir -p /opt/mongodb/data/config

    ./mongod –port 27027 –dbpath /opt/mongodb/data/config –fork –logpath /opt/mongodb/log/config.log

步骤三

    启动mongos Server

    ./mongos –port 40000 –configdb localhost:27027 –fork –logpath /opt/mongodb/log/mongos.log

步骤四

    服务配置

   连接mongos服务器,然后将27017,27018的mongod交给mongos,添加分片也就是addshard()

   mongos> db.runCommand({“addshard”:”127.0.0.1:27017″,allowLocal:true})
   mongos> db.runCommand({“addshard”:”127.0.0.1:27018″,allowLocal:true})

   片已经集群了,但是mongos不知道该如何切分数据,在mongodb中设置片键来解决此问题

   mongos> db.runCommand({“enablesharding”:”weisong”})  对xiaoxin库进行分片

   设置键为weisong库里面的user表里面的name字段

   mongos> db.runCommand({“shardcollection”:”weisong.user”,”key”:{“name”:1}}) 

步骤五

    验证

   往数据里面插入1W条数据

   mongos> for(var i=0;i<10000;i++){

           …db.user.insert({“name”:”jack”+i,”age”:i})
           …}

   查看插入结果

   mongos> db.printShardingStatus()

wKioL1Ph_MKgXnQ7AALZoiUbUkw074.jpg

   在返回信息中我们要注意下面四个地方

    ① shards 我们能清楚的看到集群分了2个片分别为27017和27018

    ② databases 我们能清楚的看到我们对weisong库进行了分片

    ③ 我们看到了两个分片的比例为2:1

    ④ 我们会发现在name值被划分了3个区域

          无穷小–>name0、name0–>name999、name999–>无穷大










本文转自 xinsir999 51CTO博客,原文链接:http://blog.51cto.com/xinsir/1536529,如需转载请自行联系原作者
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/107895.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • PLD- FPGA与CPLD的区别[通俗易懂]

    PLD- FPGA与CPLD的区别[通俗易懂]http://home.eeworld.com.cn/my/space.php?uid=170289&do=blog&id=31215FPGA与CPLD的区别多篇整合系统的比较,与大家共享:尽管FPGA和CPLD都是可编程ASIC器件,有很多共同特点,但由于CPLD和FPGA结构上的差异,具有各自的特点:①CPLD更适合完成各种算法和组合逻辑,FPGA更适合于完成时序逻辑

    2022年5月27日
    41
  • RBAC权限管理

    RBAC权限管理

    2021年12月6日
    47
  • mysql数据库批量插百万数据_sql数据库怎样批量添加数据

    mysql数据库批量插百万数据_sql数据库怎样批量添加数据DELIMITER$DROPPROCEDUREifEXISTSpro_batch_insert$CREATEPROCEDUREpro_batch_insert(INinsert_numINT)BEGINDECLAREiINTDEFAULT1;WHILEi<=insert_numDOINSERTINTOadmin(username,`password`)VALUES(CONCAT(‘Rose’,i),’666′);.

    2022年9月26日
    3
  • mesh和ADhoc区别[通俗易懂]

    mesh和ADhoc区别[通俗易懂]adhoc网络和无线Mesh网络都采用分布式、自组织的思想形成网络,网络每个节点都具备路由功能,随时为其他节点的数据传输提供路由和中继服务。adhoc网络主要侧重应用于移动环境中,确保网络内任意两个节点的可靠通信,网络内数据流可以包括语音、数据和多媒体信息。无线Mesh网络是一种无线宽带接入网络,利用分布式思想构建网络,让用户在任何时间、任何地点都可以对互联网进行高速无线访问,是由ADh…

    2025年6月23日
    4
  • jQuery和Vue的区别[通俗易懂]

    jQuery和Vue的区别[通俗易懂]1.jQuery首先要获取到dom对象,然后对dom对象进行进行值的修改等操作2.Vue是首先把值和js对象进行绑定,然后修改js对象的值,Vue框架就会自动把dom的值就行更新。3.可以简单的理解为Vue帮我们做了dom操作,我们以后用Vue就需要修改对象的值和做好元素和对象的绑定,Vue这个框架就会自动帮我们做好dom的相关操作4.这种dom元素跟随JS对象值的变化而变化叫做单向数据绑…

    2022年10月16日
    4
  • ajax 面试题_javascript 面试题

    ajax 面试题_javascript 面试题1、什么是AJAX,为什么要使用Ajax(请谈一下你对Ajax的认识)什么是ajax:AJAX是“AsynchronousJavaScriptandXML”的缩写。他是指一种创建交互式网页应用的网页开发技术。Ajax包含下列技术:基于web标准(standards-basedpresentation)XHTML+CSS的表示;使用DOM(DocumentObjectModel)进行动态显

    2022年8月29日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号