设为首页 收藏本站
查看: 1906|回复: 0

[经验分享] Mongodb数据分片的实现

[复制链接]

尚未签到

发表于 2015-7-8 07:32:09 | 显示全部楼层 |阅读模式
  副本集实现了网站的安全备份和故障的无缝转移,但是并不能实现数据的大容量存储,毕竟物理硬件是有极限的,这个时候就需要做分布式部署,把数据保存到其他机器上。Mongodb的分片技术就很完美的实现了这个需求。
  理解Mongodb的分片技术即Sharding架构
  什么是Sharding?说白了就是把海量数据水平扩展的集群系统,数据分表存储在Sharding的各个节点上。
  Mongodb的数据分开分为chunk,每个chunk都是collection中的一段连续的数据记录,一般为200MB,超出则生成新的数据块。
  构建Sharding需要三种角色,
  shard服务器(Shard Server):Shard服务器是存储实际数据的分片,每个Shard可以是一个mongod实例,也可以是一组mongod实例构成的Replica Sets,为了实现每个Shard内部的故障自动切换,MongoDB官方建议每个Shard为一组Replica Sets。
  配置服务器(Config Server):为了将一个特定的collection存储在多个Shard中,需要为该collection指定一个Shard key,决定该条记录属于那个chunk,配置服务器可以存储以下信息:
  1,所有Shard节点的配置信息
  2,每个chunk的Shard key范围
  3,chunk在各Shard的分布情况
  4,集群中所有DB和collection的Shard配置信息
  路由进程(Route Process):一个前端路由,客户端由此接入,首先询问配置服务器需要到那个Shard上查询或保存记录,然后连接相应Shard执行操作,最后将结果返回客户端。客户端只需 将原本发给mongod的查询活更新请求原封不动的发给路由器进程,而不必关心所操作的记录存储在那个Shard上。
  
  构建Sharding
  由上面分析可得出,构建一个Sharding至少需要4个mongodb进程,两个Shard Server(做分片),一个Config Server,一个Route Process,然后安排如下
  进程                端口     文件目录
  Shard Server1    2000    mongodb5
  Shard Server2    2001    mongodb6
  Config Server     30000    mongodb7
  Route Process     40000    mongodb8
  
  现在开始配置:
  1,启动Shard Server
DSC0000.png
  
DSC0001.png
  
  这里启动只多了一个命令:shardsvr,用这个命令就表示这个进程是Shard进程。
  
2,启动Config Server
  启动Config Server用的是configsvr命令
DSC0002.png
  3,启动Route Process
  
DSC0003.png
  这里设置chunk大小为1M,方便测试分片效果
  4,配置Sharding
  所有进程都启动好以后,剩余的就是把他们串成串儿了
  新开个cmd,然后连接到路由器进程中,使用addshard添加到路由器中
  
DSC0004.png
  通过上面两次操作,整个架构已经串成了一串,但是,别着急,架构还不知道分片的数据库和片键呢
DSC0005.png
  指定分片的数据库是Friends,然后指定按照表FriendUserAttach中的_id分片。
  至此整个系统配置完毕。
  验证分片情况,我是用程序插入的数据,因为表是我实际所用的表,在cmd里插入就太麻烦了,这里我用客户端驱动插入10000条数据

  
  用use命令切换到Friends数据库,然后stats查看当前状态
  字段说明:sharded为true,说明此表是经过分片处理的
  shards部分有两个Shard Server分别是:"shard0000" 和 "shard0001"。"shard0000"的字段count为1016,表明此Shard Server上分布的数据量是1016条,size表示此Shard Server上分布的数据库大小,单位为b。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-84232-1-1.html 上篇帖子: MongoDB分片中片键的选择 下篇帖子: mongodb正则查询使用须知
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表