图解 MongoDB 集群部署原理(3)
MongoDB 的集群部署方案中有三类角色:实际数据存储结点、配置文件存储结点和路由接入结点。连接的客户端直接与路由结点相连,从配置结点上查询数据,根据查询结果到实际的存储结点上查询和存储数据。MongoDB 的部署方案有单机部署、复本集(主备)部署、分片部署、复本集与分片混合部署。混合的部署方式如图:
![](https://static001.geekbang.org/infoq/d0/d0e278d7e7aabbc64729e9b6e399cd2f.png)
混合部署方式下向 MongoDB 写数据的流程如图:
![](https://static001.geekbang.org/infoq/4f/4ff980f6a4a9bbebc6efc385fe51a442.png)
混合部署方式下读 MongoDB 里的数据流程如图:
![](https://static001.geekbang.org/infoq/68/6886efe366ba0ae5335f51bdcdb79e06.png)
对于副本集,又有主和从两种角色,写数据和读数据也是不同,写数据的过程是只写到主结点中,由主结点以异步的方式同步到从结点中:
![](https://static001.geekbang.org/infoq/db/dbbb3d025b199d3fd8c7d8665eb4cb18.png)
而读数据则只要从任一结点中读取,具体到哪个结点读取是可以指定的:
![](https://static001.geekbang.org/infoq/a3/a36ac1ee9c5f2c834e38b5a0152bd57a.png)
对于 MongoDB 的分片,假设我们以某一索引键(ID)为片键,ID 的区间[0,50],划分成 5 个 chunk,分别存储到 3 个片服务器中,如图所示:
![](https://static001.geekbang.org/infoq/d0/d0260fe6e0842a410661dacee4ea700b.png)
假如数据量很大,需要增加片服务器时可以只要移动 chunk 来均分数据即可。配置结点:存储配置文件的服务器其实存储的是片键与 chunk 以及 chunk 与 server 的映射关系,用上面的数据表示的配置结点存储的数据模型如下表:
Map1
![](https://static001.geekbang.org/infoq/60/6010f85aaf765a05e16e5dbc5f7962f6.png)
Map2
![](https://static001.geekbang.org/infoq/d1/d1c1df11294e7b45990d0feea5ca7ec6.png)
路由结点:路由角色的结点在分片的情况下起到负载均衡的作用。
关注微信公众号『 Tom 弹架构 』回复“MongoDB”可获取配套资料。
本文为“Tom 弹架构”原创,转载请注明出处。技术在于分享,我分享我快乐!如果您有任何建议也可留言评论或私信,您的支持是我坚持创作的动力。关注微信公众号『 Tom 弹架构 』可获取更多技术干货!
原创不易,坚持很酷,都看到这里了,小伙伴记得点赞、收藏、在看,一键三连加关注!如果你觉得内容太干,可以分享转发给朋友滋润滋润!
版权声明: 本文为 InfoQ 作者【Tom弹架构】的原创文章。
原文链接:【http://xie.infoq.cn/article/5a51b717b452fc708a5294654】。文章转载请联系作者。
评论