负载均衡支持UDP协议常见问题

更新时间:2017-06-07 13:26:11

UDP协议与TCP 协议有什么区别?

TCP是面向连接的协议,在正式收发数据前,必须和对方建立可靠的连接。UDP是面向非连接的协议,它在数据发送前不与对方先进行三次握手,而是直接进行数据包发送传送。这两种协议分别适用于不同的应用场景。

UDP协议适用于哪些场景?

UDP协议主要适用于关注实时性而相对不注重可靠性的场景,如视频聊天、金融实时行情推送、DNS、物联网等。

目前哪些地域支持UDP协议?

目前UDP协议已在所有地域上线,并且对全网用户开放,用户无需申请即可使用UDP协议。

UDP协议的健康检查如何配置?

配置项和当前四层TCP协议一致,但建议按如下参数配置:

  • 响应超时时间 10s
  • 健康检查间隔 5s
  • 不健康阈值 3
  • 健康阈值 3

UDP健康检查目前支持自定义发送请求和自定义返回请求,能够通过返回字符串是否匹配来反映健康检查的状态。

调整健康检查参数规避健康检查问题

为规避后端服务器端口状态和负载均衡的健康检查状态不一致,请按如下步骤调整。

  1. 在负载均衡控制台调大健康检查间隔和响应超时时间

    • 健康检查间隔:5S

    • 响应超时时间:10S

  2. 如过完成上面的调整后还出现问题,在后端LINUX服务器上执行如下命令,关闭 “port unreachable”类型的ICMP信息发送的限制。

    sysctl -w net.ipv4.icmp_ratemask=6160

    注意:该值的默认值为:6168

    风险:不再限制 “port unreachable”类型的ICMP信息发送速度,暴露在公网的RS在受到UDP端口扫描攻击的时候,会不受限制的返回 “port unreachable”类型的ICMP信息,对OS的消耗会增大。

负载均衡UDP健康检查说明:

基础健康检查原理:

往后端服务器指定端口XX发送UDP报文,如果UDP端口XX没有监听, 后端服务器协议栈会返回 “port XX unreachable”的ICMP信息。如果负载均衡发送报文后等待超时也没收到相应ICMP报文,则认为RS UDP XX PORT是正常的,反之则认为UDP PORT XX健康检查失败。

基础健康检查缺陷:

目前Linux 后端服务器 协议栈有自我保护机制,为防止ICMP攻击会限制后端服务器发送ICMP的速度。在实际压力测试中,发现后端服务器确实有不回应“port XX unreachable”的ICMP信息,此时虽然 后端服务器 的UDP PORT XX已经没有服务,但负载均衡由于没收到ICMP应答,还会健康检查成功。

高级健康检查设置:

如下图所示,用户若在配置UDP监听时设置自定义健康检查请求和返回结果,负载均衡则会通过发送用户指定字符串到后端服务器,必须得到用户指定的返回结果应答,才认为检查成功,需要用户程序配合应答。

udp_health

配置 ECS 安全组允许 UDP 负载均衡实例访问

负载均衡实例是 VPC 网络的私网实例,VPC 内的 ECS 需要访问该负载均衡实例的 UDP 协议,则需要在这些 ECS 的安全组入方向的 UDP 协议允许该负载均衡实例 IP 访问。

您可使用以下任一方法配置 ECS 安全组:

  • 通过VPC控制台的安全组进行授权,如下图所示:

经典网络的 ECS 需要访问负载均衡实例的UDP协议,原则上不需要额外授权,如用户主动关闭了入方向的授权,则需要开启。

产品限制和已知问题

  • UDP协议当前限制和已知问题如下:

  • 每监听最大连接数限制:10W

  • 暂不支持分片包,后续会支持

  • 负载均衡CLASSIC实例UDP协议暂不支持查看源地址,后续会支持

  • UDP监听下,以下两种情况需要5分钟才能配置生效:

    • 移除后端ECS需要5分钟才能切换到正常ECS。
    • 健康检查检测到异常,设置权重为0时,同样需要5分钟才能切换到正常ECS。

UDP相关API

CreateLoadBalancerUDPListener:设置监听访问控制状态

SetLoadBalancerUDPListenerAttribute:查看监听访问控制属性

DescribeLoadBalancerUDPListenerAttribute:给监听增加白名单

具体见文档中心- API使用手册- Listener相关API 部分