MongoDB复制集概述
MongoDB复制集主要用于实现服务的高可用性,与Redis中的哨兵模式相似。它的核心作用是数据的备份和故障转移。
复制集的主要功能
- 数据复制:数据写入主节点(Primary)时,自动复制到一个或多个副本节点(Secondary)。
- 故障恢复:主节点失效时,自动从副本节点中选举出新的主节点。
复制集的附加作用
- 数据分发:将数据从一个区域复制到另一个区域,降低读取延迟。
- 读写分离:将不同类型的负载分布在不同节点上。
- 异地容灾:在数据中心发生故障时快速切换到异地节点。
典型复制集结构
- 一般由三个或更多节点组成,每个节点都具有投票权。
- 结构包括一个主节点和两个或更多的副本节点。
数据复制机制
- 当主节点接收到修改操作(如插入、更新或删除)时,这些更改会被记录在操作日志(oplog)中。
- 副本节点不断从主节点的oplog中获取更新,并在本地回放这些操作,以保持与主节点数据的一致性。
故障恢复与选举
- 节点间定期发送心跳检测,5次未收到心跳判定节点失联。
- 主节点失联导致副本节点发起选举,选出新的主节点。
- 选举基于RAFT算法,要求大多数投票节点存活。
- 复制集最多包含50个节点,但只有最多7个节点具有投票权。
影响选举的因素
- 集群中大多数节点必须存活。
- 被选为主节点的节点需满足:
- 能与大多数节点建立连接。
- 拥有较新的oplog。
- 有较高的优先级(如果配置了的话)。
复制集节点选配项
- 投票权(v参数):决定是否参与选举。
- 优先级(priority参数):决定成为主节点的优先级。
- 隐藏节点(hidden参数):复制数据但对应用不可见,优先级为0。
- 延迟复制(slaveDelay参数):复制旧数据,保持时间差。
- 从节点索引:控制从节点是否建立索引。
复制集注意事项
- 硬件:所有节点硬件配置应一致,确保独立性以防同时故障。
- 软件:所有节点应运行相同版本的软件以避免兼容性问题。
- 性能:增加节点并不会提高写入性能。
复制集搭建步骤
- 创建数据目录:例如,在Linux系统上,使用
mkdir -p /data/db{1,2,3}
。 - 准备配置文件:每个数据库应有不同的端口、数据目录和日志文件路径。
分别启动
mongod -f /data/db1/mongod.conf
mongod -f /data/db2/mongod.conf
mongod -f /data/db3/mongod.conf