手机版
你好,游客 登录 注册
背景:
阅读新闻

MongoDB高可用架构—Replica Set 集群实战

[日期:2012-07-06] 来源:Linux公社  作者:linuxops [字体: ]
六、配置shard集群 
1.连接一台路由 
  1. [root@mongo01 sh]# mongo 192.168.8.30:30000/admin 
  2. MongoDB shell version: 2.0.5 
  3. connecting to: 192.168.8.30:30000/admin 
  4. mongos>  
2.加入shards 
  1. mongos> db.runCommand({ addshard : "shard1/192.168.8.30:27021,192.168.8.31:27021,192.168.8.32:27021",name:"shard1",maxSize:20480}) 
  2. "shardAdded" : "shard1""ok" : 1 } 
  3. mongos> db.runCommand({ addshard : "shard2/192.168.8.30:27022,192.168.8.31:27022,192.168.8.32:27022",name:"shard2",maxSize:20480}) 
  4. "shardAdded" : "shard2""ok" : 1 } 
PS:
分片操作必须在 admin 库下操作
如果只启动206和207服务器的路由!因此可不用把208服务器加进来!
可选参数说明:
Name:用于指定每个shard的名字,不指定的话系统将自动分配
maxSize:指定各个shard可使用的最大磁盘空间,单位 MegaBytes
 
3.列出加入的shards 
  1. mongos> db.runCommand( { listshards : 1 } ); 
  2.     "shards" : [ 
  3.         { 
  4.             "_id" : "shard1"
  5.             "host" : "shard1/192.168.8.30:27021,192.168.8.31:27021,192.168.8.32:27021"
  6.             "maxSize" : NumberLong(20480) 
  7.         }, 
  8.         { 
  9.             "_id" : "shard2"
  10.             "host" : "shard2/192.168.8.30:27022,192.168.8.31:27022,192.168.8.32:27022"
  11.             "maxSize" : NumberLong(20480) 
  12.         } 
  13.     ], 
  14.     "ok" : 1 

PS: 列出了以上二个我加的shards(shard1和shard2),表示shards已经配置成功!!
如果206那台机器挂了,其它两个节点中某个会成为主节点,mongos会自动连接到主节点!
  1. mongos> db.runCommand({ismaster:1}); 
  2.     "ismaster" : true
  3.     "msg" : "isdbgrid"
  4.     "maxBsonObjectSize" : 16777216, 
  5.     "ok" : 1 
  6. mongos> db.runCommand( { listshards : 1 } ); 
  7. "ok" : 0, "errmsg" : "access denied - use admin db" } 
  8. mongos> use admin 
  9. switched to db admin 
  10. mongos> db.runCommand( { listshards : 1 } ); 
  11.     "shards" : [ 
  12.         { 
  13.             "_id" : "s1"
  14.             "host" : "shard1/192.168.8.30:27021,192.168.8.31:27021" 
  15.         }, 
  16.         { 
  17.             "_id" : "s2"
  18.             "host" : "shard2/192.168.8.30:27022,192.168.8.31:27022" 
  19.         } 
  20.     ], 
  21.     "ok" : 1 
  22. mongos>  
 
七.添加分片
 
1.激活数据库分片
db.runCommand( { enablesharding : "<dbname>" } );
如:db.runCommand( { enablesharding : "" } );
 
插入测试数据:
  1. mongos> use nosql 
  2. switched to db nosql 
  3. mongos> for(var i=0;i<100;i++)db.fans.insert({uid:i,uname:'nosqlfans'+i}); 
激活数据库:
  1. mongos> use admin 
  2. switched to db admin 
  3. mongos> db.runCommand( { enablesharding : "nosql" } ); 
  4. "ok" : 1 } 

通过执行以上命令,可以让数据库跨shard,如果不执行这步,数据库只会存放在一个shard,一旦激活数据库分片,数据库中不同的collection 将被存放在不同的shard上,但一个collection仍旧存放在同一个shard上,要使单个collection也分片,还需单独对 collection作些操作!
 
2.添加索引
必须加索引,不然不能对collections分片!
  1. mongos> use nosql 
  2. switched to db nosql 
  3. mongos> db.fans.find() 
  4. "_id" : ObjectId("4ff2ae6816df1d1b33bad081"), "uid" : 0, "uname" : "nosqlfans0" } 
  5. "_id" : ObjectId("4ff2ae6816df1d1b33bad082"), "uid" : 1, "uname" : "nosqlfans1" } 
  6. "_id" : ObjectId("4ff2ae6816df1d1b33bad083"), "uid" : 2, "uname" : "nosqlfans2" } 
  7. "_id" : ObjectId("4ff2ae6816df1d1b33bad084"), "uid" : 3, "uname" : "nosqlfans3" } 
  8. "_id" : ObjectId("4ff2ae6816df1d1b33bad085"), "uid" : 4, "uname" : "nosqlfans4" } 
  9. "_id" : ObjectId("4ff2ae6816df1d1b33bad086"), "uid" : 5, "uname" : "nosqlfans5" } 
  10. "_id" : ObjectId("4ff2ae6816df1d1b33bad087"), "uid" : 6, "uname" : "nosqlfans6" } 
  11. "_id" : ObjectId("4ff2ae6816df1d1b33bad088"), "uid" : 7, "uname" : "nosqlfans7" } 
  12. "_id" : ObjectId("4ff2ae6816df1d1b33bad089"), "uid" : 8, "uname" : "nosqlfans8" } 
  13. "_id" : ObjectId("4ff2ae6816df1d1b33bad08a"), "uid" : 9, "uname" : "nosqlfans9" } 
  14. "_id" : ObjectId("4ff2ae6816df1d1b33bad08b"), "uid" : 10, "uname" : "nosqlfans10" } 
  15. "_id" : ObjectId("4ff2ae6816df1d1b33bad08c"), "uid" : 11, "uname" : "nosqlfans11" } 
  16. "_id" : ObjectId("4ff2ae6816df1d1b33bad08d"), "uid" : 12, "uname" : "nosqlfans12" } 
  17. "_id" : ObjectId("4ff2ae6816df1d1b33bad08e"), "uid" : 13, "uname" : "nosqlfans13" } 
  18. "_id" : ObjectId("4ff2ae6816df1d1b33bad08f"), "uid" : 14, "uname" : "nosqlfans14" } 
  19. "_id" : ObjectId("4ff2ae6816df1d1b33bad090"), "uid" : 15, "uname" : "nosqlfans15" } 
  20. "_id" : ObjectId("4ff2ae6816df1d1b33bad091"), "uid" : 16, "uname" : "nosqlfans16" } 
  21. "_id" : ObjectId("4ff2ae6816df1d1b33bad092"), "uid" : 17, "uname" : "nosqlfans17" } 
  22. "_id" : ObjectId("4ff2ae6816df1d1b33bad093"), "uid" : 18, "uname" : "nosqlfans18" } 
  23. "_id" : ObjectId("4ff2ae6816df1d1b33bad094"), "uid" : 19, "uname" : "nosqlfans19" } 
  24. has more 
  25. mongos> db.fans.ensureIndex({"uid":1}) 
  26. mongos> db.fans.find({uid:10}).explain() 
  27.     "cursor" : "BtreeCursor uid_1"
  28.     "nscanned" : 1, 
  29.     "nscannedObjects" : 1, 
  30.     "n" : 1, 
  31.     "millis" : 25, 
  32.     "nYields" : 0, 
  33.     "nChunkSkips" : 0, 
  34.     "isMultiKey" : false
  35.     "indexOnly" : false
  36.     "indexBounds" : { 
  37.         "uid" : [ 
  38.             [ 
  39.                 10, 
  40.                 10 
  41.             ] 
  42.         ] 
  43.     } 
3.Collecton分片
要使单个collection也分片存储,需要给collection指定一个分片key,通过以下命令操作:
db.runCommand( { shardcollection : "",key : }); 
 
  1. mongos> use admin 
  2. switched to db admin 
  3. mongos> db.runCommand({shardcollection : "nosql.fans",key : {uid:1}}) 
  4. "collectionsharded" : "nosql.fans""ok" : 1 } 
PS: 
1). 操作必须切换到admin数据库下
2). 分片的collection系统要创建好索引
3). 分片的collection只能有一个在分片key上的唯一索引,其它唯一索引不被允许
 
4.查看分片状态
 
  1. mongos> use nosql 
  2. mongos> db.fans.stats() 
  3.     "sharded" : true
  4.     "flags" : 1, 
  5.     "ns" : "nosql.fans"
  6.     "count" : 100, 
  7.     "numExtents" : 2, 
  8.     "size" : 5968, 
  9.     "storageSize" : 20480, 
  10.     "totalIndexSize" : 24528, 
  11.     "indexSizes" : { 
  12.         "_id_" : 8176, 
  13.         "uid0_1" : 8176, 
  14.         "uid_1" : 8176 
  15.     }, 
  16.     "avgObjSize" : 59.68, 
  17.     "nindexes" : 3, 
  18.     "nchunks" : 1, 
  19.     "shards" : { 
  20.         "shard1" : { 
  21.             "ns" : "nosql.test"
  22.             "count" : 100, 
  23.             "size" : 5968, 
  24.             "avgObjSize" : 59.68, 
  25.             "storageSize" : 20480, 
  26.             "numExtents" : 2, 
  27.             "nindexes" : 3, 
  28.             "lastExtentSize" : 16384, 
  29.             "paddingFactor" : 1, 
  30.             "flags" : 1, 
  31.             "totalIndexSize" : 24528, 
  32.             "indexSizes" : { 
  33.                 "_id_" : 8176, 
  34.                 "uid0_1" : 8176, 
  35.                 "uid_1" : 8176 
  36.             }, 
  37.             "ok" : 1 
  38.         } 
  39.     }, 
  40.     "ok" : 1 
  41. mongos> 
 些时分片没有发生变化!
再插入比较多的数据:
  1. mongos> use nosql 
  2. switched to db nosql 
  3. mongos> for(var i=200;i<200003;i++)db.fans.save({uid:i,uname:'nosqlfans'+i}); 
  4. mongos> db.fans.stats() 
  5.     "sharded" : true
  6.     "flags" : 1, 
  7.     "ns" : "nosql.fans"
  8.     "count" : 200002, 
  9.     "numExtents" : 12, 
  10.     "size" : 12760184, 
  11.     "storageSize" : 22646784, 
  12.     "totalIndexSize" : 12116832, 
  13.     "indexSizes" : { 
  14.         "_id_" : 6508096, 
  15.         "uid_1" : 5608736 
  16.     }, 
  17.     "avgObjSize" : 63.80028199718003, 
  18.     "nindexes" : 2, 
  19.     "nchunks" : 10, 
  20.     "shards" : { 
  21.         "shard1" : { 
  22.             "ns" : "nosql.fans"
  23.             "count" : 9554, 
  24.             "size" : 573260, 
  25.             "avgObjSize" : 60.00209336403601, 
  26.             "storageSize" : 1396736, 
  27.             "numExtents" : 5, 
  28.             "nindexes" : 2, 
  29.             "lastExtentSize" : 1048576, 
  30.             "paddingFactor" : 1, 
  31.             "flags" : 1, 
  32.             "totalIndexSize" : 596848, 
  33.             "indexSizes" : { 
  34.                 "_id_" : 318864, 
  35.                 "uid_1" : 277984 
  36.             }, 
  37.             "ok" : 1 
  38.         }, 
  39.         "shard2" : { 
  40.             "ns" : "nosql.fans"
  41.             "count" : 190448, 
  42.             "size" : 12186924, 
  43.             "avgObjSize" : 63.990821641602956, 
  44.             "storageSize" : 21250048, 
  45.             "numExtents" : 7, 
  46.             "nindexes" : 2, 
  47.             "lastExtentSize" : 10067968, 
  48.             "paddingFactor" : 1, 
  49.             "flags" : 1, 
  50.             "totalIndexSize" : 11519984, 
  51.             "indexSizes" : { 
  52.                 "_id_" : 6189232, 
  53.                 "uid_1" : 5330752 
  54.             }, 
  55.             "ok" : 1 
  56.         } 
  57.     }, 
  58.     "ok" : 1 
  59. mongos> 
 
当再次插入大量数据时。。自动分片处理了!!所以OK!!!
linux
相关资讯       集群  MongoDB教程  高可用  Replica Set 
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款