目录
一、MongoDB集群架构介绍
MongoDB 有三种集群架构模式,分别为主从复制(Master-Slaver)、副本集(Replica Set)和分片(Sharding)模式。
1.1 主从复制
这种表述方式描述的是早期 MongoDB 中的一种复制模式,即一个主节点(Master)负责处理写入操作,多个从节点(Slave)被动复制主节点的数据。主从复制模式在现代 MongoDB 中已经不再推荐使用,因为它缺乏自动故障转移、数据一致性保障和灵活的读负载均衡能力。
自 MongoDB 3.6 版本起,官方已弃用主从复制模式,并推荐使用副本集(Replica Set)替代。因此,严格来说,现代 MongoDB 不再将主从复制作为一种推荐或官方支持的集群架构模式。
1.2 副本集
副本集是现代 MongoDB 中用于实现数据冗余、高可用性和读负载均衡的主要方式。它包含一个主节点(Primary)和一个或多个从节点(Secondary)。与主从复制相比,副本集提供了自动故障转移、数据一致性保证以及对从节点读取能力的精细控制。
副本集是目前 MongoDB 中主流且推荐的集群架构模式之一,用于实现数据的高可用性和读写分离。
1.3 分片集群
分片是 MongoDB 用于水平扩展、处理大规模数据集和高并发读写的架构模式。通过将数据划分为多个分片(shards),每个分片可以是一个副本集,数据根据分片键(shard key)分布在不同的分片上。此外,还包括配置服务器集群(Config Server)和路由进程(Mongos)。
分片是现代 MongoDB 中另一种重要的集群架构模式,用于处理超出单个服务器或副本集处理能力的大规模数据集。
二、副本集
MongoDB 副本集架构如下图,副本集简单来说就是有故障恢复功能的主从集群。成员身份包括主节点、从节点、仲裁者。任何时间,集群中只有一个活跃节点,其他的都为备份节点,活跃节点实际上是活跃服务器。有几种不同的类型节点可以存在于副本集中
- 主节点:主节点是副本集中唯一接受写操作的节点,负责处理客户端的所有写请求,如插入、更新、删除等。主节点通过心跳机制与从节点保持通信,报告自身的状态并接收从节点的状态信息。
- 从节点:从节点通过复制主节点的 oplog 来保持与主节点数据的同步。它们可以处理只读查询,分担主节点的读负载。从节点在保持数据同步的同时,参与副本集的选举过程,当主节点不可用时,有能力成为新的主节点。
- 仲裁节点:从节点在保持数据同步的同时,参与副本集的选举过程,当主节点不可用时,有能力成为新的主节点。仲裁节点的存在可以减少需要维护数据副本的服务器数量,尤其适用于资源有限的环境,或者需要额外投票节点以满足法定人数(quorum)要求的场景。
MongoDB 提供了读扩展机制,默认情况下,客户端从 Primary 读取数据,但是可以通过配置将读取操作发送到 Secondary。当负载是读取密集型时这是不错的选择。如果是写入密集型,就需要用分片来实现扩展。
3.1 主节点选举