MongoDB
复制集Replication
MongoDB中的副本集是一组维护相同数据集的mongod进程。 副本集提供冗余和高可用性,是所有生产部署的基础。 MongoDB复制是将数据同步在多个服务器的过程。复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性, 并可以保证数据的安全性。复制还允许您从硬件故障和服务中断中恢复数据。
副本集包含多个数据承载
节点和可选的一个仲裁
节点。 在承载数据的节点中,一个且仅一个成员被视为主
节点,而其他节点被视为次要
节点。
主节点接收所有写操作。 一个副本集只能有一个主要节点,其具有{ w: "majority" }
的write concern
; 虽然在某些情况下,另一个mongod实例可能会暂时认为自己也是主要的。主节点记录在其上的所有操作,即oplog。
复制结构图:
复制集主节点
在复制集中,主节点是唯一能够接收写请求的节点。MongoDB在 主节点 上进行写操作,并会将这些操作记录到主节点的 oplog 中。 从节点 会将oplog复制到其本机并将这些操作应用到其自己的数据集上。
客户端从主节点读取数据,在客户端写入数据到主节点时, 主节点与从节点进行数据交互保障数据的一致性。复制集中任何成员都可以接收读请求。但是默认情况下,应用程序会直接连接到在主节点上进行读操作。
次要节点复制主节点的oplog并将操作应用于其数据集,以使次要节点的数据集反映主节点的数据集。如果主要节点不可用,则符合条件的次要节点会选出新的主节点。如果主节点未与该节点的其他成员通信超过配置的electionTimeoutMillis期间(默认为10秒),则符合条件的次要节点要求选举将自己指定为新主节点。 群集尝试完成新主节点的选举并恢复正常操作。
复制集从节点
节点优先级为0的成员
一旦将优先级设置为0,那么该从节点将不能
升级为主节点 。 优先级为0 的成员不会触发选举
。除此之外该节点与其他从节点没有区别,优先级为0 的从节点拥有与主节点一致的数据集,能接受读请求,同时也能参与投票。通过将从节点的 优先级设置为0 来防止其升职为主节点可以在分布式数据中心
的结构中起到很好的作用。