Purpose of Replication
Replication 为数据提供冗余的同时,也提高了数据高可用性。由于在不同数据库服务器上拥有多个数据镜像,Replication可以有效防止单台机器故障导致的数据丢失。
Replication 还可以提高读性能。客户端将读请求与写请求发到不同服务器上。还可以在其他数据中心建立复制节点做异地灾备,进一步提高可用性。
Replication in MongDB
Replica set 是由相同数据集的mongod实例组成。其中一个节点为主节点(primary),所有的写请求都是在该节点上完成。其他节点为从节点(secondary),从节点接收主节点上传来的操作并应用,并以此来保证其与主节点的数据集一致。
主节点接收所有来自客户端的写操作。一个Replica set 只能有一个主节点。由于一个Replica set 只有一个节点能接收写操作,因此主节点读操作提供了严格的一致性校验。主节点将所有数据集的变动记录到oplog 以支持Replication的实现。
从节点将主节点上的oplog复制过来并应用这些操作来修改自己的数据集以确保从节点的数据集与主节点保持一致。一旦主节点不可用,Replica set 将一个从节点选举为主节点。
投票节点将只做投票使用。当主节点降级为从节点时,其他的一个从节点将在选举中被推荐为主节点。
Asynchronous Replication
从节点从主节点应用操作是异步的。从节点返回给客户端的数据可能不是最新的数据。
Automatic Failover
当主节点无法与Replica set 中的其他成员进行沟通超过10s,Replica set将推选另一位节点为主节点。