逐个对服务器进行 haproxy 备份/故障转移

逐个对服务器进行 haproxy 备份/故障转移

我在我们的环境中为不同的应用程序运行 haproxy 1.6。以前我们使用思科产品。Haproxy 有很多优点,但有一件事我无法用 haproxy 配置,或者我不知道如何配置。

假设我有一个如下配置的后端:

backend test_farm
    mode http
    option httplog
    balance leastconn
    cookie test_farm insert nocache
    option httpchk /test
    option allbackups
    timeout check 10s
    default-server inter 4s fall 15 rise 6
    server host1_server1 host1:24320 check cookie PZ22
    server host1_server2 host1:24350 check cookie PZ23
    server host1_server3 host1:22250 check cookie PZ24
    server host1_server4 host1:22280 check cookie PZ25
    server host1_server5 host1:22310 check cookie PZ26
    server host1_server6 host1:22340 check cookie PZ27

    server host2_server1 host2:24320 check cookie BZ22 backup
    server host2_server2 host2:24350 check cookie BZ23 backup
    server host2_server3 host2:22250 check cookie BZ24 backup
    server host2_server4 host2:22280 check cookie BZ25 backup
    server host2_server5 host2:22310 check cookie BZ26 backup
    server host2_server6 host2:22340 check cookie BZ27 backup

所有服务器都安装了相同的应用程序。我有几个后端,其中包含其他应用程序。但每个后端仅服务于一个特定的应用程序,并且服务器数量各不相同。用户必须尽可能长时间地停留在一台服务器上,以避免重新登录。如您所见,我使用 cookie 插入将用户固定在其第一个连接的服务器上。该应用程序无法在所有服务器上使用会话持久性。

当所有正常服务器都宕机时,Haproxy 只会使用备份服务器,但我不能等到所有服务器都宕机。在这种情况下,也许 4 台服务器可以处理负载,但再失去一台服务器将使剩下的 3 台服务器陷入困境。由于多种原因,我无法简单地在 host1 和 host2 上的所有服务器上进行负载平衡。备份服务器在正常情况下应该没有负载。我读过 1.8 版文档,但这个文档没有变化,我也没有发现任何这方面的新功能。在 cisco 产品上,您可以配置,当 host1 上的 server1 宕机时,立即在 roundrobin 或 leastconn 算法中使用 host2 上的 server1。

这是我的问题,如何配置这种行为。

我想到/尝试了一些方法:

  1. 在 acl 中使用 nbsrv,为相同的服务器定义两个或更多后端部分,并添加备份部分:这个方法有效,但我失去了会话亲和性,因此用户将被踢出应用程序,需要重新登录。而且我猜想使用相同服务器的后端越多,执行的检查就越多,这会对负载产生影响,我想避免这种情况。

  2. 定义与上述相同的配置,但不使用备份关键字。相反,我将备份服务器的权重定义为 0。然后使用由 cron 触发的脚本,通过 adminsocket 确定有多少服务器处于活动状态,如果两个或更多正常服务器关闭,则增加备份服务器的权重(也通过 adminsocket)。我还没有测试过这个。但你可以想象这也不是首选方法。

  3. 让我非常老旧的 C 知识得到更新并尝试编写这种行为,但是你知道,我更愿意坚持使用那些拥有更好的编码知识的开发人员提供的版本。

我希望有人可能有同样的情况,并能给我一些提示,如何使用 bord 媒介来实现这一点。当然,我读完了我在谷歌上找到的所有内容,但没有一个与我的情况相关。

谨致问候,kaniggl

答案1

这是否会如您所期望/想要的那样有效?

其工作方式:当 test_farm 上的活动服务器数量低于 4 时,它会完全切换到 test_farm_backup。

无论如何请记住,只要您在 test_farm 上启动 4 台服务器,流量就会切换。

frontend ft_test_farm
    bind 10.10.10.10:80
    # detect if we go under 4 active servers
    acl test_farm_overflow nbsrv(test_farm) le 4
    use_backend test_farm_backup if test_farm_overflow
    default_backend test_farm

backend test_farm
    mode http
    balance leastconn
    cookie test_farm insert nocache
    option httpchk /test
    timeout check 10s
    default-server inter 4s fall 15 rise 6
    server host1_server1 host1:24320 check cookie PZ22
    server host1_server2 host1:24350 check cookie PZ23
    server host1_server3 host1:22250 check cookie PZ24
    server host1_server4 host1:22280 check cookie PZ25
    server host1_server5 host1:22310 check cookie PZ26
    server host1_server6 host1:22340 check cookie PZ27

backend test_farm_backup
    mode http
    balance leastconn
    cookie test_farm insert nocache
    option httpchk /test
    timeout check 10s
    default-server inter 4s fall 15 rise 6
    server host2_server1 host2:24320 check cookie BZ22
    server host2_server2 host2:24350 check cookie BZ23
    server host2_server3 host2:22250 check cookie BZ24
    server host2_server4 host2:22280 check cookie BZ25
    server host2_server5 host2:22310 check cookie BZ26
    server host2_server6 host2:22340 check cookie BZ27

相关内容