背景信息(请原谅我在这里缺乏正确的行话):我将运行一对物理服务器,每个服务器都使用 Nginx 托管一些简单的站点。服务器在一个 colo 中,我将有一些专用 IP 地址(最多 16 个)。服务器通过交换机连接。他们的网络位于 Cisco 防火墙后面。
我的意图(纠正我,如果这是完全错误的)是给每台服务器一个虚拟 IP。然后,通过防火墙进入的流量将准备到虚拟 IP 地址之一(我的主服务器)。这样,如果主物理服务器出现问题,我可以将其关闭并在备份物理服务器中使用其 VIP(手动故障转移)。我的理解是,如果我将故障转移服务器的虚拟 IP 更改为主服务器使用的虚拟 IP,则对公共 IP 地址的请求将被路由到故障转移服务器。
然而,在理解网络方面我很困惑(你可能已经知道了)。
1) 如果 TCP 连接到达我网站的公共 IP,它会命中防火墙。然后,它将被定向到主服务器(基于 VIP)。这个对吗?
2) 如果我的服务器都位于同一个防火墙后面,如何在同一个 IP 地址访问它们(以便我可以将我的 A 记录指向单个 IP)?或者,这是不可能用防火墙来做的,只有路由器才能处理吗?
3) 我的用例是否更适合使用静态 IP 地址或 DHCP?两者都有哪些缺点?
4)我是否正确理解公共 IP 地址。我是否要为我的防火墙分配一个公共 IP 地址,然后将连接从那里转发回防火墙后面的单个 IP?或者,我的每台服务器是否都获得一个 IP 地址,而 TCP 连接是否只是通过我的防火墙并根据所连接的 IP 进入其中一台服务器?
你的理解是正确的。请注意,在网络术语中,虚拟 IP 本质上是您的路由器控制的公共 IP,您可以随时随地将其出租……
有两种类型的 IP 地址,公共 IP(您通常将其分配给路由器本身),然后是私有 IP,您在 VLAN 中拥有 100% 的控制权。在你的情况下,你想要获取所有公共 IP,将它们放在一个 VLAN 中,将它们全部分配给你的路由器(并让你的路由器通过静态 IP 路由租用它们),并确保路由器已设置对于 NAT 1:1 重定向(它可以采用公共 IP 并将其重定向到内部 IP 地址。这样,在您的服务器上,您可以将其分配给 10.0.0.101 并将备份服务器设置为 10.0.0.102 . 如果你的主服务器宕机了,你不需要切换任何公共IP地址,你需要在路由器端做的就是让你的公共IP指向你的另一个私有IP。
但是,还有其他方法可以做到这一点。如果您使用 Nginx 的上游后端功能 ( http://wiki.nginx.org/HttpUpstreamModule ) 之类的东西,您也可以在多个服务器之间实现 Web 服务器负载平衡(如果一个后端出现故障,Nginx 会知道这一点),但是如果代理您的请求的主要 Nginx Web 服务器出现故障,您还必须使用其他一些花哨的路由才能很好地进行故障转移。您可能想阅读https://stackoverflow.com/questions/10971298/load-balancing-with-nginx :)