阅读527 返回首页    go 微信


访问链路问题排查__常见问题_产品使用问题_容器服务-阿里云

当您在容器服务中架设了一个 web 类型的容器,并通过 routing 将请求转发到这个服务器时,请求的链路是 client > DNS 域名解析 > 负载均衡 VIP > 负载均衡到集群中某一台 acsrouting 容器 > 转发到 web 容器,如下图所示。

routing

使用该链路进行访问 ,我们称之为简单路由服务,在这整个链路过程中,任何一个环节发生问题,用户的请求可能都不能正确的到达web 容器。下面,我们从最容易发生问题的环节开发者的 web 容器的健康检查开始,来排查访问链路的问题。

问题排查路径指引

问题分类

  1. 查看容器是否处于运行状态。

    登录 容器服务管理控制台,单击左侧导航栏中的 应用,选择目标应用所在的集群并单击应用的名称,本示例中为 wordpress-test,如下图所示。

    应用

  2. 单击应用 wordpress-test 下提供 web 容器的服务的名称,本示例中为 web,如下图所示。

    web容器服务

  3. 查看提供 web 服务的容器的健康检查状态。

    容器 选项卡中,检查所有容器在 健康检测 这一列是否均为 正常。如果不正常,请查看相应的 日志 报错信息以及该页面的 事件 选项卡,查看部署是否发生异常。如设置了应用的 健康检查,需要确定健康检查页面返回 200,来确保健康检查的状态是正常的。如下图所示。

    容器页面

  4. 检查 web 容器页面响应是否正常。

    如果容器的健康检查状态没有问题,需要绕过 routing 直接检查 web 容器的可访问性。如上图所示,可以查看到某个 web 容器的容器 IP,登录集群中某台机器的 routing 的容器,通过容器 IP 请求 web 容器的页面,如果返回的 HTTP 状态码小于 400,则 web 容器的页面正常。如下所示,docker exec -it f171110f2fe2 shf171110f2fe2 是容器 acsrouting_routing_1 的容器 ID,curl -v 172.19.0.7 中的 IP 地址172.19.0.7是某个 web 服务的容器 IP 地址。如下所示,请求返回了状态码 302,说明 web 容器访问是正常的。

    1. root@c68a460635b8c405e83c052b7c2057c7b-node2:~# docker ps
    2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    3. b403ea045fa1 registry.aliyuncs.com/acs-sample/wordpress:4.5 "/entrypoint.sh apach" 13 seconds ago Up 11 seconds 0.0.0.0:32768->80/tcp w_web_2
    4. 025f7967cec3 registry.aliyuncs.com/acs-sample/mysql:5.7 "/entrypoint.sh mysql" About a minute ago Up About a minute 3306/tcp w_db_1
    5. 2f247b8a76e5 registry.aliyuncs.com/acs/ilogtail:0.9.9 "/bin/sh -c 'sh /usr/" 31 minutes ago Up 31 minutes acslogging_logtail_1
    6. 42b75bee6cd8 registry.aliyuncs.com/acs/monitoring-agent:latest "acs-mon-run.sh --hel" 31 minutes ago Up 31 minutes acsmonitoring_acs-monitoring-agent_2
    7. 0a9afa527f03 registry.aliyuncs.com/acs/volume-driver:0.7-252cb09 "acs-agent volume_exe" 31 minutes ago Up 31 minutes acsvolumedriver_volumedriver_2
    8. 3c1440fd114c registry.aliyuncs.com/acs/logspout:0.1-41e0e21 "/bin/logspout" 32 minutes ago Up 32 minutes acslogging_logspout_1
    9. f171110f2fe2 registry.aliyuncs.com/acs/routing:0.7-staging "/opt/run.sh" 32 minutes ago Up 32 minutes 127.0.0.1:1936->1936/tcp, 0.0.0.0:9080->80/tcp acsrouting_routing_1
    10. 0bdeb8464c14 registry.aliyuncs.com/acs/agent:0.7-bfe8bdf "acs-agent join --nod" 33 minutes ago Up 33 minutes acs-agent
    11. ba32a0e9e7fe registry.aliyuncs.com/acs/tunnel-agent:0.21 "/acs/agent -config=c" 33 minutes ago Up 33 minutes tunnel-agent
    12. root@c68a460635b8c405e83c052b7c2057c7b-node2:~# docker exec -it f171110f2fe2 sh
    13. / # curl -v 172.19.0.7
    14. * Rebuilt URL to: 172.19.0.7/
    15. * Trying 172.19.0.7...
    16. * Connected to 172.19.0.7 (172.19.0.7) port 80 (#0)
    17. > GET / HTTP/1.1
    18. > Host: 172.19.0.7
    19. > User-Agent: curl/7.47.0
    20. > Accept: */*
    21. >
    22. < HTTP/1.1 302 Found
    23. < Date: Mon, 09 May 2016 03:19:47 GMT
    24. < Server: Apache/2.4.10 (Debian) PHP/5.6.21
    25. < X-Powered-By: PHP/5.6.21
    26. < Expires: Wed, 11 Jan 1984 05:00:00 GMT
    27. < Cache-Control: no-cache, must-revalidate, max-age=0
    28. < Pragma: no-cache
    29. < Location: https://172.19.0.7/wp-admin/install.php
    30. < Content-Length: 0
    31. < Content-Type: text/html; charset=UTF-8
    32. <
    33. * Connection #0 to host 172.19.0.7 left intact
    34. / #
  5. 验证 acsrouting 的正确性。

    升级 routing 到最新版本,登录集群机器,请求 routing 健康检查页面,如下所示。

    1. root@c68a460635b8c405e83c052b7c2057c7b-node2:~# curl -Ss -u admin:admin 'https://127.0.0.1:1936/haproxy?stats' &> test.html

    将页面 test.html 拷贝到有浏览器的机器,用浏览器打开本地文件 test.html,如下图所示。查看相应的 web 服务和容器后端,第一部分为 stats 信息,为 routing 的统计信息,第二部分为 frontend 的统计信息,我们主要观察第三部分 backend 的信息,w_web_80_servers 表示名为 w 的应用下服务 web 的 80 端口的后端 servers 的信息。总共有三个 backend server,即后端有三个容器提供 web 服务,显示为绿色,表示 routing 容器到这三个容器的网络是连通的,在正常工作,显示为其他颜色则为异常。

    routing-debug-stats

  6. 查看负载均衡 VIP 的转发是否正确,并查看健康检查的状态。

    1. 如下图所示,找到集群的负载均衡 VIP。单击 容器服务管理控制台 左侧导航栏中的 集群,选择相应的集群,本示例中为 routing-test-online。集群
    2. 单击该集群对应的 管理,进入集群详情页面。单击左侧导航栏中的 负载均衡,单击前往SLB控制台,进入该集群的负载均衡管理控制台页面。负载均衡
    3. 查看负载均衡实例的服务地址,本示例中为 112.74.143.184。slb服务地址
    4. 查看负载均衡的端口健康状态。单击左侧导航栏中的 监听状态 显示为 运行中 则表示端口正常。slb监听
    5. 查看负载均衡后端挂载的服务器的状态。单击左侧导航栏中的 服务器健康检查状态 必须为 正常slb后端服务器
  7. 查看域名是否正确解析到了负载均衡的 VIP。例如,使用 ping 命令或者 dig 命令查看解析结果。域名解析的结果必须指向前面步骤查找到的负载均衡的 VIP 地址。如下所示。

    1. $ ping www.example-domain.com
    1. $ dig www.example-domain.com
  8. 如果用户在创建集群时,没有选择默认创建集群负载均衡实例,由于简单路由服务依赖该集群负载均衡实例,因此用户需要额外绑定一个负载均衡实例来使用简单路由服务,具体方法参考绑定集群负载均衡实例

最后更新:2016-11-03 15:14:57

  上一篇:go 云监控ECS监控插件安装方法__技术分享_技术运维问题_云监控-阿里云
  下一篇:go 路由服务常见问题__常见问题_产品使用问题_容器服务-阿里云