Edgeweir
使用指南

区域探针与智能调度

区域探针、节点指标、调度地址与多级备用 IP,以及按指标调整 DNS 的智能调度规则。

概念

术语定义
区域节点组与探针的地域标签(如华东),见 区域。
区域探针在某个区域运行 edgeweir-node probe 的进程,从该区域探测各节点的调度地址。不运行 OpenResty,不监听端口。
探测方区域探针,或开启「兼任探针」的节点。
调度地址DNS 与探针使用的节点地址,带级别:主、备 1、备 2。
节点指标节点心跳上报的 CPU、负载、内存、出口带宽与活动连接数。
调度规则按节点指标或探测结果,对集群的 DNS 记录执行动作的规则。

工作方式

  1. 探测方每轮向控制台取得目标:每个启用节点的每个调度地址 × 所在集群的每个监听端口,探测后上报结果。
  2. 控制台每 10 秒判断每个地址是否可达,并按规则对每个节点求值;探针上报后立即再求值一次。
  3. 节点改用备用地址,或规则的动作生效、恢复时,控制台发布集群的 DNS 版本并写入服务商。

只有 DNS 模式为「自动」的集群受影响,见 DNS 调度与告警。

区域探针

添加探针

前提:已有区域(集群与节点 →「区域」→「新建区域」);探针主机能访问节点通道地址(系统设置 的「节点通道」,默认 8443)与各节点的监听端口,不需要开放入站端口。

  1. 打开 系统设置,切换到「监控」页签(/system?tab=probes),点击「添加探针」。

  2. 填写「探针名称」(最多 64 字符),选择「区域」与「有效期」(15 分钟、1 小时、24 小时,默认 1 小时)。

  3. 点击「生成令牌」。对话框显示「启动命令」、剩余时间、「注册令牌」、「节点通道」与「CA 指纹」,仅显示一次。

  4. 在探针主机上执行「启动命令」:

    探针主机
    export EDGEWEIR_TOKEN='<注册令牌>'
    docker run -d --name edgeweir-probe --restart unless-stopped --no-healthcheck -e EDGEWEIR_TOKEN \
      -e EDGEWEIR_SERVER=https://cdn-admin.example.com:8443 -e EDGEWEIR_CA_SHA256=<CA 指纹> \
      -e EDGEWEIR_STATE_DIR=/var/lib/edgeweir-probe -v edgeweir-probe:/var/lib/edgeweir-probe \
      --entrypoint /usr/local/bin/edgeweir-node ghcr.io/marvinli001/edgeweir-node:latest probe

    不用容器时,在已安装 edgeweir-node 的主机上运行 systemd 单元 edgeweir-probe.service:

    探针主机
    sudo tee /etc/default/edgeweir-probe >/dev/null <<'CONF'
    EDGEWEIR_SERVER=https://cdn-admin.example.com:8443
    EDGEWEIR_CA_SHA256=<CA 指纹>
    EDGEWEIR_TOKEN=<注册令牌>
    CONF
    sudo chmod 600 /etc/default/edgeweir-probe
    sudo systemctl enable --now edgeweir-probe
  5. 验证:探针出现在「监控」页签的列表中,状态为「在线」,「最近一轮」显示丢包率与延迟。

Compose 写法、二进制参数、状态目录与重新注册见 接入节点。

项目行为
注册令牌ewp_ 前缀,单次有效;数据库只存 SHA-256 与前缀。生成写审计 probe.token_create
有效期界面可选 15 分钟、1 小时、24 小时;API 5 分钟至 7 天,默认 60 分钟
节点通道系统设置 中的节点通道地址,与安装节点所用相同
CA 指纹节点通道内部 CA 的 SHA-256;探针先核对指纹再发送令牌
注册探针首次启动时以令牌注册,此后才出现在列表中;写审计 probe.enroll,操作者为「探针」。之后的启动忽略令牌
没有区域对话框提示「先创建区域」

探测方式

监听一次尝试成功
HTTP连接后 GET /.edgeweir/health,Host: health.edgeweir.invalid状态码 200
HTTPSTLS(SNI health.edgeweir.invalid,不校验证书)后同 HTTP状态码 200
集群有活动节点缺少 probe-health-v1 时的全部监听建立 TCP 连接后关闭连接建立
项目行为
目标每个启用节点的全部级别的调度地址 × 集群最新配置版本中的每个监听端口;节点兼任探针时不探测自己
PROXY protocol要求 PROXY protocol 的监听先收到 PROXY v1 头
尝试每个目标每轮按「每轮尝试次数」依次尝试,每次受「单次超时」限制;同一探针同时探测至多 32 个目标
结果发送数、丢失数、成功尝试的中位延迟(毫秒)、最后一次失败的错误码
轮次下一轮在本轮开始一个「探测间隔」后开始;本轮更久时立即开始

健康端点:节点在每个边缘监听上,对任意 Host 的 GET /.edgeweir/health 在站点查找之前返回 200 ok,不缓存、不计入统计与访问日志、不受封禁与规则影响。HTTPS 监听对 SNI health.edgeweir.invalid 或没有 SNI 的握手使用节点启动时生成的自签名证书,这样建立的连接只能访问健康端点,其他请求返回 421。节点以能力 probe-health-v1 表明支持。

探测设置

「监控」页签的「探测设置」卡片,对全部探测方生效,探测方在下一轮取得新值。修改写审计 system.probes_update。

字段取值默认值作用
探测间隔(秒)5–6010两轮探测的间隔
单次超时(毫秒)500–10000,不超过探测间隔3000一次尝试的时长上限
每轮尝试次数1–103每个目标每轮的尝试次数
判定失败的丢包率(%)1–10050一个探测方对一个地址的丢包率达到该值即为失败
判定不可达前持续(秒)5–360030地址持续失败多久记为不可达
恢复可达前持续(秒)5–360060不可达的地址持续不失败多久恢复为可达

探针列表

列内容
探针名称与主机名
区域区域名称与代码
状态「在线」:3 个探测间隔(至少 30 秒)内取过目标或上报过结果;「离线」;「已停用」
最后在线最近一次取目标或上报的时间
版本探针的 agent 版本
最近一轮丢包率、应答目标的平均延迟、全部尝试都失败的目标数(「N 个目标不可达」)
目标数探针当前的目标数
操作说明
探测结果该探针对每个节点地址与端口的最新结果;点击探针名称同样打开
改名最多 64 字符
停用 / 启用停用后删除它的结果,结果不再计入;节点通道拒绝它,证书续期除外
删除确认「删除探针 {name}?证书将被吊销」后吊销证书并删除结果;重新接入需要新令牌

探测结果的列:「探测方」(节点详情中)或「节点」(探针的结果中)、「地址」(地址:端口与方式)、「丢包率」、「延迟」、「错误」、「检测时间」。错误码:

错误代码含义
超时timeout尝试超过单次超时
连接被拒绝refused端口拒绝连接
连接被重置reset连接被对端重置
TLS 握手失败tlsHTTPS 监听的握手失败
状态码异常status健康端点没有返回 200
不可达unreachable网络不可达

每个(探测方、节点、地址、端口)只保留最新结果,1 小时未更新的结果被删除。

节点兼任探针

  1. 在节点列表点击节点名称,或「操作」→「详情」(/clusters?node=<节点 ID>)。
  2. 打开「兼任探针」。
项目行为
区域取节点所在节点组的区域;节点组没有区域时开关不可用,提示「节点组未设置区域」
探测节点以自己的证书运行同样的探测,不探测自己;结果在「探测方」列标记「节点」
停止关闭开关时删除它的结果;节点停用或节点组去掉区域后,控制台不再接受它的探测
审计node.set_probe

探针身份

项目行为
证书节点通道内部 CA 签发,CN=<探针 ID>、O=Edgeweir Probe,仅客户端认证,有效期 30 天;剩余不足三分之一时探针自动续期,写审计 probe.certificate_renew
隔离探针证书只能调用 ProbeService,不能调用节点 RPC;节点证书不能注册或续期探针
私钥在探针主机生成,保存在状态目录(默认 /var/lib/edgeweir-probe,0600),不离开主机

节点指标

具备 metrics-v1 的节点(Linux)在每次心跳(15 秒)中上报主机指标。节点列表的「指标」列显示 CPU 与内存;节点详情的「指标」显示全部指标与「上报于 …」,没有指标时显示「暂无指标」。

指标来源
CPU整机 CPU 使用率,/proc/stat 在两次心跳之间的差
负载(1 / 5 / 15 分钟)/proc/loadavg
内存已用(MemTotal − MemAvailable)与总量
出口带宽非回环网卡在两次心跳之间的发送速率
活动连接nginx 活动连接数,含 L4 应用 的客户端连接、上游连接与 UDP 会话

节点第一次心跳的两个速率为 0。容器内运行的节点,CPU、负载与内存为宿主机的值,出口带宽为容器网卡的值。调度规则把 60 秒前的指标视为没有数据。

调度地址与备用 IP

节点详情的「调度地址」表:「地址」、「级别」(主 / 备 1 / 备 2)、「来源」(上报 / 配置)、「可达性」(可达 / 不可达);DNS 当前使用的级别标记「使用中」。

来源地址
上报没有配置地址时使用:节点心跳上报的公网地址,全部为主
配置运营者配置的地址与级别;有配置时 DNS 与探针只使用配置的地址,可以是私网地址

配置地址:

  1. 打开节点详情,在「调度地址」中点击「编辑地址」。
  2. 点击「添加地址」,填写单个 IP 并选择级别。最多 8 个,需要一个主地址。
  3. 点击「保存」。「恢复为上报地址」清除全部配置的地址。

没有公网地址的节点

节点在 NAT 后只上报私网地址、又没有配置地址时,DNS 没有可以应答的地址:节点列表的「IP」列与节点详情的「调度地址」标「无公网地址」。

项目行为
连接来源地址节点详情显示节点注册与最近一次心跳连接控制台时的源地址(NAT 的公网地址;节点经代理连接时为代理的地址)
添加来源地址来源地址是公网地址且不在列表中时,编辑地址时显示「添加来源地址 …」,点击后加入待保存的列表;不会自动使用

保存后发布集群的 DNS 版本(原因「保存绑定」),写审计 node.set_addresses。地址须为单个单播 IP,不能是 CIDR、主机名、回环、链路本地或组播地址,也不能重复(「不是单个单播 IP 地址:…」)。

探针判定可达性

项目行为
失败窗口(3 个探测间隔,至少 15 秒)内上报该地址的探测方中,超过一半(严格多数)对它全部端口的丢包率 ≥「判定失败的丢包率」
不可达持续失败「判定不可达前持续」(默认 30 秒)
恢复可达不可达后持续不失败「恢复可达前持续」(默认 60 秒)
没有结果不判为失败
只有少数区域到不了不算失败;由限定区域的调度规则处理

只计启用的探针与仍在兼任探针的启用节点的结果。

级别切换

情况DNS 使用的地址
正常有可达地址的最低级别中的可达地址
主地址不可达下一个有可达地址的级别;主地址恢复可达后切回
全部级别都不可达节点不提供地址;线路的健康地址数可能低于最小值而改用备用节点组,仍为空时由大面积摘除保护保留上一版记录
规则动作「切换到备用 IP」生效至少备 1;生效的级别取两者中较高者。节点没有可达的备用地址时不变

级别变化发布集群的 DNS 版本(原因「节点健康变化」),不另写审计。DNS 绑定中为某节点填写的「目标地址」优先于调度地址,该节点在这条线路上不按级别切换。「手动」模式只列出主地址,不随可达性变化。

例:节点配置 203.0.113.10(主)与 198.51.100.10(备 1)。多数探测方连续 30 秒到不了 203.0.113.10 后,DNS 改写为 198.51.100.10;203.0.113.10 连续 60 秒恢复应答后改回。

智能调度规则

页面:集群与节点 → 选择集群 →「智能调度」页签(/clusters?tab=scheduling,集群有节点后显示),上方为「调度规则」,下方为「预览」。

新建规则

  1. 点击「新建规则」。
  2. 填写「规则名称」,选择「线路」与「动作」,选择「条件组合」,填写「最短保持(秒)」与「恢复等待(秒)」。
  3. 在「条件」中选择「指标」与「比较」,填写「阈值」与「持续(秒)」;探测指标另选「聚合」与「区域」。「添加条件」可再加条件。
  4. 确认「启用」已打开,点击「创建」。
  5. 验证:规则出现在「调度规则」中;「预览」中该规则对每个节点的状态为「空闲」或「等待中」。

规则行的开关启用或停用规则,「编辑规则」修改,删除前确认「删除规则 {name}?生效中的动作将恢复」。

字段取值默认值作用
规则名称1–100 字符—规则列表、DNS 版本原因与告警中的名称
线路「全部线路」或集群 DNS 绑定中的一条线路全部线路规则作用的线路与节点
动作摘除节点 / 切换到备用节点组 / 切换到备用 IP摘除节点见动作
条件组合满足全部条件 / 满足任一条件满足全部条件条件之间为与 / 或
最短保持(秒)0–86400300动作生效后至少保持的时间
恢复等待(秒)0–86400300条件解除持续多久后恢复
启用开 / 关开停用的规则不求值

每条规则 1–8 个条件:

字段取值新条件的默认值作用
指标见下表CPU 使用率比较的值
比较>、≥、<、≤>—
阈值0–10¹²,单位随指标90—
持续(秒)0–360060比较须连续成立多久,条件才算满足
聚合平均 / 最大 / 最小平均只用于探测指标:在探测方之间取值
区域「全部区域」或一个区域全部区域只用于探测指标:只计该区域的探测方
指标单位取值
CPU 使用率%节点上报
1 分钟负载—节点上报
内存使用率%已用 / 总量
出口带宽Mbps节点上报
活动连接数—节点上报
探测丢包率%每个探测方对节点主地址(最低级别)全部端口的丢失尝试占比,再按「聚合」合并
探测延迟ms每个探测方对应答目标的中位延迟取平均,再按「聚合」合并

节点没有 metrics-v1 或 60 秒内没有心跳时,节点指标为「无数据」;没有探测方的新结果时,探测指标为「无数据」。无数据的比较不成立。

线路规则判断的节点
全部线路集群的全部启用节点
一条线路该线路节点组的启用节点;动作为「摘除节点」或「切换到备用 IP」时另含其备用节点组的节点

动作

动作效果前提
摘除节点满足条件的节点从规则线路的记录中移除(「全部线路」时从每条线路),all.<集群域名> 随之不再包含它—
切换到备用节点组线路节点组中有节点满足条件时,该线路改用它的备用节点组(第一个满足「最少健康 IP 数」的组)选择一条线路,且该线路设置了备用节点组
切换到备用 IP满足条件的节点在规则线路(或全部线路)上至少使用备 1 级地址节点有可达的备用地址

状态与时间

状态含义
空闲比较不成立
等待中比较已成立,尚未达到条件的「持续(秒)」
生效中动作已生效
恢复中比较不再成立,等待恢复
阶段规则
生效条件按「条件组合」满足,且各条件的比较连续成立达到其「持续(秒)」
保持生效后只要比较仍按「条件组合」成立就保持,不再看持续时间
恢复比较不再成立后进入「恢复中」;解除连续达到「恢复等待(秒)」且距生效已满「最短保持(秒)」时恢复
再次成立「恢复中」比较再次成立时回到「生效中」,恢复等待重新计时
修改规则停用、删除规则,或修改线路、条件组合、动作、条件时,生效中的动作立即恢复,状态从头开始;只改名称、最短保持、恢复等待时不受影响

生效与恢复

项目行为
DNS每次生效与恢复各发布一个集群 DNS 版本,原因为「智能调度:{规则}({节点})」,后附动作与「生效」或「恢复」
审计操作者「系统」:scheduling.activate、scheduling.recover,元数据含节点、动作、线路、条件值与 DNS 版本号。规则的增删改写 scheduling.rule_create、scheduling.rule_update、scheduling.rule_delete
告警生效时触发「智能调度规则已作用于节点」(scheduling_action,名称为「规则 · 节点」),恢复时解除;见集群与 DNS 告警
保护摘除仍受大面积摘除保护约束
规则列表「作用中的节点」列出生效中与恢复中的节点

求值

项目行为
周期每 10 秒对每个集群求值:先更新地址可达性,再对每条规则、每个节点求值
探针上报后立即对上报涉及的集群求值,同一集群在同一进程中至多每 2 秒一次
进程周期求值在 ROLE=worker 或 ROLE=all 的进程中运行;同一时间只有一个控制台进程求值
写入求值产生的 DNS 版本随即写入服务商;生效时间受 TTL 与递归缓存影响

预览

「预览」按当前指标列出每条规则对其判断的每个节点:「节点」、「状态」、「条件」(当前值、阈值、已成立秒数 / 持续秒数,没有值时为「无数据」)与「将发生」:

将发生含义
下次求值时生效条件已满足,下一次求值启动动作
下次求值时恢复恢复条件已满足,下一次求值结束动作
生效中,最早 {时间} 恢复动作生效中;条件保持解除时最早的恢复时间
生效中动作生效中,条件仍成立
无变化—

预览不写任何内容,随规则列表刷新。

示例

目标线路条件动作
CPU 持续过高的节点暂时离开 DNS全部线路CPU 使用率 > 90%,持续 60 秒摘除节点
华东探针到不了某线路时改用备用组telecom-east探测丢包率(平均 · 华东)≥ 50%,持续 30 秒切换到备用节点组
出口带宽接近上限的节点改用备用 IP全部线路出口带宽 > 900 Mbps,持续 120 秒切换到备用 IP

限制

项目说明
DNS 模式只作用于 DNS 模式为「自动」的集群;「手动」模式只列出主地址,不应用规则与备用节点组
条件每条规则至多 8 个条件,一层「全部 / 任一」组合
单次上报每个探测方每轮至多 10000 个结果
规模每个探测方的目标数为启用节点的调度地址数 × 监听端口数。目标全部不可达时,一轮约需 ⌈目标数 / 32⌉ × 每轮尝试次数 × 单次超时;超过探测间隔时下一轮紧接着开始,判定随之变慢。探针数 × 目标数决定控制台每轮写入的结果数
结果只保存每个(探测方、节点、地址、端口)的最新结果,不保存时序
主机指标只有 Linux 节点上报
解析线路按运营商或地区返回不同节点只在支持的服务商可用,见解析线路
权威 DNS不运行权威 DNS;调度只通过服务商 API 写记录

故障排查

现象原因处理
探针没有出现在列表中注册失败:令牌过期或已用、CA 指纹不符、节点通道不可达或被代理终结 TLS查看探针日志(docker logs edgeweir-probe 或 journalctl -u edgeweir-probe);重新生成令牌
探针「离线」3 个探测间隔内没有取目标或上报检查探针进程与到节点通道的网络
「目标数」为 0没有启用节点,或集群还没有配置版本接入节点
结果全部为 TCP集群有活动节点缺少 probe-health-v1升级节点
错误「状态码异常」或「TLS 握手失败」地址上应答的不是 Edgeweir 节点的监听,或监听前有其他设备核对调度地址与端口转发
「兼任探针」不可用,提示「节点组未设置区域」节点组没有区域编辑节点组,选择区域
「先为节点所在的节点组设置区域,节点才能兼任探针」同上(API)同上
「该区域下还有 N 个探针」删除仍有探针的区域先删除这些探针
「不是单个单播 IP 地址:…」调度地址为 CIDR、主机名、特殊用途地址或重复每行填写一个 IP
「规则需要集群 DNS 绑定中的一条线路」「切换到备用节点组」没有选择线路,或线路不在绑定中选择绑定中的线路
预览显示「无数据」节点没有 metrics-v1、心跳中断,或该区域没有在线的探测方升级节点;检查探针
规则生效但 DNS 没有变化DNS 模式不是「自动」;大面积摘除保护阻止了发布;节点没有可达的备用地址;线路没有备用节点组查看集群「DNS」页签的版本与原因
只有一个区域到不了的地址没有切换到备用 IP可达性按严格多数判断用限定该区域的规则
在 GitHub 上编辑

本页目录