HAProxy健康检查连续计数不重置

我们在HAProxy服务器后面有两个Redis服务器。 一台服务器是主设备,这是服务器,另一台服务器是从服务器。 如果主人失败,哨兵选举另一个服务器成为主人。 那部分工作正常。 棘手的是确保HAProxy从不允许stream量同时进入两台服务器。

我最初通过添加服务器的risefall参数来解决这个问题,如下所示:

 backend Backend:Redis bind-process 1 timeout server 3h timeout tunnel 3h option tcp-check tcp-check connect tcp-check send PING\r\n tcp-check expect string +PONG tcp-check send info\ replication\r\n tcp-check expect string role:master tcp-check send QUIT\r\n tcp-check expect string +OK server redis-01.vbox 10.10.0.10:6279 check inter 5s rise 5 fall 2 maxconn 600 weight 1 server redis-02.vbox 10.10.0.11:6279 check inter 5s rise 5 fall 2 maxconn 600 weight 1 

我们正在处理一个奇怪的情况下面的顺序:

  • redis-01 (初始主设备)up和redis-02 (初始从设备)开始。
  • redis-01 (主)。
  • 哨兵选举redis-02成为新的主人。
  • 重新启动redis redis-01 (现在的奴隶,原来的主)。
  • 对于两三次HAProxy健康检查, redis-01认为它是主人并通过检查。
  • 最终, redis-01意识到它仍然是奴隶,并开始没有通过检查。

问题是HAProxy不会重置健康检查计数器。 状态页面显示redis-01已通过2/5(或3/5)健康检查。 这不起来,这是好的。 不好的是,如果另一台服务器出现故障,那么检查通过的次数就会减less,最终只有1次,从HAProxy的angular度来看,这可能会导致两台服务器都处于启动状态。

我不明白为什么HAProxy不认为redis-01没有出现,因为它在2之后停止了通过检查。似乎它不应该继续等待。 该文件说:

“rise”参数指出,在连续成功运行健康检查之后,服务器将被视为可操作。

5个中有2个,但没有5个,所以没有通过健康检查,不能再次开始计数。 它需要在0。

那么问题是以下两种情况之一:1)我需要做什么来告诉HAProxy重置连续的健康检查计数器? 2)有没有更好的方法让HAProxy同时考虑两台服务器?