MongoDB的复制集中主要包括三个成员,即:主库、从库和仲裁者。一般情况下,MongoDB复制集集群中是一个主库和两个从库。数据库管理员也可以在复制集中添加一个MongoDB的实例,作为复制集的仲裁者。但仲裁者不是必须的。视频讲解如下:
- 主库
在一个MongoDB复制集中,只能存在一个主库用于接收所有写操作请求。MongoDB应用写操作到数据文件中并记录操作的Oplog日志。从库复制主库上的Oplog日志并应用操作到从库中。MongoDB复制集中所有成员都能接收读操作请求。当主库出现了不可用的情况,MongoDB复制集会触发了选举,会从剩下的从库中选择一个新主库。
- 从库
MongoDB复制集中的从库采用了异步方式从主库上同步Oplog日志信息,并应用日志中操作到从库的数据集中。MongoDB复制集环境中可以存在多个从库。尽管客户端不能往从库上写入数据,但是可以从从库上读取数据。在往MongoDB复制集中添加从库时,可以为从库设置不同的优先级别。当主库出现问题的时候,优先级别越高的从库将会被优先选举会主库。
提示:优先级为0的从库不能被选举为主库。
在某些情景下,在选举过程中可能有某个瞬间存在多个主库的情况,例如当网络出现问题时。当这种情况出现时,MongoDB复制集会将其中一个主库降级为从库,而对于客户端应用程序来说会察觉到主库降级所造成的数据过期以进行回滚操作。当前从库出现问题的时候,MongoDB复制集还可以对客户端应用程序隐藏从库,从而使得客户端无法访问该从库。
- 仲裁者
MongoDB复制集中的仲裁者不存储任何数据集合,并且不能被选举成为主库。仲裁者不是必须的,它的存在可以保证MongoDB复制集中成员的个数为奇数,因为它总有一个投票权。作为仲裁者的节点对服务器硬件要求不高,仲裁者还可以用于接收复制集中其他成员发送的心跳检测信息。