1、mongos
mongos是用户和集群间的交互点,其职责是隐藏分片内部的复杂性并向用户提供一个简洁的单服务器接口,这个抽象层中也存在一些缝隙,不过大多数情况下mongos允许你把一个集群当做一台服务器。
使用集群时,应该连接一个mongos并向它发送所有的读写操作,无论如何,你都不应该直接访问分片(但如果想的话能做到)。
mongos会将所有用户请求转发到恰当的分片上,如果用户插入一份文档,mongos会查看文档的片键,对照数据块,并把文档发送到持有相应块的分片上。
举个例子,比如说我们要插入{"foo":"bar"}且已经以foo作为片键做了分片,mongos会查看所有可用的块,然后发现一个区间为{"a":"c"}的块应当包含bar,这个块在分片2上,因此mongos会把插入消息发送给分片2。
说明:
如果一个查询涉及了片键,mongos就可以使用和插入一样的流程并找到某个(或某些)正确的分片并向其发送查询,这种查询又称为针对性查询(targeted query),因为它只针对那些可能包含我们所要查找的数据的分片,如果它知道我们在查找{"foo":"bar"},那么查询所含片键值大于bar的分片就没有什么意义了。
如果查询不包含片键,mongos就必须把查询发送给所有分片,这可能会比真对性查询效率低,但并不一定,如果一个泛泛的查询仅访问内存中少量已被索引的文档,而一个针对性查询不得不访问分布在多个分片中的磁盘数据,俩相比较,前者的性能肯定要比后者高得多。
2、配置服务器
mongos进程并不持久地存储任何数据,集群配置被保存在一组专门的mongod上,它们被称作配置服务器(config server),配置服务器包含了有关集群的最完整可靠的信息以供所有人(分片、mongos进程和系统管理员)访问。
要保证数据块迁移成功、所有配置服务器都必须同时在先,如果其中任意一台停机了,则当前正在执行的所有迁移都会回退并停止,直到整套配置服务器在一次运行起来,任何一台配置服务器停机,集群配置都无法改变。
3、集群的构造
一个MongoDB集群基本上由3类进程组成,即实际存储数据的分片、负责把请求路由到正确数据的mongos进程,以及用于跟踪集群状态的配置服务器
一个集群的3个组件
说明:
集群中每个组件可以包含多个进程,如下图所示:
每个组件可以包含多个进程
说明:
以上每个组件都不是一台机器,mongos进程通常跑在应用程序服务器(AppServer)上,配置服务器,鉴于其重要性,是非常轻量级的并且基本上可以在任何机器上运行,每个分片通常由多台机器组成,因为它们实际存储数据。
第五部分 架构篇 第十九章 MongoDB Sharding 架构( mongos)
原文地址:http://blog.csdn.net/xuzheng_java/article/details/43667461