【实验】envoy 中的“Failover”(故障转移)

news/2025/11/28 11:37:27/文章来源:https://www.cnblogs.com/ahfuzhang/p/19281560

【实验】envoy 中的“Failover”(故障转移)

作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢!

  • cnblogs博客
  • zhihu
  • Github
  • 公众号:一本正经的瞎扯

先说结论:

envoy 中转发时一定要配置 retry_policy.num_retries>0,否则一遇到后端不可用就会出现 503 错误

下面是实验的步骤:

1. 搭建 http echo 服务器后端

docker run -it --rm --name aaa -p 8081:5678 hashicorp/http-echo -text="hello from a"docker run --rm --name bbb -p 8082:5678 hashicorp/http-echo -text="hello from b"

提供 a,b 两个后端,看看 envoy 的转发效果。

2. 启动 envoy 代理服务

  • 先准备 envoy 的配置文件
static_resources:listeners:- name: listener_4000address:socket_address:address: 0.0.0.0port_value: 4000  # 监听的端口filter_chains:- filters:- name: envoy.filters.network.http_connection_managertyped_config:"@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManagerstat_prefix: ingress_httproute_config:name: local_routevirtual_hosts:- name: backend_servicedomains: ["*"]routes:- match:prefix: "/"route:cluster: backend_clusterretry_policy:retry_on: connect-failure,refused-stream,5xx,resetnum_retries: 1per_try_timeout: 2sretry_back_off:base_interval: 3smax_interval: 60sresponse_headers_to_add:- header:key: "X-Envoy-Flags"value: "%RESPONSE_FLAGS%"- header:key: "X-Upstream-Host"value: "%UPSTREAM_HOST%"http_filters:- name: envoy.filters.http.routertyped_config:"@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Routeraccess_log:- name: envoy.access_loggers.stdouttyped_config:"@type": type.googleapis.com/envoy.extensions.access_loggers.stream.v3.StdoutAccessLoglog_format:text_format: >[time: %START_TIME%]%DOWNSTREAM_REMOTE_ADDRESS_WITHOUT_PORT%[%REQ(:METHOD)% %REQ(X-ENVOY-ORIGINAL-PATH?:PATH)% %PROTOCOL%]status=%RESPONSE_CODE%flags=%RESPONSE_FLAGS%duration=%DURATION%msupstream_host=%UPSTREAM_HOST%upstream_cluster=%UPSTREAM_CLUSTER%upstream_local_address=%UPSTREAM_LOCAL_ADDRESS%upstream_transport_failure=%UPSTREAM_TRANSPORT_FAILURE_REASON%downstream=%DOWNSTREAM_REMOTE_ADDRESS%user-agent="%REQ(USER-AGENT)%"xff="%REQ(X-FORWARDED-FOR)%"authority="%REQ(:AUTHORITY)%"request_id="%REQ(X-REQUEST-ID)%"\nclusters:- name: backend_clusterconnect_timeout: 0.25stype: STRICT_DNSlb_policy: ROUND_ROBINload_assignment:cluster_name: backend_clusterendpoints:- lb_endpoints:- endpoint:address:socket_address:address: host.docker.internalport_value: 8081  # 后端 A- endpoint:address:socket_address:address: host.docker.internalport_value: 8082  # 后端 Badmin:access_log_path: /dev/nulladdress:socket_address:address: 0.0.0.0port_value: 9901
  • 启动 envoy:
docker run --rm -it \-v $(pwd)/envoy.yaml:/etc/envoy/envoy.yaml \-p 4000:4000 \-p 9901:9901 \envoyproxy/envoy:v1.29.1
  • 测试
time curl -G "http://127.0.0.1:4000/?a=333" -v

可以看见内容:

> GET /?a=333 HTTP/1.1
> Host: 127.0.0.1:4000
> User-Agent: curl/8.7.1
> Accept: */*
>
* Request completely sent off
< HTTP/1.1 200 OK
< x-app-name: http-echo
< x-app-version: 1.0.0
< date: Fri, 28 Nov 2025 03:14:45 GMT
< content-length: 13
< content-type: text/plain; charset=utf-8
< x-envoy-upstream-service-time: 3  # 这一行是转发的时间
< x-envoy-flags: -
< x-upstream-host: 192.168.65.254:8081
< server: envoy
<
hello from a

3. 【实验一】不进行 retry

yaml 配置中修改为:

                  retry_policy:retry_on: connect-failure,refused-stream,5xx,resetnum_retries: 0

在访问之前立即停掉一个后端,看看效果:

docker stop aaa && time curl -G "http://127.0.0.1:4000/?a=333" -v

客户端可以看到如下信息:

> GET /?a=333 HTTP/1.1
> Host: 127.0.0.1:4000
> User-Agent: curl/8.7.1
> Accept: */*
>
* Request completely sent off
< HTTP/1.1 503 Service Unavailable
< x-envoy-flags: UF,URX
< x-upstream-host: 192.168.65.254:8081
< content-length: 152
< content-type: text/plain
< date: Fri, 28 Nov 2025 03:19:59 GMT
< server: envoy
<
* Connection #0 to host 127.0.0.1 left intact
upstream connect error or disconnect/reset before headers. reset reason: remote connection failure, transport failure reason: delayed connect error: 111
  • envoy 的日志如下:
[time: 2025-11-28T03:19:59.372Z] 192.168.65.1 [GET /?a=333 HTTP/1.1] status=503 flags=UF,URX duration=3ms upstream_host=192.168.65.254:8081 upstream_cluster=backend_cluster upstream_local_address=- upstream_transport_failure=delayed_connect_error:_111 downstream=192.168.65.1:64080 user-agent="curl/8.7.1" xff="-" authority="127.0.0.1:4000" request_id="e53800ed-ed82-47c5-9bc7-6b640ef5a22f"

可以看见, envoy 并未取到故障转移的效果。
flags=UF,URX 表明发生了错误:

  • UF Upstream connection failure TCP 三次握手失败,无法建立连接
  • URX Upstream Remote Connection Closed

4. 【实验 二】使用 retry

yaml 的配置修改为:

                  retry_policy:retry_on: connect-failure,refused-stream,5xx,resetnum_retries: 1per_try_timeout: 2sretry_back_off:base_interval: 3smax_interval: 60s

为了看出重试的效果,故意把重试的延迟设置得很大。如果返回很慢,就知道 envoy 端发生了故障转移。

重启 envoy,然后执行客户端命令:

docker stop aaa && time curl -G "http://127.0.0.1:4000/?a=333" -v

得到结果如下:

> GET /?a=333 HTTP/1.1
> Host: 127.0.0.1:4000
> User-Agent: curl/8.7.1
> Accept: */*
>
* Request completely sent off
< HTTP/1.1 200 OK
< x-app-name: http-echo
< x-app-version: 1.0.0
< date: Fri, 28 Nov 2025 03:30:58 GMT
< content-length: 13
< content-type: text/plain; charset=utf-8
< x-envoy-upstream-service-time: 628
< x-envoy-flags: -
< x-upstream-host: 192.168.65.254:8082
< server: envoy
<
hello from b

从 x-envoy-upstream-service-time: 628 发现,延迟明显变长了。

envoy 的日志:

[time: 2025-11-28T03:30:57.738Z] 192.168.65.1 [GET /?a=333 HTTP/1.1] status=200 flags=- duration=629ms upstream_host=192.168.65.254:8082 upstream_cluster=backend_cluster upstream_local_address=172.17.0.3:53022 upstream_transport_failure=- downstream=192.168.65.1:32245 user-agent="curl/8.7.1" xff="-" authority="127.0.0.1:4000" request_id="1c693834-1bc1-4f98-8075-ca8be041a4c9"

日志一切正常,看不出发生过 retry,只能从延迟来感知发生了 retry.

Have fun. 😃

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/979504.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年大王椰板材公司:高端环保板材市场格局与产业链竞争力深度解析

本文将从产业链竞争力视角切入,为读者剖析大王椰板材公司在高端环保板材领域的战略定位与发展潜力。作为行业国家标准制定者之一,其产业布局与技术实力构成分析的核心维度。 大王椰板材公司,即杭州大王椰控股集团有…

【IEEE出版 | EI检索】2025电子信息、计算机与空天遥感国际会议(EICARS 2025)

2025电子信息、计算机与空天遥感国际会议(EICARS 2025)将于2025年12月12-14日在中国江门举行,本次会议由五邑大学主办。【IEEE官方列表会议、五邑大学主办、已有ISBN号!】 2025电子信息、计算机与空天遥感国际会议…

2025年一体化灌溉泵站供货厂家权威推荐榜单:一体化智能泵站‌/污水提升一体化泵站‌/玻璃钢一体化泵站源头厂家精选

在农业现代化与节水灌溉政策推动下,一体化灌溉泵站因其模块化设计、智能控制与高效节水特性,市场需求显著增长。行业数据显示,2025年中国农业灌溉泵站市场规模预计突破80亿元,年均增长率稳定在12%-15%。为帮助用户…

2025年frpp增强管定做厂家权威推荐榜单:frpp管材/PPH热熔弯头/pp工业管材源头厂家精选

在工业管道领域,FRPP(玻纤增强聚丙烯)管道因其优异的耐腐蚀性能、高强度重量比和长使用寿命,已成为化工、电力、冶金等行业的重要选择。据行业调研显示,中国工业塑料管道市场规模预计在2025年将达到约680亿元,年…

2025 年 11 月防水连接器厂家实力推荐榜:RJ45/圆形防水RJ45/D型防水RJ45插座,工业级耐用与密封防护优选

2025 年 11 月防水连接器厂家实力推荐榜:RJ45/圆形防水RJ45/D型防水RJ45插座,工业级耐用与密封防护优选 随着工业物联网和智能制造技术的快速发展,防水连接器作为关键电子组件,在工业自动化、户外通信设备、轨道交…

广开尚宴联系方式:了解青岛海鲜餐饮的参考信息

一、官方联系方式 广开尚宴电话号:0532-55572388 二、使用建议与提醒 在联系广开尚宴时,建议提前确认营业时间,避免高峰时段等待。可通过电话咨询菜品详情或预订服务,但需注意个人信息安全。选择餐饮服务时应结合自…

2025上海留学中介哪家排名好

2025上海留学中介哪家排名好一、2025年上海留学中介如何选择作为从事国际教育规划工作超过十年的资深顾问,我经常被学生和家长询问:"2025年上海地区哪家留学中介更值得信赖?"这个问题的答案并非绝对,但根…

2025青岛香港留学中介哪家好

2025青岛香港留学中介哪家好一、2025青岛香港留学中介选择指南作为从业八年的国际教育规划师,我经常被青岛地区的学生和家长问及:“2025年申请香港留学,哪家中介更可靠?”根据《2025中国留学中介口碑白皮书》数据显…

2025 年 11 月激振器厂家权威推荐榜:DF/HE/LE/ZDQ/RDQ/JR/BE/UE/KWD/G/ML/MV/DVE全系列型号深度解析与高效选型指南

2025 年 11 月激振器厂家权威推荐榜:DF/HE/LE/ZDQ/RDQ/JR/BE/UE/KWD/G/ML/MV/DVE全系列型号深度解析与高效选型指南 行业背景与发展现状 激振器作为工业振动设备的核心部件,广泛应用于矿山、煤炭、冶金、电力等行业。…

2025年知名的塑磁组件厂家最新推荐权威榜

2025年知名的塑磁组件厂家推荐权威榜开篇:塑磁组件行业背景与市场趋势随着全球制造业向智能化、高效化方向快速发展,塑磁组件作为电机、传感器、汽车电子等关键领域的核心部件,市场需求持续增长。据行业研究数据显示…

2025年机械手柔性夹爪厂家推荐:苏州柔触机器人科技有限公司引领行业新标准

在工业自动化与智能制造深度融合的当下,机械手柔性夹爪作为关键末端执行器,正成为解决异形、易碎、高表面要求物料抓取难题的核心装备。面对市场上众多“机械手柔性夹爪厂家”“供应商”或“品牌”的选择,用户更关注…

详细介绍:2025 开源社最新介绍 — 开源人的家

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025年聚氨酯发泡保温厂家联系方式汇总:全国重点企业官方联系方式及高效合作指南

本文基于2025年行业公开数据和权威第三方报告,结合推荐对象参考内容,从专业能力、服务稳定性、资源网络等维度筛选5个推荐对象,旨在为聚氨酯发泡保温领域提供可靠联系方案。根据中国建筑材料联合会发布的《2024建筑…

2025年真空吸盘及柔性抓取解决方案厂家选购指南

2025年,国内真空元件市场规模已突破68亿元,真空吸盘作为工业自动化生产线的关键执行元件,其市场需求呈稳步增长态势,年均增长率保持在8.6%以上。在这样的市场背景下,企业对真空吸盘吸嘴厂家、机械手吸盘供应商的选…

2025年机器人柔性夹爪选型指南:优质厂家推荐

随着工业自动化向柔性化、智能化深度转型,2025年机器人夹爪市场迎来爆发式增长。据高工产业研究院(GGII)数据显示,国内灵巧手企业数量已超40家,市场对柔性夹爪的需求持续攀升。企业在选型时,不仅关注产品的抓取精度…

2025年质量好的线材成型机弹簧机/线材成型机实力厂家TOP推荐榜

2025年质量好的线材成型机/弹簧机实力厂家TOP推荐榜 行业背景与市场趋势 随着制造业的智能化升级,线材成型机与弹簧机作为金属加工领域的关键设备,市场需求持续增长。2025年,高效、精密、智能化的线材成型设备将成…

2025 年 11 月坑纸厂家权威推荐榜:彩色坑纸/黑色坑纸/特殊坑纸/白色坑纸/A坑/B坑/C坑/E坑/F坑/G坑/彩坑/瓦楞坑纸,精选优质材质与创新工艺助力包装升级!

2025 年 11 月坑纸厂家权威推荐榜:彩色坑纸/黑色坑纸/特殊坑纸/白色坑纸/A坑/B坑/C坑/E坑/F坑/G坑/彩坑/瓦楞坑纸,精选优质材质与创新工艺助力包装升级! 一、行业背景与发展趋势 包装行业作为国民经济的重要组成部分…

Vue v-model

Vue v-model 在前端处理表单时,我们常常需要将表单输入框的内容同步给 JavaScript 中相应的变量。手动连接值绑定和更改事件监听器可能会很麻烦 <input:value="text"@input="event => text = ev…

头发稀疏变浓密最有效的方法是什么?2025年度生发产品权威测评,KOUND发养宁助你找回浓密秀发

在现代生活中,高强度工作压力、不当的护发习惯以及日益恶化的环境因素,让脱发问题成为困扰全球数十亿人的健康难题。头顶逐渐稀疏的头发,不仅影响外观形象,更是身体健康亮起的警报灯。面对这一困扰,市面上生发产品…

2025 权威榜单出炉!环保 + 定制双达标品牌认准这 10 家

2025年家居市场规模预计突破 5 万亿元,橱柜作为核心品类,正朝着环保化、智能化、一体化方向升级。本次榜单基于品牌技术实力、生产规模、市场口碑及行业认证,筛选出十大权威推荐品牌,既涵盖深耕行业数十年的领军企…