当前位置:Gxlcms > 数据库问题 > mongodb10---分片

mongodb10---分片

时间:2021-07-01 10:21:17 帮助过:4人阅读

mongos,人对mongos查数据写数据。

技术分享图片

 

  1. <span style="color: #800000; font-weight: bold">1</span>:在3台独立服务器上,分别运行 <span style="color: #800000; font-weight: bold">27017</span>,<span style="color: #800000; font-weight: bold">27018</span>,27019实例, 互为副本集,形成3套repl <span style="color: #0000ff">set</span>
  2. <span style="color: #800000; font-weight: bold">2</span><span style="color: #000000">: 在3台服务器上,各配置config server, 运行27020端口上
  3. </span><span style="color: #800000; font-weight: bold">3</span><span style="color: #000000">: 配置mongos
  4. .</span><span style="color: #808080">/</span>bin<span style="color: #808080">/</span>mongos <span style="color: #008080">--</span><span style="color: #008080">port 30000 \</span>
  5. <span style="color: #008080">--</span><span style="color: #008080">dbconfig 192.168.1.201:27020,192.168.1.202:27020,192.168.1.203:27020</span>
  6. <span style="color: #800000; font-weight: bold">4</span><span style="color: #000000">:连接路由器
  7. .</span><span style="color: #808080">/</span>bin<span style="color: #808080">/</span>mongo <span style="color: #008080">--</span><span style="color: #008080">port 30000</span>
  8. <span style="color: #800000; font-weight: bold">5</span><span style="color: #000000">: 添加repl set为片
  9. </span><span style="color: #808080">></span>sh.addShard(‘<span style="color: #800000; font-weight: bold">192.168</span>.<span style="color: #800000; font-weight: bold">1.201</span>:<span style="color: #800000; font-weight: bold">27017</span><span style="color: #000000">’);
  10. </span><span style="color: #808080">></span>sh.addShard(‘<span style="color: #800000; font-weight: bold">192.168</span>.<span style="color: #800000; font-weight: bold">1.203</span>:<span style="color: #800000; font-weight: bold">27017</span><span style="color: #000000">’);
  11. </span><span style="color: #808080">></span>sh.addShard(‘<span style="color: #800000; font-weight: bold">192.168</span>.<span style="color: #800000; font-weight: bold">1.203</span>:<span style="color: #800000; font-weight: bold">27017</span><span style="color: #000000">’);
  12. </span><span style="color: #800000; font-weight: bold">6</span><span style="color: #000000">: 添加待分片的库
  13. </span><span style="color: #808080">></span><span style="color: #000000">sh.enableSharding(databaseName);
  14. </span><span style="color: #800000; font-weight: bold">7</span><span style="color: #000000">: 添加待分片的表
  15. </span><span style="color: #808080">></span>sh.shardCollection(‘dbName.collectionName’,{field:<span style="color: #800000; font-weight: bold">1</span><span style="color: #000000">});
  16. Field是collection的一个字段,系统将会利用filed的值,来计算应该分到哪一个片上.
  17. 这个filed叫”片键”, shard </span><span style="color: #0000ff">key</span>
  1. <span style="color: #000000">mongodb不是从单篇文档的级别,绝对平均的散落在各个片上,
  2. 而是N篇文档,形成一个块"chunk",
  3. 优先放在某个片上,片上又分为一个一个的块,
  4. 当这片上的chunk,比另一个片的chunk,区别比较大时, (</span><span style="color: #808080">>=</span><span style="color: #800000; font-weight: bold">3</span><span style="color: #000000">) ,会把本片上的chunk,移到另一个片上, 以chunk为单位,
  5. 维护片之间的数据均衡
  6. 问: 为什么插入了10万条数据,才2个chunk?
  7. 答: 说明chunk比较大(默认是64M)
  8. 在config数据库中,修改chunksize的值.
  9. </span><span style="color: #0000ff">Use</span><span style="color: #000000"> config
  10. Show tables
  11. Db.settings.find(); </span><span style="color: #808080">//</span>{id:’chunksize’,’value’:<span style="color: #800000; font-weight: bold">64</span><span style="color: #000000">}
  12. 问: 既然优先往某个片上插入,当chunk失衡时,再移动chunk,
  13. 自然,随着数据的增多,shard的实例之间,有chunk来回移动的现象,这将带来什么问题?
  14. 答: 服务器之间IO的增加,
  15. 接上问: 能否我定义一个规则, 某N条数据形成1个块,预告分配M个chunk,
  16. M个chunk预告分配在不同片上.
  17. 以后的数据直接入各自预分配好的chunk,不再来回移动?
  18. 答: 能, 手动预先分片!</span>
  1. mkdir <span style="color: #808080">-</span>p <span style="color: #808080">/</span>data<span style="color: #808080">/</span>r17 <span style="color: #808080">/</span>data<span style="color: #808080">/</span>r18 <span style="color: #808080">/</span>data<span style="color: #808080">/</span>r20 <span style="color: #808080">/</span>data<span style="color: #808080">/</span>mlog <span style="color: #808080">//</span><span style="color: #800000; font-weight: bold">17</span><span style="color: #000000">,18是shard的端口,20是configsvr的端口
  2. </span><span style="color: #808080">//</span><span style="color: #000000">启动2个mongo片的实例
  3. </span><span style="color: #808080">/</span>usr<span style="color: #808080">/</span>local<span style="color: #808080">/</span>mongodb<span style="color: #808080">/</span>bin<span style="color: #808080">/</span>mongod <span style="color: #008080">--</span><span style="color: #008080">dbpath /data/r17/ --logpath /data/mlog/r17.log --port 27017 --fork --smallfile</span>
  4. <span style="color: #808080">/</span>usr<span style="color: #808080">/</span>local<span style="color: #808080">/</span>mongodb<span style="color: #808080">/</span>bin<span style="color: #808080">/</span>mongod <span style="color: #008080">--</span><span style="color: #008080">dbpath /data/r18/ --logpath /data/mlog/r18.log --port 27018 --fork --smallfile</span>
  5. <span style="color: #808080">//</span><span style="color: #000000">准备configsvc(不是一台存储数据的服务器,而是存储配置信息的服务器)
  6. </span><span style="color: #808080">/</span>usr<span style="color: #808080">/</span>local<span style="color: #808080">/</span>mongodb<span style="color: #808080">/</span>bin<span style="color: #808080">/</span>mongod <span style="color: #008080">--</span><span style="color: #008080">dbpath /data/r20/ --logpath /data/mlog/r20.log --port 27020 --fork --configsvr</span>
  7. <span style="color: #808080">//</span><span style="color: #000000">mongos路由器
  8. </span><span style="color: #808080">/</span>usr<span style="color: #808080">/</span>local<span style="color: #808080">/</span>mongodb<span style="color: #808080">/</span>bin<span style="color: #808080">/</span>mongos <span style="color: #008080">--</span><span style="color: #008080">logpath /data/mlog/r30.log --port 30000 --configdb 192.168.202:27020 --fork//哪台configsvr为他服务,现在mongos和configsvr连在了一起但是还没有和shard连在一起。</span>
  9. <span style="color: #000000">
  10. ps aux </span><span style="color: #808080">|</span> grep mongo <span style="color: #808080">//</span><span style="color: #000000">可以看到刚才的4个进程
  11. </span><span style="color: #808080">//</span><span style="color: #000000">连接mongos
  12. .</span><span style="color: #808080">/</span>bin<span style="color: #808080">/</span>mongo <span style="color: #008080">--</span><span style="color: #008080">port 30000</span>
  13. <span style="color: #808080">//</span><span style="color: #000000">添加repl set为片,现在3者都连接到一起了,
  14. </span><span style="color: #808080">></span>sh.addShard(‘<span style="color: #800000; font-weight: bold">192.168</span>.<span style="color: #800000; font-weight: bold">1.201</span>:<span style="color: #800000; font-weight: bold">27017</span><span style="color: #000000">’);
  15. </span><span style="color: #808080">></span>sh.addShard(‘<span style="color: #800000; font-weight: bold">192.168</span>.<span style="color: #800000; font-weight: bold">1.203</span>:<span style="color: #800000; font-weight: bold">27018</span><span style="color: #000000">’);
  16. sh.status() </span><span style="color: #808080">//</span><span style="color: #000000">可以查看分片信息
  17. </span><span style="color: #0000ff">use</span><span style="color: #000000"> test
  18. db.stu.</span><span style="color: #0000ff">insert</span><span style="color: #000000">({ss:"ss"})
  19. db.stu.</span><span style="color: #0000ff">insert</span><span style="color: #000000">({ss:"ss"})
  20. db.stu.</span><span style="color: #0000ff">insert</span><span style="color: #000000">({ss:"ss"})
  21. db.stu.</span><span style="color: #0000ff">insert</span><span style="color: #000000">({ss:"ss"})
  22. db.stu.</span><span style="color: #0000ff">insert</span><span style="color: #000000">({ss:"ss"})
  23. </span><span style="color: #808080">//</span><span style="color: #000000">连接到27017
  24. .</span><span style="color: #808080">/</span>bin<span style="color: #808080">/</span>mongo <span style="color: #008080">--</span><span style="color: #008080">port 27017</span>
  25. db.find() <span style="color: #808080">//</span><span style="color: #000000">有数据
  26. </span><span style="color: #808080">//</span><span style="color: #000000">连接到27018
  27. .</span><span style="color: #808080">/</span>bin<span style="color: #808080">/</span>mongo <span style="color: #008080">--</span><span style="color: #008080">port 27018</span>
  28. db.find() <span style="color: #808080">//</span><span style="color: #000000">没有数据,因为没有指定分片规则
  29. </span><span style="color: #808080">//</span><span style="color: #000000">添加待分片的库(谁可以分片)
  30. </span><span style="color: #808080">></span>sh.enableSharding(<span style="color: #ff0000">‘</span><span style="color: #ff0000">shop</span><span style="color: #ff0000">‘</span>); <span style="color: #808080">//</span><span style="color: #000000">shop库可以分片
  31. sh.status() </span><span style="color: #808080">//</span><span style="color: #000000">可以看到shop库可以分片
  32. </span><span style="color: #808080">//</span><span style="color: #000000">添加待分片的表
  33. </span><span style="color: #808080">></span>sh.shardCollection(<span style="color: #ff0000">‘</span><span style="color: #ff0000">shop.goods</span><span style="color: #ff0000">‘</span>,{goods_id:<span style="color: #800000; font-weight: bold">1</span><span style="color: #000000">});
  34. sh.status() </span><span style="color: #808080">//</span><span style="color: #000000">可以看到shop库goods表的状态
  35. </span><span style="color: #808080">//</span><span style="color: #000000">添加2000数据
  36. </span><span style="color: #0000ff">use</span><span style="color: #000000"> shop
  37. </span><span style="color: #0000ff">for</span>(<span style="color: #ff00ff">var</span> i<span style="color: #808080">=</span><span style="color: #800000; font-weight: bold">1</span>;i<span style="color: #808080"><</span><span style="color: #800000; font-weight: bold">600000</span>;i<span style="color: #808080">++</span><span style="color: #000000">){
  38. db.goods.</span><span style="color: #0000ff">insert</span>({ss:"ss"<span style="color: #808080">+</span><span style="color: #800000; font-weight: bold">1</span><span style="color: #000000">})
  39. }
  40. db.goods.find()
  41. </span><span style="color: #808080">//</span><span style="color: #000000">查看分片数据
  42. .</span><span style="color: #808080">/</span>bin<span style="color: #808080">/</span>mongo <span style="color: #008080">--</span><span style="color: #008080">port 27017</span>
  43. <span style="color: #000000">db.find()
  44. .</span><span style="color: #808080">/</span>bin<span style="color: #808080">/</span>mongo <span style="color: #008080">--</span><span style="color: #008080">port 27018</span>
  45. db.find()

 

mongodb10---分片

标签:独立   节点   连接   增加   conf   img   ima   技术分享   grep   

人气教程排行