MongoDB集群架构分析

时间:2021-07-12 08:10:32

集群组件——单机实例(mongod instance)

只有一个单机实例,客户端与其直接连接使用。
MongoDB集群架构分析

集群组件——副本集(Replica sets)

副本集通常由至少3个节点组成。其中一个是主节点,负责处理客户端请求,其余的都是从节点,负责复制主节点上的数据。
mongodb各个节点常见的搭配方式为:一主多从(正常情况下至少3个节点组成副本集)。
主节点记录在其上的所有操作,从节点定期轮询主节点获取这些操作,然后对自己的数据副本执行这些操作,从而保证从节点的数据与主节点一致。
选举机制:当一个节点挂掉之后需要满足“大多数”成员投票,如果不满足大多数的话,会造成多个节点成为主节点。通常节点之间通信断掉之后,会认为其他节点不可用,如果5个节点的副本集,其中3个与另外两个不在同一个机房,当两个机房通信断开时,两个节点的机房认为其他3个节点多挂了,就会开始选举。这个时候其他3个节点其实是可用的只是与另外两个节点断开而已,这个时候就会出现2个主节点。
MongoDB集群架构分析

集群组件——分片(Sharding)

分片是将一个集合的数据分别存储在不同的shard节点上减轻单机压力
Shard Keys 的选择很重要,MongoDB主要根据Shard Keys来划分数据,Shard Keys可以由文档的一个或者多个物理键值组成,对于分片Key的选定直接决定了集群中数据分布是否均衡、集群性能是否合理。
MongoDB集群架构分析

集群组件——路由服务器(mongos)

路由服务器负责把对应的数据请求请求转发到对应的shard服务器上
mongos,数据库集群请求的入口,所有的请求都通过mongos进行协调,不需要在应用程序添加一个路由选择器,mongos自己就是一个请求分发中心,它负责把对应的数据请求请求转发到对应的shard服务器上。在生产环境通常有多mongos作为请求的入口,防止其中一个挂掉所有的mongodb请求都没有办法操作。
MongoDB集群架构分析

集群组件——配置服务器(mongos)

存储所有数据库元信息(路由、分片)的配置。mongos本身没有物理存储分片服务器和数据路由信息,只是缓存在内存里,配置服务器则实际存储这些数据。
配置服务器相当与集群大脑,存储所有数据库元信息(路由、分片)的配置。mongos本身没有物理存储分片服务器和数据路由信息,只是缓存在内存里,配置服务器则实际存储这些数据。mongos第一次启动或者关掉重启就会从 config server 加载配置信息,以后如果配置服务器信息变化会通知到所有的 mongos 更新自己的状态,这样 mongos 就能继续准确路由。在生产环境通常有多个 config server 配置服务器,因为它存储了分片路由的元数据,这个可不能丢失!就算挂掉其中一台,只要还有存货, mongodb集群就不会挂掉。
MongoDB集群架构分析

集群组件——集群架构

一个典型的集群结构如下:
MongoDB集群架构分析
集群的组成: 单机mongod 组成副本集 -> 分片, 客户端通过mongos 读取 config servers的信息与分片通信,客户端程序感觉不到集群的存在,他只需要知道mongos服务器的ip和连接方式,至于它有多少个集群ip 都不需要关注,mongos 会自动选择。

Shards

每一个shard包括一个或多个服务和存储数据的mongod进程(mongod是MongoDB数据的核心进程),典型的每个shard开启多个服务来提高服务的可用性。这些服务/mongod进程在shard中组成一个复制集。