方法来重新路由路由器后面的机器的(纯文本)协议

我一直在寻找一些时间,如何实现这一点,但我似乎无法find类似的解决scheme或综合我的知识。

以下是关于我的设置的详细信息:我有一个网关/路由器有上行链路到互联网。 “后面”是几个不同的服务器。 其中一些有公共知识产权,有些则没有。 无论哪种方式,我想要公开的所有服务都通过解除目标IP上的相应端口或将端口DNATing到没有公共IP的其中一台机器来公开。 整个设置很好地工作(大部分是一个基于netfilter的规则集与几个路由表项)。

现在的问题是:有时路由器后面的机器可能会closures(目前我无法承受额外的冗余)。 如果发生这种情况,我希望某个服务的用户(尤其是HTTP)具有比networking超时更好的用户体验,并提供一个“备份”服务器,只显示有关服务背后的事实路由器在此刻closures。 因此,如果路由器无法到达该服务,则应该将stream量dynamic地重新路由到“备份”。

有谁知道这个问题的解决scheme,或可以build议一种方法如何接近它? search字词的build议也是受欢迎的…

一种解决scheme是使用像HAProxy这样的负载均衡器。 它支持备份服务器的概念,所以只要响应负载均衡器的常规检查,就可以将stream量路由到普通服务器。 如果它不再回答,stream量可以路由到备份服务器,在你的情况下,可以简单地显示“对不起”的说明。

这种方法的缺点当然是你必须维护负载均衡器,这可能是另一个单点故障。 如果你的网关/路由器是一个真正的linux系统(而不是一些塑料盒),这可能不是一个问题,因为它已经是单点故障,也可能运行loadbalancer 🙂

更一般的,要解决的问题不是redirectstream量(有很多解决scheme),而是实际检测到主机已closures,然后相应地更改路由/redirect。 当服务器重新启动时也是一样,所以stream量被路由到实际的服务器上。

最便宜的解决scheme,你必须编写一个脚本,轮询后端服务器,并在发生故障时更新端口转发。 您将stream量转发到包含错误消息的其他服务器。

脚本的细节完全取决于系统的具体细节。 一些非常粗糙的伪bash代码:

wget backendserver > /dev/null test_for_failure if failed; then iptables -D <port forward rule> iptables -A <new forward rule> else verify iptables is sending to the backend fi 

在我们的环境中,所有stream量都被转发到一个服务器,然后代理到后端。 其设置在停机期间显示正确的消息。 但是它仍然可能导致超时失败。 它致力于它的任务虽然,使中断罕见。 下一步将是使其成为一个集群的一部分,以增加正常运行时间; 对我们来说,成本/收益是不存在的。