为了省钱用了抢占式实例,运行一段时间后突然被系统回收,服务中断,数据也没来得及保存。
这类报错背后常见的原因有几处,逐个排除就行。抢占式实例按价格和库存随时可能被回收。还有一种是回收前只有很短的通知时间。
另外,有状态服务放在这类实例上风险极高。
动手时先确认实例的回收通知机制
echo '在控制台开启中断通知'
再往下把状态数据放到独立存储
mount | grep -E 'nfs|nas'
然后用脚本监听回收信号
cat /proc/self/status | head -5
剩下的就是把无状态服务放抢占式,核心放包年包月
systemctl list-units --type=service | head
这次没动代码,只在配置和运行环境上找原因。
别只看报错消失,验证要多做一步。服务在实例被回收后能快速在别处重建,数据没有丢失。
容易忽略的是,抢占式适合可中断的批处理任务;数据库和网关这类组件不要放上去,省钱换来的中断代价更高。监控比日志更早给出信号,事后回看经常能提前半小时发现异常。