我们对目前的主机托管服务提供商不太满意,因此我们想换一家其他城市的其他公司。我们的业务是一所全球范围内可访问的在线学校(这意味着我们的应用程序需要 24x7 全天候可用,但最多 1-2 小时的停机时间是可以承受的)。世界各地的学院和大学都提供我们的课程,因此这些协议的一部分规定,如果他们要向我们付款,我们每个月的停机时间不得超过 X 个小时。
所以我有一个计划,但我想把它公开,看看是否有其他人看到我可能忽略的任何问题,或者如果你有一个更好的计划你可以建议。
我们的设置:Intel 模块化服务器、带有 jails 的 FreeBSD、apache、mysql、php。学生登录的域名类似于 portal.mydomain.com
我在想,我们可以在站点 B(新站点)上建立第二个服务器实例,并为其指定一个新域名(portal1.mydomain.com)。然后,我们可以强制所有来自 portal.mydomain.com 的流量重定向到 portal1.mydomain.com。此时,我们将对原始域名进行 DNS 更改,使其具有新的 IP 地址。然后,我们将给它 48 小时的时间让 DNS 更改生效。此时,我们只需将新实例上的 apache 更改为响应 portal.mydomain.com 而不是 portal1,然后一切照常。
该计划中是否存在我忽略的漏洞?有没有更好的方法?
答案1
为了实现这一点,您必须绝对确保您的应用程序不依赖于当前域名,并且将在 portal1.mydomain.com 下运行。根据
我过去的经验,遗憾的是,情况并非总是如此。
如果您能确定域名没有问题,您的计划听起来不错。
当您切换到新数据中心时,您显然需要同步 MySQL DB(您的计划中没有提到这一点)。
我会将 portal.mydomain.com DNS 记录的 TTL 设置为较低的值,这样它就不需要 48 小时才能传播。
如果您不能确定,我建议您这样做:
* 降低 portal.mydomain.com 的 TTL(5 分钟)
* 在新 DC 中设置一个新实例,同时监听 portal.mydomain.com
* 保持 MySQL DB 从旧 DC 同步到新 DC(复制)
* 停止旧 DC 中的 Apache
** 等待最后的 DB 更改复制
** 停止新 DB 上的复制,配置为独立
** 更改 portal.mydomain.com 的 DNS 记录以指向新实例的 IP
** 配置旧 Apache 实例以访问新 DC 中的 MySQL DB
* 等待,监视旧 Apache 上的请求,不再使用时关闭
* 再次将 TTL 设置为正常值
这还假设了一些事情,例如 DC 之间的 MySQL 连接是可能的。