使用自我管理的 PSA 副本集缓解性能问题
Overview
在具有主节点-从节点-仲裁节点 (PSA) 架构的三节点副本集或具有三节点 PSA 分片的分片集群中,关闭或延迟的数据承载节点可能会导致性能问题。
如果一个承载数据的节点出现故障,则另一个节点将成主节点 (primary node in the replica set)节点。 在此状态下,具有 w:1
的写入继续成功,但具有写关注(write concern)"majority"
的写入无法成功,并且提交点开始滞后。 如果您的 PSA副本集包含从节点(secondary node from replica set)的从节点,并且您的副本集需要两个节点才能多数提交更改,则您的提交点也会滞后。
对于延迟的提交点,两个因素可能会影响集群性能:
存储引擎会将提交点之后发生的所有更改保留在磁盘上,以保留持久性历史记录。随着时间的推移,这些写入操作产生的额外 I/O 会增加。这会极大地影响写入性能并增加缓存压力。
MongoDB 允许 oplog 超过其配置的大小限制,以避免删除
majority commit point
。
要减轻缓存压力并增加写入流量,可以为不可用或延迟的节点设置 votes: 0
和 priority: 0
。对于以“多数”发出的写操作,仅考虑投票节点来确定执行多数提交所需的节点数量。将节点配置设置为 votes: 0
可以减少使用写关注 "majority"
提交写操作所需的节点数(从 2 减为 1),并且允许这些写操作成功。
从节点赶上后,您可以使用rs.reconfigForPSASet()
方法将votes
设置回1
。
注意
在 MongoDB 的早期版本中,enableMajorityReadConcern
和 --enableMajorityReadConcern
是可配置的,允许您禁用具有类似效果的默认读关注 "majority"
。
步骤
要在主节点-从节点-仲裁节点 (PSA) 三节点架构的部署中减少缓存压力和增加的写入流量,可以为不可用或延迟的从节点设置 { votes: 0, priority: 0 }
:
cfg = rs.conf(); cfg["members"][<array_index>]["votes"] = 0; cfg["members"][<array_index>]["priority"] = 0; rs.reconfig(cfg);
如果您想稍后更改从节点的配置,请使用 rs.reconfigForPSASet()
方法。