节点IP地址智能调度
此功能为商业版功能。在v0.3.1版本加入。
可以利用阈值和动作来实现节点和节点IP的流量调度。
阈值
可以在IP地址中设置一组阈值,配合”动作”,用来根据一些条件自动修改IP地址的在线状态以及备用IP。
目前支持的阈值项目有:
节点平均请求数
- 当前节点在单位时间内接收到的平均请求数节点平均下行流量
- 当前节点在单位时间内发送的下行流量节点平均上行流量
- 当前节点在单位时间内接收的上行流量节点健康检查结果
- 在节点健康状态发生改变的时候触发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里你可以根据阈值匹配结果自动启动一个新的云实例,或者执行别的动作。