(1)主库
- Primary节点是副本集中唯一成员接受写入操作,而副本集中所有的成员都可以接受读取操作,但是在默认的情况下,应用程序将其读取操作指向Primary节点;
- 副本集中有且只有一个Primary节点,该节点宕机后集群会触发选举以选出新的Primary节点;
- MongoDB在Primary节点上应用写操作,然后在Primary节点上使用oplog来记录操作,而Secondary节点复制oplog日志,并将操作在自己的节点上进行重放。
(2)从库
- Priority 0从库
- 该类节点不能成为Primary成员,不能主动触发选举;
- 持有数据,接受读取操作,能够进行选举投票;
- 应用场景:一是可以作为备用数据库,可以替换成某个不可用的成员;二是配置隐藏节点;
- 可以确保只有特定成员能够成为主数据库;
- 一些硬件差或负载较高的集群,将其配置为Priority为0,避免该机器成为主节点后造成集群瓶颈。
- hidden从库
- 隐藏节点也拥有数据副本,也会参与选举投票,但对客户端应用程序不可见,可以用来作为备份和报告;
- 该类节点的负载情况比较低,其始终是Prority 0的成员;
- 该类节点除了基本复制,不会接受到任何的流量;
- 停止该类节点时一定要确保当前集群中投票节点的成员数具备大多数成员的条件,否则的话主库也就被降级为从库,整个集群变为只读状态;
- 从MongoDB 3.2版本起,db.fsyncLock()可以确保使用MMAPv1或WiredTiger存储引擎的MongoDB实例的数据文件不会更改,从而为创建备份提供一致性保障。
- 延迟从库
- 该类节点会配置成隐藏节点,这样就避免了应用从延迟节点读取到过期的数据;
- 该类节点也拥有数据副本,延迟成员的数据集反映了该集合的延迟状态;
- 该类节点可以从错误操作中恢复数据;
- 若votes为1,那么该类节点也具备投票选举权限;
- 该类节点的延迟时间量要低于oplog Window,以避免超过oplog Window时主库已经删除了老的oplog日志;
- 延迟时间要打出预计维护集群所需的时间量,避免配置过短导致故障出现时延迟节点已经应用了错误的日志而无法回滚。