我已经搜索过 google、stackoverflow 和 serverfault,但我不太确定如何表达我在寻找的内容,如果这是重复的,请原谅(很可能是)!
我想知道是否可以执行以下操作:
我目前有两个账户,分别访问 Digital Ocean 的两个不同服务器 (droplets),一个账户用于开发工作,另一个账户实际用于托管网站。两个服务器都运行 LAMP 堆栈。
所以设置是这样的
开发服务器
帐户1
服务器1
IP(示例)1.1.1.1
网站服务器
帐户2
服务器2
IP(示例)2.2.2.2
网站服务器的 DNS 记录已正确设置(A 记录、CNAME 记录和名称服务器详细信息)。
我想要实现的是在我的开发服务器上托管一个 503 页面,这样当我关闭 apache 和/或整个 VM 进行维护/安装/更新时,任何尝试访问我们域的人都会自动重定向到 503 页面。
例如,有人尝试访问 www.domain.com,该地址将解析为 2.2.2.2,但是,如果 2.2.2.2 无法访问,则重定向到 1.1.1.1/503.html,或者如果必须使用子域,则重定向到 503.1.1.1.1。
因为服务器可能关闭,所以 htaccess 或 php 标头重定向不是一种选择。
我认为这可能可以使用第三台服务器来监视 2.2.2.2 的状态并在不可用时进行重定向,但如果可能的话,我不希望有额外的开销。
这可能吗?
我不想使用复制(无论如何现在还不想),因为该网站仍处于早期阶段。
答案1
如果没有额外的设备,您无法做到这一点。您需要有上游设备来处理请求并将其传递给相关服务器。当它检测到某些东西已经消失时,它会返回 503。
答案2
Iain 的回答大体上是正确的,使用上游代理(例如 nginx)来处理该问题也是明智的做法。但是,另一种解决方案是向服务器对添加虚拟 IP(VIP),请参阅下面的 URL。
http://krystianekb.blogspot.co.uk/2011/09/linux-configuring-single-cluster-vip.html
http://www.cyberciti.biz/faq/rhel-centos-fedora-keepalived-lvs-cluster-configuration/
当您拥有完全控制权时,可以在您自己的基础架构上实施此解决方案。由于云基础架构的限制,我不确定是否可以在您的云托管虚拟机上完成此操作。但是,Digital Oceans 支持人员可以告知您此方法是否可在他们的系统上使用。
主 Web 服务器将是主服务器,它会尽可能地获取 IP 地址。主服务器下线后,备份 Web 服务器将在获取 VIP 时提供 503 页面。
请注意,当主服务器启动时,该系统不会对 VIP 进行故障转移,但主服务器上的 Web 服务器未运行,但如果主服务器关闭或您手动对 VIP 进行故障转移,则 VIP 将会进行故障转移。
答案3
有一个无需其他设备的解决方案:在您的 DNS 区域中使用短 TTL,当 2.2.2.2 没有应答时,您可以迁移到另一个 IP(如 1.1.1.1)。
为了实现这一点,您需要一个服务(可以托管在 1.1.1.1 上)来执行以下操作:
- 检查 2.2.2.2 是否正在回答
- 如果不是,请将 DNS 更改为 1.1.1.1
- 如果是,请将 DNS 更改为 2.2.2.2
也就是说,在切换时,您的用户在 TTL 秒内将“完全没有答案”(甚至没有 503)。如果您计划的 2.2.2.2 停机时间很长,这是一个解决方案。如果您想立即切换,您将需要另一个设备(称为故障转移/负载平衡器)