小王在杭州做在线教育网站,学员大多在华东。最早他把网站放在一台华东节点的虚拟云服务器上。一个周五晚上,这个机房的网络出故障,网站断了大约两个小时,恰好是学生上课的高峰。事后他核算了一下,退费和投诉处理的花费,比多买一台服务器贵得多。

业务只放在一个地方,风险也只集中在这一个地方。虚拟云服务器在两个地方部署后,其中一处出问题,另一处可以接手。下面讲具体怎么做,以及哪些环节容易出错。
为什么要选两个地点
单点的风险主要有三类:机房断电或网络中断、区域性的服务异常、人为误操作。两个地点能应对前两类。第三类要靠备份和权限管理,和地点数量关系不大,光多开一台机器解决不了。
两个地点还可能提高访问速度。如果用户一半在华东、一半在华南,服务器分别放在两地,用户会连到较近的节点,页面打开一般更快。
三种常见的部署方式
主备模式
一台服务器承接全部流量,另一台平时只同步数据,不接收用户请求。主节点故障后,通过DNS切换或负载均衡器把流量转到备用节点。成本较低,但备用机大部分时间闲着。切换本身也会有几分钟到十几分钟的中断,时长取决于健康检查的频率和DNS生效的速度。
双活模式
两个地点同时接收流量,用户按地域或网络延迟分到不同节点。可用性最高,对数据一致性的要求也最高。如果两边同时写入同一批订单,就必须设计冲突处理方案,否则同一笔订单可能在两边各记一次。
读写分离模式
主地点负责写入,另一地点负责读取和分发静态内容。资讯站和内容站常用这种方式。成本居中,实现比双活简单,适合读多写少的业务。
一个完整的案例
小王最后选了主备模式,主节点在华东,备用节点在华北。下面的费用是示意,实际价格以云厂商报价为准。他的做法大致是以下五步。
- 两台服务器使用相同的系统镜像,部署脚本放在代码仓库里。手工配置容易让两台机器出现细微差别,切换后才暴露,用脚本可以避免。
- 数据库每五分钟做一次增量备份,同步到备用地点的存储。这意味着切换时,最多会丢失最近五分钟的数据。
- 用户上传的文件放在对象存储里,两地各保留一份副本。
- 域名解析开启健康检查。主节点连续三次检测失败后,解析自动指向备用节点。解析记录的TTL设为60秒,让切换尽快生效。
- 每个月做一次切换演练:关掉主节点,记录从故障发生到服务恢复实际用了多久。实测出来的数字,比估算靠谱。
上线三个月后,主节点遇到一次网络抖动。切换在约4分钟内完成,多数学员没有察觉。月成本从300元涨到约600元,小王觉得这笔钱花得值。
容易被忽视的问题
- 数据丢失范围:备份有时间间隔,切换时最近几分钟的数据可能缺失。上线前先和业务方确认,能接受丢多少数据。
- 演练频率:没演练过的备份方案,真出事时往往不能正常工作。至少每月走一遍切换流程,演练后检查数据是否完整。
- 密钥与配置:两台服务器的密钥和环境变量要分开管理,不能明文写进脚本。
- 网络配置:两地的防火墙规则和带宽设置要保持一致。否则切换后部分功能可能突然失效,而且很难第一时间查清原因。
- 备用节点费用:备用节点即使不接收流量,也按资源计费。可以先选较小规格,切换时再升配,但要提前测一下升配需要多长时间。
如何判断你是否需要两个地点
可以先问自己三个问题:
- 业务中断一小时,造成的损失是否超过一年的额外服务器费用?
- 用户是否分布在距离较远的地区?
- 团队是否有能力维护两套环境?
三个问题里有两个回答“是”,通常值得部署两个地点。如果只是个人博客,一台服务器加定期备份就够用了,没必要为此增加复杂度。
虚拟云服务器在两个地方部署,最直接的好处是单点故障的影响变小,其次是部分用户的访问速度可能变快。主备模式最容易落地。切换能不能用,要看有没有演练过;能丢多少数据,要在事故发生前就定好。