【发布时间】:2015-12-25 21:21:46
【问题描述】:
在 HTTP 模式下,如果设置了“option redispatch”,如果当前后端关闭,HAProxy 将自动重试另一个后端。整个过程从客户端看是透明的,预计响应时间会比正常情况长。
我想知道为什么 TCP 模式支持此选项?理论上应该是可以的。
【问题讨论】:
-
我能够在 TCP 模式侦听器上启用它。你试过了吗?您确定重试次数设置为大于零吗?
在 HTTP 模式下,如果设置了“option redispatch”,如果当前后端关闭,HAProxy 将自动重试另一个后端。整个过程从客户端看是透明的,预计响应时间会比正常情况长。
我想知道为什么 TCP 模式支持此选项?理论上应该是可以的。
【问题讨论】:
问题在于 HTTP 会话的工作方式。会话令牌存储在 HTTP cookie 中。来自Wikipedia:
会话令牌是从服务器生成并发送到客户端以标识当前交互会话的唯一标识符。客户端通常将令牌存储并作为 HTTP cookie 发送和/或将其作为 GET 或 POST 查询中的参数发送。
因此,HAProxy 无法在 TCP 模式下读取/操作会话信息,因为它必须先打开 HTTP 连接才能读取 cookie 数据。如果 HAProxy 无法读取会话信息,那么它就无法知道客户端是否正在尝试连接到死服务器,因此它是否应该尝试重新分配它。
这是在HAProxy configuration manual 中为option redispatch 备份的。
【讨论】:
option redispatch 变得多余。