需求
说是“反人类”其实有点标题党了,那么这里列一下具体的需求吧
- 应用服务器全部在国内某云
- 通过Nginx反向代理这些应用
- Nginx放在非大陆的服务器
- 非大陆服务器与某云的服务器通讯不同时间段通讯质量不一
- 非大陆服务器某种程序上可能还存在受到长城防火墙的干扰
由于上面最后两点的原因,所以还要做的一个就是
- 非大陆服务器选两个不同机房(线路)服务器
最后就是: 域名的A记录只指向一个IP,也就是说只有一台服务器对外工作。 当前域名指向的IP所在的服务器一旦发生故障,需要及时更新A记录到另外的线路节点上去。
当然,最坏的情况就是非大陆的服务器全部故障了,还是要把线路切换到某云上来。 还有,切到某云后要在一定时间后再次切换线路出去。
听着可能有点一头雾水的样子….说白了就是要实时根据连接好坏,如果连接情况差就自动切换线路。
那么就用shell写一个吧。
简要说明
依赖服务
目标
- 根据站点当前的超时状况自动更新记录的解析值
- 连连超时微信通知
- 更新记录微信通知结果
实现
TIME_INTERVAL()
函数对上次更新解析记录做间隔判断,切换到最稳定线路后至少1小时后方可再更新解析记录。
TIME_OUT()
函数对监控的服务器进行超时检测,当连续3次超过7秒没有收到其回应认定访问超时。
UPDATE_DNS_1()
脚本
|
|
作用:用于更新解析记录 可以参照Cloudflare官方API进行设置。 脚本
|
|
作用:微信通知
举个栗子
我把代码贴到Github了
总之,不会再有人会遇到这样的需求吧😓