使用自管理PSA副本集缓解性能问题
概述
在具有主-次要仲裁器(PSA)架构的三成员副本集或具有三成员PSA分片的三成员分片集群中,下线或延迟的数据节点可能导致性能问题。
如果一个数据节点下线,另一个节点将成为主节点。带有w:1
的写入在此状态下继续成功,但带有写入关注点的 "majority"
无法成功,并且提交点开始滞后。如果您的PSA副本集包含一个延迟的次要节点,并且您的副本集需要两个节点来多数提交更改,则您的提交点也会延迟。
延迟的提交点会影响集群性能的两个方面
存储引擎将提交点之后发生的所有更改保留在磁盘上,以保留持久历史记录。这些写入的额外I/O往往会随着时间的推移而增加。这可能会极大地影响写入性能并增加缓存压力。
MongoDB 允许 oplog 超过其配置的大小限制,以避免删除
majority commit point
。
为了减少缓存压力和增加写流量,为不可用或延迟的节点设置 votes: 0
和 priority: 0
。对于使用“多数”发出的写操作,只有投票成员被考虑来确定执行多数提交所需的节点数量。将节点的配置设置为 votes: 0
可以将需要提交写操作时写入关注 "majority"
的节点数从两个减少到一,并允许这些写操作成功。
一旦副本追上了,可以使用 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()
方法。