mongodb中有shard和replica set这2个概念,对应的集群也有shard cluster和replica set cluster。那么它们的区别是什么?
replica set
了解replica set可以查阅官方的Replication以及Deploy a Replica Set。官方的定义为:
A replica set in MongoDB is a group of mongod processes that maintain the same data set. Replica sets provide redundancy and high availability, and are the basis for all production deployments
简而言之,就是持有相同数据集合的一组mongod服务进程组成一个replica set。官方对replica set中节点的解释为
A replica set contains several data bearing nodes and optionally one arbiter node. Of the data bearing nodes, one and only one member is deemed the primary node, while the other nodes are deemed secondary nodes.
可以看到首先分为2大类:data bearing nodes和arbiter node。data bearing nodes中持有数据,又可细分为primary和secondary,除了primary的节点都是secondary,并且只能有一个primary节点,当primary节点出故障以后,会从secondary中选举出来一个成为新的primary节点,所有的读写操作都发生在primary节点,secondary节点只会根据oplog从primary节点同步数据。其中arbiter node可以没有,如果有也只有一个,它不持有任何数据,仅仅是在选举primary节点时参与投票。
shard
可以看到,replica set仅仅只能保证数据的稳定性和高可用性,无法解决系统的扩展性和规模性。shard可以水平扩展集群,增加系统的规模。官方文档为Sharding。官方给出的架构图为
shard.jpg
使用shard,可以根据一定的规则将数据均匀分散到不同的shard中。一个shard可以是单个的mongod服务,也可以是一个replica set.
shard集群包含的组件有3个部分:
- shard:mongod或者多个mongod组成的replica set
- mongos:充当shard集群和应用之间的路由服务,应用直接访问的是mongos.
- config server:保存集群相关的配置,必须以replicat set的形式存在
官方对mongos的说明还有
You can connect to a mongos the same way you connect to a mongod such as via the mongo shell or a MongoDB driver
也就是说无论是使用mongo shell还是mongodb driver(比如java中的mongodb jar包驱动),连接mongos和连接mongod是完全一样的。
结论
shard cluster集群中可以包含replica set,它的一个shard可以是replica set,另外它的config server 也是replica set.









网友评论