MongoDB学习之二----模拟shard集群搭建

     一.相关概念     

           MongoDB如何存放大数据文件?     

           MongoDB对超过一定的大小(默认是64M)的大数据文件切割成数据块(chunks),然后在切片集群(shards)中间自动均衡,使得数据尽量实现均匀分布.

           MongoDB如何保证数据安全?

           MongoDB中每个shard其实就是一个replica Set(默认是3个replica,每一个replica可以理解为一台机器),这样shard里面存储的每个chunk都会存放在不同的机器上,能最大程度上防止因为意外造成的数据丢失.

          下图就是一个典型的MongDB的shard集群配置.

          MongoDB学习之二----模拟shard集群搭建_第1张图片

              从上图可以看出,ConfigServer的角色类似于HDFS中的nameNode,主要记录shards,chunks等的相关信息.replica set里面的replica类似于HDFS中的dataNode.客户端通过mongos对数据进行操作.

    二.模拟集群搭建
       

         1.搭建replica Set

            a.在MongoDB的bin目录下,建立db11,db12,db13,db21,db22,db23几个文件夹,创建名称分别为rs0和rs1两个replica Set,并启动mongod如下:

                mongod --dbpath db11(db12/d13) --port 10001(10002/10003) --replSet rs0 

                mongod --dbpath db21(db22/d23) --port 20001(20002/20003) --replSet rs1

            b.replica Set初始化(以rs0为例)

                通过mongo连接:mongo localhost:10001

                cfg = {_id:"rs0",members:[{_id:1,host:"192.168.0.86:10001"}]}

                rs.initiate(cfg)

                rs.add("192.168.0.86:10002")                 rs.add("192.168.0.86:10003")

            c.通过rs.conf()查看replica set信息

        2.启动configServer

            mongod --configsvr --dbpath config --port 30001

        3.搭建shard集群

            a.启动mongos:mongos --configdb 192.168.0.86:30001 --chunkSize 32(chunk的size) --port 28017

            b.连接mongos:mongo 192.168.0.86:28017/admin

            c.将rs0和rs1分别作为shard添加至集群:

               db.runCommand({addShard:"rs0/192.168.0.86:10001,192.168.0.86:10002,192.168.0.86:10003"})

            d.通过db.runCommand({listShards:1})查看集群情况

            e.插入数据

                use test

                for(i=0;i<1000000;i++){db.tb1.save({"user_id":i,"number":Math.random()*100000})}

                通过db.stats查看,发现此时数据大小超过32M,但是并未切割

            f.启动分片

                分片之前必须选定一个字段作为key,此处选择number作为key.

                db.tb1.ensureIndex({"number":1})

                use admin

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

                db.runCommand({shardCollection:"test.tb1",key:{"number":1}})

                通过db.printShardingStatus()可以发现chunk的均衡情况,如下图所示:

               

                过几分钟,再次执行db.printShardingStatus()可以发现chunk均衡完毕,如下图所示:

                MongoDB学习之二----模拟shard集群搭建_第2张图片

 

              

               

           

       

              

你可能感兴趣的:(mongodb)