来自Hetzner的故障转移IP的DNS问题

假设我们有两个服务器A和B,它们具有“真实”和外部IP,我们可以将所谓的“故障转移IP” (WXYZ)转换为指向A或B的特定外部IP。这是从“外部”轻松完成。 作为后台:故障转移IP在/ etc / network / interfaces中configuration为新条目:

auto eth0:0 iface eth0:0 inet static address WXYZ netmask 255.255.255.224 

现在让我们假设WXYZ被dynamicconfiguration为使用硬件A.现在我从B调用'curl domain.com',它使用正确的故障转移IP WXYZ,但是以某种方式解决了错误的外部IP B(或本地主机?),而不是使用configuration的一个A:

 Trying WXYZ ... * connect to WXYZ port 443 failed: Connection refused * Failed to connect to domain.com port 443: Connection refused * Closing connection 0 curl: (7) Failed to connect to domain.com port 443: Connection refused 

当我启动本地nginx时,它可以成功地curl domain.com

我需要以某种方式在本地configurationDNS吗? 我怎样才能find关于DNS链的更多信息?

如果从服务器B尝试使用mtr,则只需打印domain.com

这与这个问题有关吗?

 The failover IP is WXYZ and is also the A record of domain.com The /etc/hosts file for both nodes serverA and serverB looks like: 127.0.0.1 localhost 127.0.1.1 luminarhost xxx serverA xxx serverB The /etc/network/interfaces of serverA ### Hetzner Online AG - installimage # Loopback device: auto lo iface lo inet loopback # device: eth0 auto eth0 iface eth0 inet static address xxx broadcast xxx netmask xxx gateway xxx # default route to access subnet up route add -net xxx netmask 255.255.255.224 gw xxx eth0 iface eth0 inet6 static address xxx netmask xxx gateway xxx # failover ip auto eth0:0 iface eth0:0 inet static address WXYZ netmask 255.255.255.224 and of serverB it is: ### Hetzner Online AG - installimage # Loopback device: auto lo iface lo inet loopback # device: eth0 auto eth0 iface eth0 inet static address xxx broadcast xxx netmask xxx gateway xxx # default route to access subnet up route add -net xxx netmask 255.255.255.192 gw xxx eth0 iface eth0 inet6 static address xxx netmask xxx gateway xxx # failover ip auto eth0:0 iface eth0:0 inet static address WXYZ netmask 255.255.255.224 

  • 按照承诺,这里是我的答案:

  • 充分披露:我不是为Hetzner工作,而是为过去和现在的曾经在Hetzner上安装硬件的不同公司工作。

  • 如果你的个人资料中的位置是正确的,你需要支持:我在同一个城市,可以提供一两个手。

  • 对于所有从未处理Hetzner的人来说:他们正在过滤networking访问等,这意味着,特别是关于他们的故障转移IP (在不同的机器上可用来提供某种高可用性的IP),他们正在发送stream量针对特定的IP到特定的MAC。

  • 如果想要改变目标(机器)的stream量,则必须向通过HTTPS提供的API发送POST请求。 然后,APIvalidation身份validation(这是一个用户名和一个相应的密码)和请求,如果有效,则将此新configuration传播到networking中的各个路由器。 这种技术与法国大型供应商OVH所使用的技术类似。

  • 警告:虽然人们使用这些IP为他们的机器/服务提供某种高可用性(如所写的),但是新的路由configuration的传播需要一些时间,有时高达约60秒。 这意味着,例如,如果使用某种自动故障转移function,那么如果当前stream量到达的机器停机一段时间,哪些人会注意到,stream量就会下降,因为机器已closures,直到新路由configuration就位的时间点。
  • 到目前为止的介绍,让我们看看你的具体问题:
  • 正如在评论/聊天中指出的那样,使用auto eth0:0将在networking启动后立即在接口eth0:0处设置您的故障转移IP,通常在启动时。 你有两台机器,具有相同的configuration,所以这导致了这种情况,相同的IP在两台不同的机器上是活动的(这不是一个不行,但是会导致你正在处理的情况)。 请注意:您使用的语法多次使用相同的接口,已被弃用 (但仍然有效)。 Debian wiki(这个链接)里面也描述了“新的方式”,这个链接只是将多个IP分配给一个接口。
  • 所以:你已经有两个机器同时在本地分配的IP。 curl在你的testing用例中执行以下操作:它将给定的域名parsing为一个IP,然后尝试在端口443连接到这个IP。因为这个IP在任何情况下都是在本地分配的,因此可以访问,到networking。 如果nginx (就像在你的testing用例中)在这个时候没有在本地运行,那么你只是连接被拒绝了,这是完全正确和有效的:“IP是本地的,所以让我们在那里发送stream量”。 它不会将数据包发送到某个路由器,路由器可能有这样的信息:“指向这个IP的数据stream应该到达这台机器”。
  • 现在…其实我不完全确定你在做什么。 你只想知道发生了什么? 如果是这样,我试图描述这一点。 你想find/实施一种方式,哪个“解决”这种情况? 如果以后,这里有一些想法:
  • 解决scheme1:从/etc/network/interfaces删除指令auto eth0:0 (但保留auto eth0:0的其余configuration)。 这样做, 不会将IP分配给机器。 这样做将是你的任务(脚本的一个任务),它做ifup eth0:0 (并且,也可以说是API,以确保stream量被路由到正确的机器)。
  • 解决scheme2,又称为“自动化所有的事情”:不要做手动故障转移,而是通过心跳(自动检查两台机器之间的健康状况)实现一个自动执行此操作的系统:存在多种解决scheme,例如虚拟路由器冗余协议和(完全公开:我个人最喜欢的,我使用这个工作多年来这样的任务): corosync和起搏器 ,这是在Linux下build立集群提供高可用性的事实标准。 (另外,看看这个 。)如果你想尝试以后的方式,Kumina的优秀人士几年前开发(并出版)了一个资源代理人,以准确地处理Hetzner的这种情况。 资源代理负责通过与API交谈来更新路由信息。
  • 要结束(现在):我不完全确定你在做什么。 我试图描述你现在面临的问题的根源。 此外,我试图提出一些可能的解决scheme的想法。 如果我没有得到你想做的事情,有些事情是不清楚的,或者你还有其他问题:请给予反馈,我很乐意帮助(或至less尝试)。
  • (另外:你能把你的configuration等移动到你的post中,把所有的东西放在一个地方,这个问题可能对未来的其他人有帮助吗?)