前情提要:2020 年年底的时候,公司购买的阿里云服务器突然出故障。服务器装的操作系统是 Windows 2012 R2 ,故障表现为 IIS 无法正常提供服务,上网搜索了报错信息也没找到有用的解决方案。
想着重启服务器试试,结果重启之后没法通过远程桌面连接登录服务器了,接着通过阿里云管理控制台的 Web 端 VNC 方式登录到服务器上,发现系统卡在开机后与进入 Windows 前的一个蓝色界面,只能选择“恢复或初始化电脑,或者使用高级工具”,要不就是只能关闭电脑。
当时看到这个界面之后更加不敢乱动了,给阿里云提交了工单,结果阿里云的工程师捣鼓了半天也搞不定。虽然公司购买了快照服务,但当时只保留了最近 7 天的云盘快照,用这几个快照尝试恢复系统,结果发现每个快照在恢复完成并开机后,服务器依然处在那个故障状态,也就是说服务器出故障是在 7 天之前了,所以快照都没有派上用场。
还好系统盘只是装了一些软件,服务器上各网站的代码、资源文件、数据库还有各种其他文件都在非系统盘,最后花了一天时间重装系统 + 安装配置软件,总算把服务器恢复正常了。
比较闹心的是,虽然服务器重新跑起来了,但是出现这个问题的原因当时并没有找到。这台服务器我和另一个同事都有权限操作,两个人负责各自的业务,因此也就会安装各自所需的软件,并根据需要对系统进行配置,比如同事配置他的 PHP + MySQL 环境,我配置我的 Node.js + MongoDB 环境。加上服务器上安装的操作系统版本是 Windows 2012 R2 ,而这台服务器本身就是虚拟化的,2012 R2 不支持在虚拟化的机器中使用 Docker ,得 Windows 2016 及更高版本才行。所以服务器从 2016 年运行到 2020 年底,这几年的时间我和另一个同事对系统、软件等各个方面做过太多的改动,后来想想出现崩溃也是在所难免。
在经历过这次事故之后,自己把服务器运维工作进行了一些规范:
- 所有云盘保留最近 30 天自动创建的快照。
- 如果安装了软件或者系统补丁,在安装之前会给所有云盘创建手动快照,这样的手动快照会保留最近的 3 份。
- 每周二凌晨重启服务器。
- 记录自己对服务器系统、软件、阿里云等各个方面所做过的操作或改动。
上面的 4 点规范中,第 1 、3 两点是通过阿里云提供的服务自动实现的,第 2 点的频率很低,所以能够保证做到。而第 4 点最头疼,虽然专门在本机建了一个文档,用来记录自己对服务器所做的所有操作,但是时不时地还是会忘记做记录。
而且就像前面所说的,这台服务器自己和另一个同事都有操作权限,即使记录了自己的所有操作,但另一个同事所做的操作自己是无法得知的,所以依然无法保证能够记录下对服务器的所有操作。
因此,我想就这台服务器的运维工作咨询大家的意见:
- 有什么办法能够记录对服务器的所有操作?或者说这个需求是否有意义?能够自动记录操作最好,现在越来越发现,靠人工手动方式来做的事,总是容易出岔子。
- 要想减少对服务器系统的改动或操作,是否有必要上 Docker ?
- 是否需要将 Windows 升级到支持 Docker 的更高版本?或者将 Windows 系统更换成 CentOS 或 Ubuntu ?这样能否给业务开发、服务器运维带来更多便利?
- 如何对服务器的操作进行限制、规范?比如软件只能安装在指定目录,只有拥有特定权限的用户才能安装软件。网站代码及静态文件等也只能存放在指定目录之类的。
- 以上操作能否尽量避免服务器挂掉?为了达成这个目标,还有哪些重要的点我遗漏掉了?
以及如果服务器有一天还是挂掉了,该怎么做才能尽快将服务器上的所有业务恢复?我的想法是,一旦服务器发生崩溃,说明是之前对服务器所做的各种操作积累起来导致了这种情况。在这种情况下,当务之急是先让服务器上的业务恢复运行。
要想实现这个目的,一方面要用历史快照尝试恢复服务器到正常状态。另一方面,如果尝试了所有快照都无法将系统恢复到正常状态,这个时候又该如何处理?
欢迎大家给出各种意见和建议,谢谢先~