节点IP地址智能调度

此功能为商业版功能。在v0.3.1版本加入。

可以利用阈值和动作来实现节点和节点IP的流量调度。

阈值

可以在IP地址中设置一组阈值,配合”动作”,用来根据一些条件自动修改IP地址的在线状态以及备用IP。 thresholds1.png

目前支持的阈值项目有:

  • 节点平均请求数 - 当前节点在单位时间内接收到的平均请求数
  • 节点平均下行流量 - 当前节点在单位时间内发送的下行流量
  • 节点平均上行流量 - 当前节点在单位时间内接收的上行流量
  • 节点健康检查结果 - 在节点健康状态发生改变的时候触发
  • IP连通性 - 通过区域监控得到的当前IP地址的连通性数值,取值在0和100之间
  • 分组平均请求数 - 当前节点所在分组在单位时间内接收到的平均请求数
  • 分组平均下行流量 - 当前节点所在分组在单位时间内发送的下行流量
  • 分组平均上行流量 - 当前节点所在分组在单位时间内接收的上行流量
  • 集群平均请求数 - 当前节点所在集群在单位时间内接收到的平均请求数
  • 集群平均下行流量 - 当前节点所在集群在单位时间内发送的下行流量
  • 集群平均上行流量 - 当前节点所在集群在单位时间内接收的上行流量

其中: 下行流量表示节点向终端用户发送的内容流量;上行流量表示终端用户向节点发送的内容流量。

动作

当满足阈值时可以触发一些动作。有些动作可以在不满足阈值时执行反向操作,比如上线、下线、切换、WebHook。

多个动作可以组合使用。

上线

当阈值满足时,设置当前IP地址为在线状态。当阈值不满足时,则自动设置当前IP地址为离线状态。

下线

当阈值满足时,设置当前IP地址为离线状态。当阈值不满足时,则自动设置当前IP地址为在线状态。

切换

当阈值满足时,自动切换到新的IP。当阈值不满足时,则自动恢复为原有的IP地址。

通知

当阈值满足时,向管理员发送通知。

WebHook

当阈值满足或者不满足时,以GET方式向WebHook URL发送请求,并传递相关参数,比如:

https://example.com/webhook/api?clusterId=[集群ID]&groupId=[节点分组ID]&nodeId=[节点ID]&addressId=[IP地址ID]&ip=[IP地址]&result=[true|false]

其中:

  • result - 用来标识是否满足阈值,取值为true(满足)或者false(不满足)。

你可以自己添加URL参数,比如WebHook的地址你填写为:

https://example.com/webhook/api?version=1
那么接收到的URL参数就会变成:
https://example.com/webhook/api?version=1&clusterId=...[省略]...

由于WebHook URL调用是从API节点发出,所以请调整相关设置(比如防火墙等)确保在API节点上能成功调用WebHook。

自定义动作

可以利用WebHook实现自定义动作,在WebHook的返回数据中,可以返回一个JSON:

[
  {
	"action": "switch",
	"options": {
	  "ips": ["192.168.1.100"]
	}
  }
]
其中action的取值可以是:

  • up - 上线
  • down - 下线
  • switch - 切换IP,选项有:
    • ips - 一个IP列表,比如[ "192.168.1.100", "192.168.1.101" ],触发此动作时会自动从这个列表中取出一个IP作为备用IP
  • notify - 通知

可以没有动作,也可以添加多个动作:

[
  {
	"action": "up"
  },
  {
	"action": "notify"
  }
]

注意:

  • WebHook的响应的状态码只支持200
  • 在阈值满足和不满足时都会调用WebHook,请根据result参数值来决定执行哪些动作。

应用场景示例

实现备用节点,当流量过大时启用

可以创建一组备用节点,节点的IP地址中设置阈值,当分组平均上/下行流量或者集群平均上/下行流量大到一定的数值时,触发上线动作,让备用节点上线。当分组或者集群流量下降时,会自动恢复到离线状态。

实现自动切换到高防IP

我们平时可以使用普通的IP来让用户正常访问,并节省流量开支,当节点流量达到一定阈值时,可以设置触发切换动作,自动切换到高防IP。

根据区域是否访问自动切换IP

如果我们的IP经常在某个区域或某个运营商的网络中发生故障,导致用户无法访问我们的服务,可以设置配合区域监控并设置连通性阈值,动作设置为WebHook,此时当发生不能访问的故障时,会自动调用WebHook中的URL,在这个URL中我们可以自己实现一个动态获取新IP的小程序,这样就能根据IP连通性就能实现自动切换IP。

根据流量自动启动云实例

可以利用WebHook动作自动调用你自己实现的外部的URL,在这个URL里你可以根据阈值匹配结果自动启动一个新的云实例,或者执行别的动作。