回源:多级源站与健康检查
多级源站怎么判定健康、谁来探测、连续几次失败才切换、全部不健康时怎么办、自动与手动回切的区别,以及节点回源时的失败重试。
工作原理
网站的源站可以分成几级:第 1 级是主源站,后面是备用。开了健康检查后,主控定期探测每个启用的源站,当前级别的源站全部不健康时,切到下一级。切级就是一次网站重新发布,节点从新的当前级开始选源站。
另外,节点在每次回源时也会记录失败:一个源站在设定时间内失败达到设定次数,节点暂时不再选它,并在重试次数和时间预算内换一个源站重试。这是节点自己的判断,不改变当前级别。
判定规则
| 项 | 规则 | 默认值 |
|---|---|---|
| 探测周期 | 主控每轮挑最久没探测的网站探测 | 每轮 30 秒,每轮最多 500 个网站 |
| 一次探测 | 对源站的健康检查路径发 GET;单次超时 | 5 秒 |
| 成功 | 收到状态码小于 500 的响应 | — |
| 失败 | 5xx、连接失败、证书校验失败、超时 | — |
| 判为不健康 | 连续失败次数 | 3 次 |
| 恢复健康 | 连续成功次数 | 2 次 |
| 级别健康 | 该级任一源站健康即健康;全部不健康才不健康;其余为未知 | — |
| 切级 | 当前级不健康时,切到下一个健康的级;没有健康的,切到下一个还没确认不健康的级 | — |
| 全部不健康 | 保持当前级不切换,并告警 | — |
| 自动回切 | 更高一级恢复健康,立即切回 | — |
| 手动回切 | 更高一级恢复健康时只提醒“可以切回”,由你操作 | — |
健康检查要求网站至少启用两个源站。
谁来探测
按下面的顺序取票,前面的来源已经给出结论的源站,后面不再探测:
- 本租户自己的在线节点:每轮最多 3 个节点,至少 2 票、且多数一致才算结论;
- dnspup 拨测点(装了 dnspup 拨测插件时):每个拨测点一票,与节点票合计;
- 主控直接探测。
所以源站的防火墙要放行:你的节点、主控,以及(用了 dnspup 拨测时)dnspup 的拨测点。主控探测请求的 User-Agent 是 cdnca-control-api/origin-probe。
洞察与日志
- 每次切级和“可以切回”的提醒都会进站内消息与通知中心(“回源级别自动切换”“源站已恢复(可手动切回)”);所有级别都不健康时也会发出同样的提醒。
- 网站编辑页的源站状态卡片显示当前级别和每个源站的健康状态(健康、不健康、未知)。
- 健康检查判定的是“源站能不能用”;访问日志里的回源 5xx 是访客请求的观测结果,两者口径不同:一个源站对少数请求报错,不一定会被判为不健康。
常见问题
源站挂了,为什么没有切换
- 要连续 3 次失败才判为不健康,每轮 30 秒,所以最快约 1 分半;
- 同级还有别的源站健康时,这一级仍算健康,不切换;
- 所有级别都不健康时保持当前级;
- 源站返回 4xx(比如 404)算成功。请让健康检查路径在源站异常时返回 5xx。
已经切到备用了,为什么还有请求到主源站
切级是一次发布,节点收到新配置之前仍按旧的级别回源。手动回切模式下,主源站恢复后也不会自动切回,要你在网站里切回。
维护源站时怎么做
先在回源设置里停用要维护的源站,或手动切到备用级,维护完再启用,不要靠健康检查来切。
最佳实践
- 至少准备两个源站,并放在不同级别;
- 健康检查路径只检查源站自身是否可用,不要依赖外部服务,异常时返回 5xx;
- 担心主源站来回抖动时用手动回切。