这个问题可能是由于实现了 ReadIndex 导致的。ReadIndex 的实现确实会在切换 Leader 时导致只读请求直接报错重发,因为 ReadIndex 会强制要求 Leader 处理读请求,而不是将其转发给新的 Leader。因此,在不稳定的网络环境中,这可能会导致只读请求一直重发,从而导致超时和 not_leader
的问题。
如果您想要解决这个问题,可以考虑使用 Lease Read。与 ReadIndex 不同,Lease Read 不会强制要求 Leader 处理读请求,而是将其转发给新的 Leader。这样,在切换 Leader 时,只读请求可以继续被处理,而不会直接报错重发。另外,您还可以考虑优化网络环境,以减少 Leader 退位的频率,从而减少只读请求的重发次数。