健康检查

健康检查架构概览

TCP 健康检查

注意 本节是为 v1 API 编写的,但这些概念也适用于 v2 API。针对 V2 API 将在未来的正式版中重新定义。

执行的匹配类型如下(这是MongoDB运行状况检查请求和响应):

  1. {
  2. "send": [
  3. {"binary": "39000000"},
  4. {"binary": "EEEEEEEE"},
  5. {"binary": "00000000"},
  6. {"binary": "d4070000"},
  7. {"binary": "00000000"},
  8. {"binary": "746573742e"},
  9. {"binary": "24636d6400"},
  10. {"binary": "00000000"},
  11. {"binary": "FFFFFFFF"},
  12. {"binary": "13000000"},
  13. {"binary": "01"},
  14. {"binary": "70696e6700"},
  15. {"binary": "000000000000f03f"},
  16. {"binary": "00"}
  17. ],
  18. "receive": [
  19. {"binary": "EEEEEEEE"},
  20. {"binary": "01000000"},
  21. {"binary": "00000000"},
  22. {"binary": "0000000000000000"},
  23. {"binary": "00000000"},
  24. {"binary": "11000000"},
  25. {"binary": "01"},
  26. {"binary": "6f6b"},
  27. {"binary": "00000000000000f03f"},
  28. {"binary": "00"}
  29. ]
  30. }

在每个运行状况检查周期中,所有 “send” 字节都会发送到目标服务器。每个二进制块的长度可以是任意的,并且在发送时只是连接在一起。(分离成多个块可用于可读性)。

在检查响应时,执行“模糊”匹配,以便每个二进制块必须被找到,并且按照指定的顺序,但不一定是连续的。因此,在上面的示例中,可以在 “EEEEEEEE” 和 “01000000” 之间的响应中插入 “FFFFFFFF”,并且该检查仍然会通过。这样做是为了支持将非确定性数据(如时间)插入到响应中的协议。

健康检查需要更复杂的模式,如发送/接收/发送/接收目前不可能。

如果 “receive ” 是一个空数组,则 Envoy 将执行 “connect only” TCP 健康检查。在每个周期中,Envoy 将尝试连接到上游主机,并且如果连接成功,则认为它是成功的。每个健康检查周期都会创建一个新连接。