在上一个文章中详细了介绍了什么是混沌工程以及混沌工程执行的原则,和混沌工程实验中数据库调用延迟,下来详细的介绍另外一个混沌实验,也就是云服务器磁盘被写满的情况的模拟实验和解决思路。
实验的核心是模拟当服务器的磁盘写满的情况下,这个时候服务器就会成为只读的属性。比如举个案例,当DB的服务器磁盘写满的情况下,那么这个时候DB服务器就成为只读属性,这个时候产品使用的数据库由于成为了只读属性,意味着使用这个DB的服务器就会出现大面积的瘫痪导致服务不可用。那么这时候整体的系统容错方案以及解决方案是什么? 下来首先模拟下磁盘写满的操作,在操作前首先查看磁盘已使用的空间以及可使用的空间,具体如下:
系统资源整体性的监控信息具体如下图所示。
下来使用chaosblade工具来模拟磁盘占用55G的空间,具体操作命令如下:
#模拟占用磁盘空间55G [root@k8s-node1 ~]# blade create disk fill --path /home --size 55000 {"code":200,"success":true,"result":"acaf14c05b8f00bf"} #查看系统空间信息 [root@k8s-node1 ~]# df -h /home/ Filesystem Size Used Avail Use% Mounted on /dev/vda1 79G 74G 2.1G 98% /
接着查看系统资源的监控,具体如下图所示。
结合如上可以看到磁盘占用空间是97.3%,可用空间是2.1G,当然随着混沌实验的开展,可以持续的增加磁盘空间的占用,直到磁盘占用空间是100%。实验结束后需要销毁实验的场景,销毁的命令具体如下:
#销毁混沌实验场景 [root@k8s-node1 ~]# blade destroy acaf14c05b8f00bf {"code":200,"success":true,"result":{"target":"disk","action":"fill","flags":{"path":"/home","size":"55000"},"ActionProcessHang":false}} #查看销毁实验后的磁盘空间 [root@k8s-node1 ~]# df -h /home/ Filesystem Size Used Avail Use% Mounted on /dev/vda1 79G 20G 56G 27% /
查看如上信息,可以看到销毁后,磁盘空间回复到一个正常的状态。
那么在如上的实验中,需要思考的是在磁盘写满的情况下需要很快速的触发报警机制,然后来排查到底是什么原因导致磁盘空间写满以及针对情况需要给出具体的技术解决方案,同时也要能够快速的切换到一个正常的服务器继续让产品的服务能够提供服务。这样即使不人为不可控的情况下写满也能够有效的应对这个突发的故障事件,防治这类事故带来的损失和客户对产品的信任度。感谢您的阅读,后续持续更新!