【问题标题】:HAProxy retry request on a different backend on 404404 上不同后端的 HAProxy 重试请求
【发布时间】:2020-01-06 19:40:55
【问题描述】:

我正在尝试让 HAProxy 在不同的后端重试 404 请求。

我正在运行 2 个我想从中获取对象的 s3 实例,

场景是存储桶“s3Primary”中的数据将不存在并返回 404 我希望能够使用相同的请求查询存储桶“s3Secondary”。

frontend app
    bind *:80
    acl not_found status 404
    use_backend s3Secondary if not_found
    default_backend s3Primary

backend s3Primary
    server s3prime 127.0.0.1:9001

backend s3Secondary
    server s3second 127.0.0.1:9002

我尝试过使用http-response 进行重定向,但请求只是挂起而没有解决我也在question 中看到了答案

目前解决方案只返回 404,我是 haproxy 的新手。

【问题讨论】:

    标签: haproxy


    【解决方案1】:

    HAProxy 有一个很好的机制来处理最坏的情况或称为failover 的功能。要实现类似的效果,您可以尝试在同一后端使用关键字 backup。这是一个例子。

    
    frontent app
     bind *:80
     default_backend s3_backend
    
    backend s3_backend
     server s3_primary   127.0.0.1:9001 check
     server s3_secondary 127.0.0.1:9002 check backup
    
    

    您还可以添加多个备份作为备份位置,但您需要添加类似这样的内容

    
    backend s3_backend
     option allbackups
     server s3_primary   127.0.0.1:9001 check
     server s3_secondary 127.0.0.1:9002 check backup
     server s3_verybad   127.0.0.1:9003 check backup
    
    

    或者您也可以通过向访问控制列表添加条目来执行类似的操作

    
    frontent app
     bind *:80
    
     acl primary_failed nbsrv(s3_primary) lt 1
    
     use_backend s3_secondary if primary_failed
    
     default_backend s3_primary
    
    backend s3_primary
     server s3_primary   127.0.0.1:9001 check
    
    backend s3_secondary
     server s3_secondary 127.0.0.1:9002 check
    
    

    希望这会有所帮助。

    【讨论】:

    • 感谢您的回答!我可以让 Haproxy 只在 404 上重试吗?
    • 如果你看到代码最后部分的第三行带有nbsrv,就像通过检查特定后端中可用服务器的数量来创建acl,它类似于if workingservers(s3_primary) < 1,所以它实际上检查服务器是否正常工作。但是,您是否只在它只返回 404 而没有任何其他错误响应时寻找条件?
    • 是的,特别是在 404 上,
    猜你喜欢
    • 2020-10-04
    • 1970-01-01
    • 1970-01-01
    • 2017-01-02
    • 1970-01-01
    • 2016-03-13
    • 1970-01-01
    • 2021-07-22
    • 1970-01-01
    相关资源
    最近更新 更多