复制的目的
保证数据在生产部署时的冗余和可靠性,通过在不同的机器上保存副本,保证数据的不会因为单点故障而丢失。能够随时应对数据丢失、机器损坏带来的风险。
除此以外,还能提高数据的读取能力,用户的读取和写入在不同的服务器,而且,由不同的服务器为不同的用户提供服务,提高整个系统的负载能力。
- Failover(故障转移,故障恢复)
- Redundancy(数据冗余)
- 避免单点故障,提升数据可用性
- 读写分离,分担读压力
- 对用户透明的系统维护升级
复制的基础
- Primary主节点,一个副本集中只能有一个主节点,它可以进行读、写的操作,负责接收客户端的所有写的请求,执行写操作后同时记录在oplog。当主节点出现故障时,会在从节点中选出一个作为主节点,即使后续主节点恢复正常,再次加入到集群中也是作为从节点的角色。
- Secondary从节点,从节点只能进行读取操作,并不断地从主节点同步写入的数据。默认情况下,应用程序会将其读取操作定向到主节点。从节点在异步过程中将主节点记录到oplog中的操作应用到它自己的数据集,从而维护主节点数据集副本。一个副本集可以有一个或多个从节点。
- Arbiter仲裁节点,仲裁节点不存储数据,只记录集群节点数及主节点选举时进行仲裁。它具有选举权,但自己不能成为主节点。当主节点故障时,仲裁器允许该副本集拥有奇数票以便于选出新的主节点。仲裁者和其他节点成员之间的唯一通信是选举期间的投票、心跳信息。
- oplog实现数据同步:MongoDB的副本集中,主节点通过一个日志文件来记录修改数据库的操作,这个日志就叫做 oplog,即operation log 。
- 数据同步方式:副本集中为了维护共享数据集的副本,从节点需从其他节点同步或复制数据。
oplog特点:
1、位于local数据库下,全名local.oplog.rs 。
2、oplog是 Capped Collection 类型(定长集合)。
3、oplog中的每个文档都代表主节点上执行的一个修改数据库状态的操作。
在MongoDB中有两种数据同步方式:
- 初始同步,将完整的数据集从一个节点复制到另一个新的节点。这个需要在启动MongoDB的时候指定同步的源节点。
- 将主节点持续更改的操作应用于从节点的整个数据集 。