- 复制 >
- 复制介绍
复制介绍¶
复制是在多台服务器之间同步数据的过程。
复制的目的¶
复制在为数据提供了冗余同时,也提高了数据的可用性。由于在不同的数据库服务器上拥有多个数据镜像,复制可以有效的防止由于单台服务器故障而导致的数据丢失。复制还能够帮助我们从硬件故障或是服务中断中恢复数据。我们也可以通过增加复制节点来将其用于灾难恢复、报表或是备份。
在某些情况中,我们可以通过复制的方式来提高读的性能。客户端可以将读与写请求分别发送到不同的服务器上。我们还能够通过在其他数据中心建立分布式复制节点的方式来做异地冗灾,以进一步提高可用性。
MongoDB中的复制¶
复制集是由一组拥有相同数据集的 mongod 实例组成的。其中的一个节点为主节点(Primary),所有的写请求都是在它上面完成的。而其他的节点都是从节点(secondary),从节点接收从主节点上传来的操作并应用,并以此来保证其与主节点的数据集一致。
主节点 接收所有来自客户端的写操作。一个复制集只能有一个主节点。由于在一个复制集中只有一个成员能够接收写操作,复制集为所有来自主节点的读提供了 严格的一致性校验 。主节点通过将所有数据集的变动记录到 oplog 中以支持复制的实现。参见 主节点 获得更多信息。
从节点 将主节点上的oplog复制过来并应用这些操作来修改其自己的数据集以确保从节点的数据集与主节点的数据集一致。一旦主节点不可用了,复制集就会将一个从节点选举成为新的主节点。客户端默认是从主节点进行读操作,但是客户端也可以通过指定 复制集读选项 来将读操作发送给从节点。需要注意的是,在从节点上进行读操作时,所获得的数据可能不是此时主节点上的值。参见 从节点 获得更多信息。
我们也可以为复制集新增一个额外的 mongod 实例作为 投票节点 。投票节点中并不包含数据集,投票节点的作用仅仅是在选举过程中参与投票。当复制集的成员个数为偶数时,添加一个投票节点可以防止平局的出现,通过多数选票来选举出新的主节点。由于投票节点仅提供投票功能,故无需一个专用的物理机。参见 投票节点 获得更多信息。
投票节点 将只做投票使用。当 主节点 降职变为 从节点 的时候,其他的一个 从节点 将在选举中被推选为主节点。
异步复制¶
从节点从主节点上应用操作的过程是异步的。由于从节点是在主节点之后应用操作的,所以复制集在缺少某些成员的时候仍能继续运行。然而在这种情况下,从节点返回给客户端的数据可能并不是最新的数据。
其他特征¶
复制集提供了一些选项来支持实际应用时的需求。例如,将一个复制集分布在多个数据中心 ,又或是通过设置 priority 来控制选举的结果。复制集同时也支持将成员用于报表、灾难恢复或是备份。
参见 优先级为0的复制集成员, 隐藏节点 和 延时节点 获得更多信息。