排查 docker flow proxy 的 503 问题
这是今天我们在开发环境下 docker swarm 集群上遇到的问题,在这篇博文中记录一下排查过程。
先登录到应用容器内检查一下其中运行的站点是否能正常访问:
# docker exec -it 024be860ad79 /bin/bash
# curl -s -D - -o /dev/null http://127.0.0.1
HTTP/1.1 200 OK
可以正常访问。
然后登录到 docker flow proxy 的 proxy_proxy 服务的容器内,检查一下是否可以正常访问应用容器中的站点:
# docker exec -it $(docker ps --filter name=proxy_proxy -q | head -1) /bin/sh # apk add --update curl
# curl -s -D - -o /dev/null http://q_web
HTTP/1.1 200 OK
也可以正常访问。
接着查看该容器内 HAProxy 的配置文件:
cat /cfg/haproxy.cfg
发现很多根据主机名进行路由转发的 acl 配置丢失,原本有很多下面这样的路由配置:
acl url_q_web80_0 path_beg /
acl domain_q_web80_0 hdr(host) -i q.cnblogs.com
use_backend q_web-be80_0 if url_q_web80_0 domain_q_web80_0
而 backend 的配置正常。
于是强制更新 proxy_proxy 服务:
$ docker service update -d=false --force proxy_proxy
proxy_proxy
overall progress: 2 out of 2 tasks
1/2: running [==================================================>]
2/2: running [==================================================>]
verify: Waiting 1 seconds to verify that tasks are stable...
更新后,HAProxy 的路由配置数据恢复正常。
但过了会,HAProxy 的路由配置数据又丢失了。
用下面的命令查看 swarm-listener 的路由配置,路由都是正常的,/cfg/haproxy.cfg 的路由配置问题并没有影响到实际的路由配置。
curl http://swarm-listener:8080/v1/docker-flow-swarm-listener/get-services
查看 swarm-listener 的日志
docker service logs proxy_swarm-listener
发现下面的错误:
ERROR: Request http://proxy:8080/v1/docker-flow-proxy/reconfigure?distribute=true&port=80&serviceDomain=q.cnblogs.com&serviceName=q_web returned status code 500
折腾半天没解决,只能重建集群。
在重建集群部署应用时,特地观察了一下 /cfg/haproxy.cfg 中的配置是如何被更新的。
当使用 docker stack deploy 命令部署时,proxy_swarm-listener 日志中会有这样的记录:
Sending service created notification to http://proxy:8080/v1/docker-flow-proxy/reconfigure?distribute=true&port=80&serviceDomain=q.cnblogs.com&serviceName=q_web
然后 proxy_proxy 容器中的 /cfg/haproxy.cfg 文件被添加这样的配置:
acl domain_q_web80_0 hdr(host) -i q.cnblogs.com dev-q.cnblogs.com
use_backend q_web-be80_0 if url_q_web80_0 domain_q_web80_0 backend q_web-be80_0
mode http
server q_web q_web:80
2017年8月8日更新:
昨天又到了这个问题,今天排查下来怀疑是多个容器无法启动引起的,当容器启动失败时,swarm会不停地重新启动容器,而每次启动容器都会更新 docker flow proxy 的路由配置,可能就是这个频繁更新让 docker flow proxy 的路由出现问题。
相关博问:
奇怪的"Docker Flow Proxy: 503 Service Unavailable"问题
排查 docker flow proxy 的 503 问题的更多相关文章
- Docker hv-sock proxy (vsudd) is not reachable
Docker hv-sock proxy (vsudd) is not reachable Docker hv-sock proxy (vsudd) is not reachable at Docke ...
- docker设置proxy
该方法是持久化的,修改后会一直生效.该方法覆盖了默认的docker.service文件. 1. 为docker服务创建一个内嵌的systemd目录 mkdir -p /etc/systemd/syst ...
- Docker 小记 — Compose & Swarm
前言 任何相对完整的应用服务都不可能是由单一的程序来完成支持,计划使用 Docker 来部署的服务更是如此.大型服务需要进行拆分,形成微服务集群方能增强其稳定性和可维护性.本篇随笔将对 Docker ...
- docker swarm和compose 的使用(阿里)
基本的docker使用参考:Docker 入门 到部署Web 程序- (阿里面试常用的docker命令和优点) 昨天去阿里面试 问我如果给你5台服务器 如何部署docker,我说一个个拷贝,面试官听了 ...
- 自建docker swarm体验简单之美
之前用的阿里云容器服务,但由于acsrouting的路由错乱问题,被逼上自建docker swarm的梁山.今天尝试自己搭建docker swarm,竟然轻松搞定,简单的超乎想象. 以下是实际搭建操作 ...
- docker learning
Docker 配置文件位置 Docker 的配置文件可以设置大部分的后台进程参数,在各个操作系统中的存放位置不一致 在 ubuntu 中的位置是:/etc/default/docker 在 cento ...
- docker部署archery
一.centos7部署docker 1 通过 uname -r 命令查看你当前的内核版本 uname -r 2 确保 yum 包更新到最新. yum update 3 卸载旧版本 yum remov ...
- docker swarm 英文参考资料阅读列表
将自己在使用 docker swarm 过程中阅读的英文参考资料收集在这篇博文中,便于以后查阅与温习,顺带分享. 2017年8月5日之前阅读 My experience with Docker Swa ...
- nexus3使用docker运行/创建docker私有仓库/maven私有仓库
version: '3.2' services: nexus3: container_name: nexus3 hostname: nexus3 image: sonatype/nexus3:3.14 ...
随机推荐
- 11G新特性 -- variable size extents
AU是asm磁盘分配的基本单元.在oracle10g中,一个AU对应一个extent(这会增加对内存的使用),因为一个大的数据库如果含有大量的默认大小的AU,会导致数据库的share pool的大量使 ...
- 【Java】浅谈Java IO
注意 本文的代码,为了学习方便,简化代码复杂度,未考虑拆包.粘包等情况的处理.所以仅供学习使用,不能用于实际环境. 阻塞IO,BIO Java1.1发布的IO是BIO.阻塞地连接之后,通过流进行同步阻 ...
- Hadoop 2.x 安装常见问题FAQ(一) NodeManager 无法启动问题解决
一.问题描述 在搭建 Hadoop hadoop-2.4.1 集群的最后一步启动集群,在命令窗口并没有报任何错误,但是Slave 节点的 NodeManager进程始终启动不起来.随后查看了后台启动日 ...
- 【6集iCore3_ADP触摸屏驱动讲解视频】6-5 底层驱动之SDRAM读写(下)
源视频包下载地址: 链接:http://pan.baidu.com/s/1jIC2LKy 密码:zyn3 银杏科技优酷视频发布区: http://i.youku.com/gingko8
- 【Matplotlib】利用Python进行绘图
[Matplotlib] 教程:https://morvanzhou.github.io/tutorials/data-manipulation/plt/ 官方文档:https://matplotli ...
- Java知多少(92)滚动条
滚动条(JScrollBar)也称为滑块,用来表示一个相对值,该值代表指定范围内的一个整数.例如,用Word编辑文档时,编辑窗右边的滑块对应当前编辑位置在整个文档中的相对位置,可以通过移动选择新的编辑 ...
- Linux下MySQL5.7.18二进制包安装(无默认配置文件my_default.cnf)
最新在学习MySQL,纯新手,对Linux了解的也不多,因为是下载的最新版的MySQL(MySQL5.7.18)二进制包,CentOS7.2下测试安装,方便以后折腾.大概步骤如下,安装删除反复折腾了几 ...
- Tensorflow学习笔记——安装和运行
参考的资料: 1.官网 2.tensorflow官方文档中文版 安装的是Python 2.7; CPU support (no GPU support),版本是1.1 pip install tens ...
- 集群介绍 keepalived介绍 用keepalived配置高可用集群
集群介绍 • 根据功能划分为两大类:高可用和负载均衡 • 高可用集群通常为两台服务器,一台工作,另外一台作为冗余,当提供服务的机器宕机,冗余将接替继续提供服务 • 实现高可用的开源软件有:heartb ...
- linux 斜杠/
inux OS: 使用”/“ 例子:/home/user/XXX 特例:路径中某目录名包含空格,在命令行中使用cd等命令书写路径时,则要在空格前加”\“ 例子: 主目录(/home/student ...