Top Menu

如何利用Vultr的API自动更换故障主机

Vultr的Reserved IP要$3/month,Additional IPv4 IP要$2/month,实在是消费不起,手动更换烦了,遂写了个自动程序,来自动更换主机。

想法是这样的,利用定时任务,每隔5分钟检查一次tcp连接状态,3次异常之后,开始进行切换操作。

切换流程

  1. 获取主机列表
  2. 停用故障主机
  3. 创建故障主机快照
  4. 创建新主机
  5. 用故障主机快照恢复新主机
  6. 删除故障主机

测试通过自动化操作,15分钟内自动确认TCP异常,1小时之内就可以自动切换到新主机。

技术细节

在切换过程中有部分操作需要等待执行完成,比如创建快照和从快照恢复,所以使用了swich来进行步骤计数并写入json文件,初始json计数为0,每操作成功一步,增加一位数。好处是当后一步发现之前的结果出错时可以很灵活的进行回滚。

Vultr的API有一个坑,虽然在创建主机的时候提供了snapshot的选项,但是并不会使用这个snapshot创建主机,导致创建出的主机都是毛坯的,还以为是快照出错了。所以还得分成两步,先创建一个空白主机,再从快照恢复,不过恢复后会自动启动主机,这样就少了一个启动的步骤也算是人性化。

在CLI执行ping命令的时候由于会一直ping下去,程序会进入死循环,在命令前加上timeout就可以限制命令执行时间,不过很可惜,在php中执行命令并没有用。

公用函数

注意替换高亮行的API-Key、缓存路径

步骤零:获取主机列表及程序执行状态

使用状态码执行命令

步骤一:停用故障主机

步骤二:创建快照

注意高亮行,设置快照有效时间,另时区为UTC+8,创建快照需要等待,此步骤会进行状态判断

步骤三:创建新服务器

注意高亮行,设置新创建服务器的区域、套餐、操作系统,下值为法兰克福、5美元、Debian 9

步骤四:从快照恢复

快照恢复需要等待,此步骤会进行状态判断

步骤五:删除旧服务器

以上更换主机的步骤已全部结束,以下为附加功能

步骤六:更新WireGuard节点信息,Ping节点

此步骤ping阶段会进入假死,需要手动ctrl+c结束,目前使用ini_set可以解决这个问题。

替换高亮部分

循环步骤:检查TCP状态

替换高亮行,TCP检测用的是百度的网站robot检测api,连百度都访问不了,那么肯定是被玩坏了。

 

There are no comments yet

  • Hello, guest

Powered by WordPress. Designed by WooThemes