导读:html
在以前的文章中(超连接),咱们说了MongoDB如今已经再也不推荐使用主从复制模式,而是推荐副本集,那么副本集究竟有什么优势呢?咱们不妨来探索一下。数据库
(一)副本集(replica set)概述服务器
对于副本集,官方文档是这样定义的:副本集是一组mongod维护相同数据的实例,一个副本集包含多个数据承载节点和一个仲裁节点(可选),在数据承载节点中,只有一个成员节点被视为主节点,主节点可以进行读写操做,其它节点则被视为次要节点,次要节点只能进行读操做。架构
(二)副本集的架构异步
(1)PSS架构spa
“一主两从”架构,若是主节点不可用,则符合条件的次要节点将进行选举以自行选举新的主要节点。3d
跨2个或多个数据中心分布的副本集:日志
在两个数据中心之间分布副本集成员可提供优于单个数据中心的好处。在两个数据中心分布中,code
--若是其中一个数据中心发生故障,则与单个数据中心分发不一样,该数据仍可读取。htm
--若是具备少数成员的数据中心发生故障,则副本集仍然能够同时执行写操做和读操做。
--可是,若是拥有大多数成员的数据中心发生故障,则副本集将变为只读。
若是可能,请在至少三个数据中心中分配成员。对于配置服务器副本集(CSRS),最佳实践是分布在三个(或更多,取决于成员的数量)中心中。若是第三个数据中心的成本太高,则一种分配可能性是,在公司政策容许的状况下,在两个数据中心之间平均分配数据承载成员,并将剩余成员存储在云中。
(2)PSA架构
在某些状况下(例如只有一个主服务器和一个辅助服务器,但因为成本限制,禁止添加另一个服务器),你能够选择一个mongod实例做为仲裁器添加到副本集,仲裁节点参加选举,可是不保存数据。
(三)自动故障转移
当主节点与其它成员的通讯时间超过参数electionTimeoutMillis(默认10000,即10s)的限定时,会发生自动故障转移,原来的某个从节点会转换角色为主节点。
(四)读取首选项(读写分离)
默认状况下,客户端从主节点读取数据,可是,客户端也能够指定首选项,将读取请求发送到从节点。
(五)MongoDB副本集成员
MongoDB副本集主要有三种成员:
(1)主节点
主节点是副本集中接收写操做的惟一成员,MongoDB在主数据库上执行写操做,而后再主数据库的oplog上记录操做,从节点复制该日志,将操做应用于从数据库。
在如下3节点副本集中,主数据库不可用,将会触发一次选举,将从节点之一选举为新的主节点。
(2)从节点(副本节点)
副本节点为只读节点,对于副本节点,能够将其配置为:
(3)仲裁节点
在某些状况下(例如您有一个主服务器和一个辅助服务器,但因为成本限制,禁止添加另外一个辅助服务器),您能够选择将仲裁器添加到副本集。一个仲裁器不具备数据集的副本,并不能成为主节点。可是,仲裁节点参加选举。仲裁人具备确切的1个投票。
(六)操做日志oplog
MongoDB在主数据库上执行写操做,并在操做日志中记录该操做,而后从数据库将日志异步同步过去并应用,每一个副本集节点都包含一个oplog,保存在local.oplog.rs中。
由于每一个副本集成员都存在oplog日志,为了促进复制,全部副本集成员都会发送心跳(pings)给全部的其它成员,任何从节点均可以从其它节点导入操做日志条目。
(1)oplog大小设置
首次启动副本集成员时,若是未指定操做日志大小,则MongoDB将建立默认大小的操做日志
默认操做日志大小取决于存储引擎:
储存引擎 默认操做日志大小 下界 上界 ----------------- ----------------- ------ ------- 内存中存储引擎 物理内存的5% 50兆字节 50 GB WiredTiger存储引擎 可用磁盘空间的5% 990兆字节 50 GB
在mongod建立操做日志以前,可使用oplogSizeMB参数指定其大小,首次启动副本集成员以后,使用replSetResizeOplog命令更改操做日志大小。
(2)查看oplog状态
要查看操做日志状态,包括操做的大小和时间范围,可使用re.printReplicationInfo()方法。
【完】