MongoDB学习06–分片技术

5月 16th, 2012
分片技术

  1. 当数据量达到T级别的时候,对CPU,内存和磁盘的压力都很大,这个时候就需要采用分片技术,将MongoDB中的集合进行拆分,分担到多个片(即多台MongoDB服务器)上;
  2. 跨服务器的数据拆分中,Sharding是一个有效的方法;MongoDB中支持自动化Sharding,但是对数据库性能会造成很大影响;因此建议用户尽早进行Sharding,使用MMS:Munin (+ Mongo plugin)和CloudWatch等工具对MongoDB进行监控,确保系统资源使用达到80%之前就完成Sharding工作;
  3. 分片技术中各个组件的职能及拓扑图:
    1. clients:客户端,即发出数据请求,并得到返回结果;
    2. config:保存数据和片的对应关系以及相应的配置信息,配置节点推荐使用使用主备,防止单点故障;
    3. mongos:即路由服务器,根据设置的片键(即集合拆分的依据)将数据分摊到不同的mongod集群;
    4. mongod:普通的MongoDB服务器,就是所谓的片;
    5. 拓扑图;                                                                                                 
  4. 使用不同的目录和端口来模拟不同的服务器:
    1. config:mongod –dbpath=/mongo/config –port=20001;
    2. mongos:mongos –port=20002 –configdb=127.0.0.1:20001;
    3. mongod1:mongod –dbpath=/mongo/mongod1 –port=30001;
    4. mongod2:mongod –dbpath=/mongo/mongod2 –port=30002;
    5. mongod3:mongod –dbpath=/mongo/mongod3 –port=30003;
  5. 开启config服务器:mongod –dbpath=/mongo/config –port=20001;                             
  6. 启动mongos服务器(不需要指定数据目录,因为它只是起到路由器的功能),同时要指定config服务器,因为要写入配置信息:mongos –port=20002 –configdb=127.0.0.1:20001;                               
  7. 分别启动三台mongod服务器:mongod –dbpath=/mongo/mongodX –port=3000X;
  8. 配置mongos服务:
    1. 连接mongos服务并添加分片节点:mongo 127.0.0.1:20002/admin;                                
    2. 开启数据库的分片功能,以test数据库为例:db.runCommand({“enablesharding”:”test”});                                  
    3. 指定集合的分片键,以user集合的name列为例:                                             
  9. 查看效果:
    1. 通过mongos插入10w条测试数据;                                         
    2. 查看数据的分布情况:db.printShardingStatus();                                
    3. 结果分析:
      1. shards:查看到已经分成了shard0000,shard0001,shard0002三个片;
      2. databases:看到test的partitioned属性为true;
      3. chundks:被分成了$minKey(无穷小)->user0, user0->user9999, user9999->$maxKey(无穷大)三段;
———————— 配置mongos服务器 ————————
— 1.连接mongos服务器;
mongo 127.0.0.1:20002/admin
— 2.添加分片;
db.runCommand({addshard:”127.0.0.1:30001″, allowLocal:true})
db.runCommand({addshard:”127.0.0.1:30002″, allowLocal:true})
db.runCommand({addshard:”127.0.0.1:30003″, allowLocal:true})
— 3.开启数据库的分片功能;
db.runCommand({“enablesharding”:”test”})
— 4.指定片键;
db.runCommand({“shardcollection”:”test.user”, “key”:{“name”:1}})
———————— 配置mongos服务器 ————————
———————— 插入测试数据并查看结果 ————————
— 1.连接mongos服务器的test数据库;
mongo 127.0.0.1:20002/test
— 2.插入10w条测试数据;
for(var i = 0; i< 100000; i++){ db.user.insert({name:”user”+i, age:i}) }
— 3.查看数据分布情况;
db.printShardingStatus()
———————— 插入测试数据并查看结果 ————————
标签:
目前还没有任何评论.