• 微信
    咨询
    微信在线咨询 服务时间:9:00-18:00
    纵横数据官方微信 使用微信扫一扫
    马上在线沟通
  • 业务
    咨询

    QQ在线咨询 服务时间:9:00-18:00

    选择下列产品马上在线沟通

    纵横售前-老古
    QQ:519082853 售前电话:18950029581
    纵横售前-江夏
    QQ:576791973 售前电话:19906048602
    纵横售前-小李
    QQ:3494196421 售前电话:19906048601
    纵横售前-小智
    QQ:2732502176 售前电话:17750597339
    纵横售前-燕子
    QQ:609863413 售前电话:17750597993
    纵横值班售后
    QQ:407474592 售后电话:18950029502
    纵横财务
    QQ:568149701 售后电话:18965139141

    售前咨询热线:

    400-188-6560

    业务姚经理:18950029581

  • 关注

    关于纵横数据 更多优惠活动等您来拿!
    纵横数据官方微信 扫一扫关注官方微信
  • 关闭
  • 顶部
  • 您所在的位置 : 首页 > 新闻公告 > 云服务器服务不可达如何处理?

    云服务器服务不可达如何处理?

    说起来你可能不信,我入行这些年,最怕看到的不是报错日志,而是“连接超时”这四个字。报错好歹说明服务器还在,还能跟你对话。“连接超时”意味着,那台云服务器就像突然人间蒸发了一样,你 ping 不通, SSH 连不上,业务自然也就全停了。

    去年冬天的一个凌晨,我就遇到了这么一档子事。当时正在家里看电影,手机监控突然炸了锅,所有告警都指向同一个信息:核心业务的云服务器服务不可达。我赶紧打开电脑,试着 SSH 连上去,结果屏幕就一直卡在“Connecting”那里,转啊转的,最后弹出一个“Connection timed out”。那种感觉,就像是拨一个电话,一直没人接,最后告诉你“您拨打的用户不在服务区”。

    当时脑子里闪过无数个念头,是被攻击了,还是系统挂了,或者是云服务商那边出了什么问题。好在那几年积累的一些排查经验,让我稳住了心神。今天就跟大家聊聊,当你发现云服务器服务不可达的时候,到底该怎么一步步处理。这不是什么高大上的理论,都是实打实的“救火”经验。

    我们得先理清楚一个概念。所谓的“服务不可达”,表象都是一样的,就是你访问不了这台服务器了。但背后的原因千差万别。有的是网络层面的问题,比如 IP 被屏蔽了,或者防火墙把端口拦住了。有的是系统层面的问题,比如服务器资源耗尽,彻底卡死了。还有的是应用层面的问题,比如关键服务进程挂了。不同的问题,处理的方法完全不同。所以第一步不是瞎折腾,而是先判断问题到底出在哪个层面。

    我记得那天晚上,我做的第一件事不是反复重连,而是换了个角度去“看”那台服务器。我用云服务商提供的管理控制台,也就是网页上那个 VNC 远程登录功能,试着连了一下。这个功能很关键,因为 VNC 是带外管理的,不依赖操作系统里的网络服务。也就是说,就算网卡驱动挂了,或者防火墙把 SSH 端口封了,VNC 通常都能连上,只要云主机本身还在运行。

    幸运的是,VNC 连上去了。屏幕上有登录提示符,但输入用户名和密码之后,响应特别慢,敲一个字母要等好几秒才显示出来。这说明系统还活着,但已经处于一种极度疲惫的状态,很可能资源被耗尽了。我用 top 命令看了一下,果然,CPU 的 load average 飙升到了三十多,内存也基本用光了。再仔细一看,有一个陌生的进程占用了大量的 CPU,进程名看起来像是个随机字符串。

    看到这里,我心里大概有数了,大概率是被植入挖矿程序了。这种程序会疯狂消耗 CPU 资源,把系统拖垮,导致正常的网络服务无法响应。虽然 SSH 端口是开的,但系统已经没有能力处理新的连接请求了,所以表现出来就是服务不可达。处理这种情况,首先得把那个恶意进程杀掉,但光杀掉不够,因为通常会有定时任务或者启动脚本把它重新拉起来。我检查了 crontab,果然发现了一条陌生的定时任务,每五分钟从某个奇怪的网址下载一个脚本并执行。把这些清理干净之后,重启了几个关键的服务,系统终于恢复了正常, SSH 也能连上了。

    这个案例告诉我们一个道理,遇到服务不可达,千万别一根筋地去折腾网络。先搞清楚服务器到底还活着没有,如果连 VNC 或者云控制台的监控界面都看不到任何反应,那可能是云主机本身出了问题,比如宿主机故障或者账单欠费停服了。如果 VNC 能连上但系统很卡,那大概率是资源耗尽。如果 VNC 能连上,系统也很流畅,但网络就是不通,那问题可能出在防火墙或者网络配置上。

    说到网络层面的问题,我另一个客户遇到过一件特别蹊跷的事。他们的 Web 服务,早上还好好的,到了下午突然就访问不了了。SSH 也连不上,ping 也不通,看起来就像是服务器完全从网络上消失了。但是他们通过云控制台的 VNC 登录进去之后,发现系统一切正常,CPU、内存、磁盘都没有异常,网络配置看起来也对,网卡也是 UP 的状态。

    这就很奇怪了,系统正常,网络配置也对,为什么外面就是访问不了呢。我让他们从云主机内部 ping 一下外网,比如 ping 8.8.8.8,结果发现能通,这说明云主机出去的路是通的。但从外面 ping 这台云主机的公网 IP,却完全没反应。这就把问题缩小到了入口方向,也就是说,请求根本就没到达这台云主机。

    排查到这个程度,我开始怀疑是不是安全组或者防火墙的规则出了问题。果然,登录云服务商的控制台一看,这台云主机所属的安全组里面,入方向的规则不知道被谁清空了。也就是说,所有的外部访问请求全部被拦截了,自然也就服务不可达了。后来查了操作日志,发现有位同事在做网络调整的时候,本想修改一条规则,结果手滑把整个安全组给替换了。重新把正确的规则加回去之后,服务立刻就恢复了。

    这件事给我的启发很大。云服务器和传统物理机最大的不同,就是多了一层虚拟网络和访问控制。传统服务器上,只要 iptables 没拦,网线插着,外面就能访问。但在云上,安全组是独立于操作系统存在的一道屏障,而且优先级比操作系统内部的防火墙还要高。所以排查服务不可达的时候,千万不要忘了去检查安全组的规则。有时候你可能在云主机内部把 iptables 关了,但安全组没放行,外面照样访问不了。

    还有一种情况也挺常见的,就是云服务器因为系统盘写满导致服务不可达。有个朋友的公司是做日志分析业务的,他们的服务器每天要产生大量的日志文件。他们虽然配置了日志轮转,但轮转策略设置得不太合理,老日志只压缩不删除。日积月累,系统盘的可用空间越来越少。有一天,他们的客服反馈说网站打不开了,而且 SSH 也连不上了。他登录云控制台用 VNC 连进去,发现命令都敲不动,很多基础命令报“No space left on device”。

    磁盘写满为什么会造成服务不可达呢,原因有很多。操作系统需要磁盘空间来创建临时文件、记录日志、以及处理网络连接的一些状态信息。当磁盘彻底满了之后,很多系统调用都会失败,SSH 服务虽然还在运行,但可能因为无法写入日志或者无法创建子进程而拒绝新的连接。Web 服务也是一样,可能无法写入访问日志,或者无法处理上传的文件,最终导致服务不可访问。

    处理这种情况,第一步是通过 VNC 或者云控制台的救援模式进去,找到占用空间的大文件,把它们清理掉。但这里要注意,光删文件有时候不够,如果被删除的文件还在被某个进程打开着,磁盘空间可能不会立即释放。这时候需要用 lsof 检查一下,找到那些被标记为 deleted 但还在占用空间的文件,然后重启对应的进程。清理出足够的空间之后,重启一下 SSH 和 Web 服务,通常就能恢复正常了。当然,后续还得调整日志轮转的策略,避免同样的问题再次发生。

    域名解析的问题也经常被误认为是云服务器服务不可达。我遇到过好几次,客户火急火燎地说服务器连不上了,我检查了一圈发现服务器一切正常,安全组也对,端口也通。最后用 dig 命令一查,发现他们访问的域名解析到了错误的 IP 地址上。这种情况常见于域名过期没有续费,或者 DNS 记录被误修改,或者是本地 DNS 缓存还没有更新。

    所以当有人说服务不可达的时候,我总会先问一句,你是用 IP 访问的还是用域名访问的。如果是用域名,那就先解析一下域名,看看得到的 IP 是不是云服务器的正确公网 IP。如果不是,问题就在域名那一层。如果是,那就继续往下排查。这个步骤虽然简单,但能节省大量的时间,不至于在服务器上折腾半天发现根本不是服务器的问题。

    还有一个容易被忽略的点是云服务商的网络链路问题。虽然这种事情发生的概率不高,但确实存在。有一次某云服务商的一个可用区出现了网络故障,导致那个区域里的大量云主机外部访问不通,但内部网络是正常的。我当时有一台云主机就在那个可用区里,监控显示服务不可达,但通过同可用区的另一台云主机却能正常访问它。这就说明云主机本身是好的,网络配置也是对的,但公网的入口出了问题。

    这种时候,个人的操作空间其实很有限,因为问题出在云服务商的底层网络上。能做的就是尽快通过工单或者客服渠道联系云服务商,确认故障情况,同时考虑是否有备用的方案。比如把业务流量切换到其他可用区的云主机上,或者如果事先做了高可用部署,那就触发故障转移。这个案例也提醒我们,不要把所有的鸡蛋放在一个篮子里,多可用区部署虽然会增加一些管理的复杂度,但在关键时刻能救命。

    讲了这么多案例,我想总结一下处理云服务器服务不可达的系统性思路。这套思路是我这些年反复实践和调整出来的,分享给大家。

    第一步,确认故障范围。是你一个人访问不了,还是所有人都访问不了。是你自己这台电脑的问题,还是服务器的问题。换个网络环境试试,比如用手机热点访问一下。如果只有你自己的网络环境访问不了,那问题可能出在本地网络或者运营商链路上。如果所有人都访问不了,那问题的焦点就集中在云服务器或者云服务商身上。

    第二步,使用带外管理通道检查服务器状态。云控制台的 VNC 功能或者串行控制台功能是救命的工具。通过它你可以看到服务器的真实状态,不受网络故障的影响。如果可以登录而且系统看起来正常,说明服务器本身还活着,问题在系统内部或者网络层面。如果 VNC 都连不上或者看到了系统崩溃的界面,那问题就比较严重了,可能需要重启甚至重装系统。

    第三步,检查资源使用情况。通过 VNC 登录进去之后,用 top、free、df 这些命令查看 CPU、内存、磁盘的使用率。如果发现某个资源使用率接近百分之百,那很可能就是这个原因导致的服务不可达。根据具体的资源类型采取相应的措施,比如杀死占用 CPU 的异常进程,清理磁盘空间,或者调整内存配置。

    第四步,检查网络配置和防火墙。如果资源没有问题,那就该看网络了。先用 ifconfig 或者 ip addr 确认网卡是否正常,有没有获取到正确的 IP 地址。然后用 iptables -L 查看系统内部的防火墙规则,看有没有拦截 SSH 或者 Web 服务的端口。再用 netstat 或者 ss 确认服务进程确实在监听预期的端口。如果这些都正常,那就该去云控制台检查安全组规则了,确认入方向的规则允许了你需要的端口和来源 IP。

    第五步,检查关键服务进程。有时候服务器本身是好的,网络也是通的,但某个具体的服务没有启动。比如 Web 服务崩溃了,但你访问的是 80 端口,自然也就看不到预期的页面。这时候需要用 systemctl status 或者 ps 命令检查 Nginx、Apache、Tomcat 等关键服务的状态,如果发现服务没在运行,就尝试启动它,并查看日志了解崩溃的原因。

    第六步,如果以上所有步骤都走完了还是没有找到原因,那就需要考虑是不是云服务商层面的问题了。查看云服务商的状态页面,看看是否有正在进行的故障或者维护公告。也可以提交工单询问,同时准备应急预案,比如从快照或者镜像创建一台新的云服务器,把业务切过去。

    说实话,云服务器服务不可达这件事,没人能保证永远不发生。我们能做的,就是建立一套完善的监控体系,在问题发生的第一时间就能发现,同时有一套清晰的排查和处理流程,能够快速定位问题并恢复服务。每次处理完这种故障,我都会花点时间复盘一下,看看有没有什么可以改进的地方,监控指标要不要更全面一些,告警阈值要不要调整一下,处理流程能不能更顺畅一些。把这些经验沉淀下来,下次再遇到类似的问题,心里就有底了。



    最新推荐


    微信公众帐号
    关注我们的微信