我需要更换运行繁忙网站的老化网络服务器.我启动并运行了新硬件,所有软件都已安装.我正在寻找一个解决方案,只剩下一个问题:
当我更改A记录时
DNS中的域名,需要一段时间
通过传播的变化
互联网由于DNS缓存.在那期间
一时间,一些用户会打新的
服务器,有些会打旧
一,导致数据不一致,因为现在有两个数据库.
我该如何切换所有人
即刻?我不运行DNS服务器,除了A和CNAME记录之外不能更改任何内容,但如果有帮助,我可以自己设置.
一夜之间我可能有一两个小时的停机时间.
谢谢,西蒙
编辑:谢谢你的所有答案.我接受了SmallClanger的答案,因为它是一个可行的解决方案,我正在推动Brian,因为他的回答给了我一个新想法:遵循SmallClanger的解决方案直到数据库迁移,然后用代理所有请求的HTTP代理替换旧的apache到新服务器.我将配置代理配置为通过IP地址寻址新服务器,并且它不涉及临时子域,该子域可能(尽管302代码)最终存在于某些书签目录,社交网络或浏览器缓存中.
解决方法
您遇到的根本问题是在切换期间保持数据库一致性.要实现零停机,您将别无选择,只能将两台服务器设置为主动/主动群集. (即使现在假设集群设置本身不会导致停机,这有点紧张.)
鉴于您无法更改TTL,最好的步骤是尽量减少停机时间:
>在第二个域名(例如:www2.example.com)上设置新网站,但也可以回答www.example.com.仅将www2的DNS指向新服务器.
>从双方编辑中复制并锁定站点文件.
>然后在广告维护窗口中,使用“关闭升级”通知替换实际站点.
>根据需要同步或复制数据库,然后启动新服务器.
>然后(并且只有这样)将您的DNS更改为www记录.
>使用简单的302重定向替换旧站点配置到www2.example.com
>在将旧服务器关闭之前,等待完整的TTL过期(然后稍微过期).
这将确保所有流量在DNS传播期间进入新站点,无论他们最初访问哪个服务器,但它假设您的站点能够同时从多个域名提供服务.
对于单服务器LAMP堆栈(如果这就是您所拥有的),那么这是您通向最小(但不是零)停机时间的途径.