OpenShift 下的应用出现 504 Gateway Time-out 的解决方法

问题描述

应用中某些超长请求(响应时间通常超过30s)访问时出现 504 Gateway Time-out 错误。

504-gateway-timeout-01.png

问题分析

OpenShift 的 Route 是通过高速反向代理 HAProxy 作为路由器来实现的,该反向代理默认的服务器超时时间为 30s

我们可以通过访问 OpenShift Origin 在 Github 上的项目源码来得到其他的配置的默认值,这些值都可以通过设置 HAProxy 路由器的 Deployment Config 中的环境变量来覆盖默认值。

openshift/origin-haproxy-router 镜像源码:

https://github.com/openshift/origin/blob/master/images/router/haproxy/conf/haproxy-config.template#L107

解决方案

覆盖环境变量 ROUTER_DEFAULT_SERVER_TIMEOUT 的默认值为 300s。具体操作步骤如下:

1. 为 admin 用户启用 cluster-admin 角色

oadm policy add-cluster-role-to-user cluster-admin admin

启用该角色之后,开发者以 admin 登陆 Web Console 就可以看见 OpenShift 所有的内部项目了。

2. 找到 router 的部署定义

点击 default 项进入,之后在左侧的功能菜单中选择 Applications / Deployments

504-gateway-timeout-02.png

点击 router 进入部署配置的定义界面并切换至 Environment 选项卡,增加环境变量 ROUTER_DEFAULT_SERVER_TIMEOUT 并设置值为 300s,最后点击 Save 按钮保存设置。OpenShift 会自动触发一次更新部署。

504-gateway-timeout-03.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,923评论 18 139
  • 到目前为止,我们仅仅在本地机器上部署了我们的微服务。当我们部署一个微服务在云端会发生什么?大多数云平台提供了让你部...
    ApolloYang2017阅读 2,063评论 1 2
  • 参考文档: 1.haproxy:http://www.haproxy.org/ 本文涉及haproxy的安装,并做...
    Netonline阅读 2,448评论 1 51
  • 这两天在参加成都蜀汉拆书帮活动 21天拆书训练营! 由于不在成都本地, 问题来了,要求是必须至少参加一次,拆书帮的...
    学霸教练李斌阅读 279评论 0 0
  • 不知何时 皱纹肆意你的脸庞 岁月的痕迹累积为记忆 今天这个二十年结婚纪念日 落寞地蜷在沙发上 安静忧伤习以为常 感...
    晨光拂晓阅读 480评论 3 9