Contents
  1. 1. 分析和初步估计
  2. 2. 排查过程
  3. 3. 回顾

最近在做一个新的系统,所以刚刚在青云上面部署和搭环境。期间遇到一个小问题,也花了我们二三十分钟的时间。虽然这是一个挺小的问题,但是能很好的说明我之前在有经验和没有经验的程序员的区别里面提到的认识和定位问题,以及学习编程需要具备的基本能力 - 问题分解里面提到的问题分解,所以还是决定稍微写一下,顺便也可以让想学习计算机领域的朋友了解一下这种典型的思考和解决问题的方式。

在青云上,我们部署了两台云主机,一个负载均衡,一个路由器。它们的关系如下图。作为用户,要能够访问一个网站,其实还经过了一个叫 DNS 的东西,所以我也把它放进去大概意思一下。

Request Flow

注:abc.com 和 10.123.32.1 都是假的,举例说明用。

当我把两台主机部署好了以后,从青云的控制台看到负载均衡是这样显示的。

Qingcloud LB

两台主机已经标识为活跃状态了,我也轻快地在浏览器敲入域名,期待页面出来就去吃晚饭了。然而浏览器竟然加载很久还是没有反应,最后超时了。这是什么鬼啊?虽然肚子饿得不行,但是还是得忍一忍,先把它搞定。

分析和初步估计

因为主机刚配置好,所以我其实是已经通过 VPN 和主机连在一起的。如下图。

Request Flow

所以,我通过 VPN 的内部 IP,直接访问 主机A 和 主机B,发现可以访问。那么,根据架构分拆的几大部分,和具体的现象,初步估计情况可能是这样的:

  1. 内部 IP 可以访问,D 通路正常
  2. 负载均衡显示活跃,C 通路正常
  3. 直接通过外网 IP(10.123.32.1)访问,浏览器显示错误,B 通路有问题

排查过程

因为负载均衡是买的,所以没法通过有经验和没有经验的程序员的区别提到的分析日志的方式来进一步分析。由于我对运维和青云的东西还是没什么经验,这时候有点抓瞎。

CTO 问我什么错误代码,我说 504。他然后上 DNSPOD 看了一下配置。不看不知道,一看吓一跳。不知道为什么竟然同一域名下配了两条不同 IP 的记录。改完后,用命令跟踪域名,这时 IP 才解析对了,补充确认DNS 通路正常了。可是,再测试发现通过域名还是无法访问。

CTO 问了一下,是不是路由器的防火墙没设置。他去改了一下,发现还是不行。

我突然就想,是不是负载均衡也有防火墙啊?再看了一下负载均衡的设置页面,还真的有。(事实是它的文档有蓝色字说明,我竟然没有看到。唉,这是有多粗心)。然后 CTO 在负载均衡开放了 80 端口,就可以通过域名访问了。

回顾

从上面看,我们的排查还是有那么一点混乱。

不过,整体的步骤还是基本按照各个组件的切分来逐一检查,其实就是问题分解和分析的能力。中间的混乱主要是 CTO 忘记了青云的负载均衡也有防火墙。我也因为不熟悉,和没细看清楚文档,稍微花多了一点时间。所以说,笑来老师在「得到」专栏说的逐字阅读的能力是多么的重要

Contents
  1. 1. 分析和初步估计
  2. 2. 排查过程
  3. 3. 回顾