DDS节点脱节原理和说明
副本集架构由主节点、备节点和隐藏节点组成,DDS自动搭建三节点的副本集供用户使用,节点之间数据自动同步,保证数据的高可靠性。对于需要保证高可用的中小型业务系统,推荐使用副本集。
- 主节点:即Primary节点,用于读写请求。
- 备节点:即Secondary节点,用于读请求。
- 隐藏节点:即Hidden节点,用于业务数据的备份。
用户可以直接操作主节点和备节点。若主节点故障,系统自动分配新的主节点。副本集架构如下图所示。
DDS只能在主节点写入数据,主节点写入数据时,会同时生成oplog,Secondary和Hidden通过从主节点读取oplog进行回放,达到数据的最终一致。
oplog的存储量由oplogSize(默认磁盘容量的10%)决定。
- 主备时延是如何产生的?
- 何时会脱节?
因为oplog存储容量有限,如果到达容量上限,就会淘汰掉最早的oplog。备节点读取oplog,每次都会记录最后一条读取的oplog,如果主备时延达到一定程度,备节点发现上次回放的oplog点位已经被淘汰掉,此时备节点就无法继续读取oplog,说明备节点已经脱节。
- 如何有效防止备节点脱节?
- 业务需要设置majority级别的writeConcern写入数据,表示将数据写入到大多数节点。
- 适当增加oplog的存储空间上限,如需修改,可以通过控制台界面修改参数值oplogSizePercent,具体步骤请参见修改DDS实例参数。
- 将创建索引等耗时较长的DDL操作,以及数据备份操作放在业务低峰期执行,同时尽可能避免突发大量增删改操作。
如果没有以majority级别的writeConcern写入数据,发生主备倒换时,未同步到备节点的数据有丢失风险。