全局上游

OpenResty Edge 提供了“全局上游”,允许定义公共的上游,这些上游可以被多个不同的 HTTP 应用直接引用,而无需在不同的应用中都定义一遍上游。 下面将介绍如何在 Edge Admin 中配置“全局上游”。

OpenResty Edge 提供了“全局上游”,允许定义公共的上游,这些上游可以被多个不同的 HTTP 应用直接引用,而无需在不同的应用中都定义一遍上游。

下面将介绍如何在 Edge Admin 中配置“全局上游”。

首先进入页面 全局配置 > 全局上游:

如上图所示,在左侧标签页就能找到全局上游的入口。

接着点击 新建上游 按钮,开始创建新的全局上游。

输入上游的信息:

填写上游名称为即将创建的上游进行命名,协议根据需要可以选择 HTTP 或者 HTTPS,当选择是 HTTPS 时,还可以配置是否启用 SSL 验证,默认是开启的。 健康检查的配置可以根据这里进行配置。 接着填入上游服务器的信息,可以设置一个或多个上游服务器。

如果需要修改上游的属性,可以点击列表中对应记录的右侧 编辑 按钮进行编辑:

修改属性后,就可以点击 保存 按钮(如果不想保存,点击 取消 即可)。

如果某个上游不再需要了,可以点击列表中对应记录的右侧 删除 按钮进行删除:

需要注意的是,如果上游还被其他应用使用中,则无法被删除。

上游健康检查

上游健康检查可以用于检查上游服务是否正常运行,有利于提高系统的可用性、稳定性。

在 OpenResty Edge 中,无论是全局上游还是 HTTP 应用上游,都支持健康检查。

启用方式也很简单,在新增或者是编辑上游时,点击“健康检查”开关进行开启。

在 OpenResty Edge 的上游健康检查中, 如果开启 一直检查,那么将会定期去检查上游是否可用。默认是不开启的,只有在请求发送到了对应上游,才会进行检查。 健康检查的协议当前支持“HTTP”和“TCP”,对于 HTTP 服务,选择 HTTP 协议是更常见的做法。 请求方法中,可以选择“HEAD”或者是“GET”方法。“HTTP 请求主机”和“HTTP 请求 URI”将决定健康检查请求的目的地,同时也可以指定使用的 HTTP 协议版本以及设置 User-Agent 请求头部。 请求间隔是指相邻两个请求之前的时间间隔,默认是 3 秒,当发送的请求超过超时时间时,将判定请求为失败。超时时间默认为 1 秒。如果请求没有超时,但是请求的状态不在指定的状态中,那么请求也会被判定为失败。当连续失败的请求数量超过了设置的不健康阈值,那么上游将被判定为“不健康”;当前连续成功的请求数量超过了设置的健康阈值,上游被判定为健康。 最后一个选项“上报间隔”用于配置 Edge Node 多久向 Edge Admin 上报上游的状态,默认是 3 秒。

当上游服务器状态是健康时:

当上游服务器状态不健康时:

同时,点击健康检查详情,可以看到上游服务器的详细状态:

上游连接限制与排队

此功能在 OpenResty Edge 26.12.1-1 中首次引入,适用于 HTTP 应用上游、全局上游及其 Kubernetes 变体。

可以为上游设置以下参数,并通过正常的应用或全局上游发布流程使其生效:

参数含义
max_conns活跃上游连接使用数的上限,整数 0 到 2147483647。0 或省略表示不限制,也不排队。空闲 keepalive 连接不计入。
max_queue达到连接限制后允许等待的请求数,整数 0 到 2147483647,默认 0。为 0 或队列已满时,额外请求返回 502。
queue_timeout最长排队时间,单位为秒,范围 0.001 到 2147483.647,默认 60。等待时间同时受上游连接超时限制;排队超时返回 504。

例如,设置 max_conns=100、max_queue=200、queue_timeout=0.5,表示达到连接限制后, 最多允许 200 个请求等待,最长等待 0.5 秒。

这些计数按 worker 进程分别维护,相同目标套接字地址、主机名和本地绑定地址的请求会共享计数, 即使它们来自不同上游配置。因此应对共享同一目标的请求使用一致设置;绕过排队机制的流量不计入。 这不是整个网关或集群共享的连接总上限。

每次选择上游(包括重试)都会应用设置;切换到备用上游时使用备用上游自己的设置。 更新配置不会修改已在等待请求的定时器,也不会立即唤醒它们。将 max_conns 设为 0 可关闭排队。

此功能仅适用于 HTTP 回源,TCP/UDP 上游不支持这些配置。先升级网关到 26.12.1-1 或更新版本,再发布排队配置。