Module 02 · Introducing MongoDB: An Open-Source NoSQL Database
Replication and ShardingMongoDB 的复制与分片
欢迎观看关于 MongoDB 复制与分片 的介绍视频。通过本视频,您将能够:
- 定义 复制,
- 解释 复制 的好处,
- 描述 分片 的概念和好处,
- 解释 分片 如何帮助扩展数据库。
复制(Replication)
在 MongoDB 中,复制 是指数据的多重复制到多个节点,目的是提高数据的可用性和冗余。
副本集(Replica Set)
一个典型的 MongoDB 集群包含三个数据节点(数据承载节点)。所有这三个节点存储相同的数据,因此称之为 副本集。数据首先写入主节点,然后复制到副本节点。
- 主节点:接受所有写操作(插入、更新、删除)。
- 副本节点:观察主节点的操作日志(Oplog)并复制数据。
复制的好处
- 冗余:复制为数据提供冗余,因此,如果某个服务器硬件出现故障,仍然可以通过其他节点访问数据。
- 高可用性:即使某个节点发生故障,系统依然可以继续运行。
- 容错性:复制确保数据在多台机器上保持一致,从而防止单点故障。
Oplog 过程
MongoDB 使用 Oplog(操作日志)来记录所有对主节点的操作。每个副本节点都会查看 Oplog,复制并应用新更改。以下是复制过程的简化:

- 应用程序将更改写入 主节点。
- 主节点记录这些更改并将其写入 Oplog。
- 副本节点观察 Oplog,复制并应用更改。
例如,当您删除三个学生时,MongoDB 会将这次操作记录在 Oplog 中,并将其复制到所有副本节点。
灾难恢复
一个常见误解是认为复制能够防止灾难,如意外删除数据库。实际上,复制只是在不同节点间保持数据的一致性,因此,如果您删除数据,复制也会同步删除。对于灾难恢复,您应该依赖 备份 和 恢复过程。
分片(Sharding)
当您需要扩展 MongoDB 数据库时,可以通过 分片 来实现水平扩展。分片是将数据划分到多个节点的过程,以便增加数据库的处理能力和存储容量。
分片的好处
- 提高吞吐量:通过将数据分割并将查询定向到相关的分片,您可以提高查询效率。
- 存储更多数据:可以将更多数据存储到多个节点中,解决单个节点无法容纳全部数据的问题。
- 地理位置分布:可以根据区域将数据存储在不同的分片中。例如,美国客户 的数据存储在美国的分片中,欧洲客户 的数据存储在欧洲的分片中。
分片的工作原理
- 分片键:在分片过程中,数据会根据特定的字段(如 userId 或 courseId)进行分片。选择一个合适的分片键可以优化数据分布和查询效率。
- 水平扩展:通过增加更多分片节点来提高数据库的容量和性能。
选举机制(Election)
在副本集模式下,只有一个主节点可以接受写操作。当主节点不可用时,MongoDB 会自动选举一个副本节点成为新的主节点,确保系统的高可用性。
选举过程
- 如果当前主节点不可用,或者管理员手动发起故障转移,副本集中的副本节点会自动进行选举。
- 选举通过投票系统进行,具有最新数据和最小复制延迟的副本节点将获得最多的选票,并成为新的主节点。
这一机制保证了系统的稳定性和一致性,防止出现“脑裂”现象。
总结
通过本视频,您学习了:
- 复制 是数据的多重冗余,它提供了数据的 高可用性 和 容错性。
- 复制无法防止数据丢失或删除,您仍然需要 备份 来进行灾难恢复。
- 分片 是通过将数据分割到多个节点来实现 水平扩展,它帮助增加数据库的存储和处理能力。
- MongoDB 的选举机制保证了在主节点失效时可以自动选举新的主节点,确保数据库的持续可用性。