MongoDB部署模式
目录
单节点模式(Standalone)
副本集模式(Replica Set)
分片集群模式(Sharded Cluster)
MongoDB有多种部署模式,可以根据业务需求选择适合的架构和部署方式。
单节点模式(Standalone)
单节点部署是单个MongoDB示例,也是最简单的部署方式,数据都存储在一个节点上,这种方式现在很少使用。
- 特点:
- 适用于开发、测试或小型应用场景。
- 无数据冗余,不具备高可用性。
- 单节点故障会导致服务中断。
- 优点:
- 易于设置和维护,资源消耗低。
- 适用场景:
- 开发测试环境。
- 对高可用性要求不高的应用。
副本集模式(Replica Set)
MongoDB 中的副本集是一组维护相同数据集的 mongod 进程。副本集提供冗余和高可用性,是所有生产部署的基础,副本集包含多个数据承载节点和一个可选的仲裁节点。在数据承载节点中,只有一个主节点,其他被为从节点。
主节点:主节点会接受所有的写入操作,副本集中只会有一个主节点
从节点:从节点存储也是一个完整的数据集,会复制主节点的oplog(oplog是主节点上的操作日志),并将这些操作应用于其数据集,以便从节点的数据集反映主节点的数据集状态。如果主节点不可用,则某个符合条件的从节点将进行选举,以将自己选举为新的主节点。
- 特点:
- 一组MongoDB实例组成,提供数据冗余和高可用性。
- 自动故障切换:主节点宕机后,剩余节点选举出新的主节点。
- 数据一致性高(强一致性)。
- 优点:
- 提供高可用性,保障数据安全。
- 适用于生产环境。
- 缺点:
- 需要额外的硬件资源。
- 配置和维护比单节点稍复杂。
- 适用场景:
- 需要高可用性和自动故障恢复的生产环境。
分片集群模式(Sharded Cluster)
副本集模式就是一个主从架构,虽然可以提升了高可用性,但是每个节点都需要存储全部数据,这种冗余的方式增加了资源的消耗。而分片集群可以提供更好的可用性。
分片:分片是一种跨多台机器分布数据的方法,mongo将数据分化为多个分片,每个分片保存的是数据的一部分,所有分片的数据叠加起来就是完整的数据。
分片集群:数据虽然被分配到多个分片节点上,但是每个分片也需要做冗余这样才能提高可用性,所有每个分片也会有多个副本集,就是一个副本集模式,有主分片和从分片数据。
MongoDB的分片集群由一下几个组件构成:
分片(shard):分片是存储数据的位置,每个分片都包含分片数据的一个子集,每个分片都必须作为一个副本集进行部署。
路由服务器(mongos):mongos
充当查询路由器,在客户端应用程序和分片集群之间提供接口,客户端访问分片集群是直接和mongos服务器连接而不会直接和具体的分片连接,mongos会将请求分配到具体的分片上进行操作,同时多个分片的结果也会聚合到mongos上进行处理。
配置服务器(config sderver):配置服务器会存储集群的元数据和配置设置,配置服务器最主要的作用就是记录集群分片的情况,mongos进行路由的时候需要知道路由到哪个分片,而这就要依据config server的分片配置数据,配置服务器也是副本集模式部署。
- 特点:
- 提供水平扩展能力,适合大规模数据和高并发应用。
- 数据根据分片键分布在不同的分片中。
- MongoDB 在分片集群中的分片之间分配读写工作负载,支持每个分片处理集群操作的子集。通过添加更多的分片,读写工作负载都可以在集群中横向扩展。
- 优点:
- 支持大数据集和高吞吐量。
- 可按需扩展存储和计算能力。
- 缺点:
- 部署和维护复杂,要求分片键设计合理。
- Config Server成为潜在的性能瓶颈。
- 适用场景:
- 大型分布式系统。
- 数据量超出单节点存储能力的场景。