除了要考虑机房内的各个组件,也要考虑机房自身的高可用问题。使用单机房架构搭建互联网应用后台,虽然接入层、业务服务层、存储层均具备高可用架构,但由于机房是单点,所以还是避免不了机房故障会造成整个应用无法访问的问题。可能造成机房级别故障的情况有人为破坏、自然灾害等,比如断电、火灾、机房核心交换机故障、计算机病毒等。
种种不可控因素导致的机房故障,通常会造成整个应用后台不可用,这对于大部分公司来说都难以接受。当应用的用户量级已经较为可观时,解决机房单点问题便成为工程师迫在眉睫的工作。
解决机房单点问题最简单的方案是建设主备机房:
- 在主机房所在的城市再建设一个备机房,整个备机房的内部完全复制主机房架构,在正常情况下仅主机房工作。
- 在存储层,备机房数据库被部署为主机房数据库的从库,主机房与备机房通过专线做存储层数据复制。
专线是一种特殊网线,就是为某个机构拉一条独立的专用网线,也就是建立一个独立的局域网,让用户的数据传输变得可靠、可信。专线的优点是安全性好,网络通信质量高;不过,专线价格相对较高,而且需要专业人员管理。专线被广泛应用于军事、银行等场景。
**专线是主备机房数据复制的核心通道。**为了保证这条通道的可用性,我们可以在主备机房之间铺设多条专线,这样可以规避如道路施工挖断专线等意外造成专线断连的问题。
如图1-57所示,在这种架构下,备机房拥有与主机房相对一致的数据,当主机房出现故障时,备机房经过如下简单操作就可以代替主机房对外提供服务。
- 将备机房存储层的所有从库都提升为主库。
- 修改DNS解析地址指向备机房,逐渐接入用户请求。
这种在同一城市部署的主备机房架构也被称为“同城灾备”,其主要优点是架构搭建简单,备机房的搭建照搬主机房即可;缺点是实用价值不高,其主要问题如下。
- 备机房大部分时间处于空闲状态,造成大量资源浪费。机房的建设与运维成本极其昂贵,常年供养一个空闲机房会让公司管理者颇有微词。
- 可用性存疑,这是最核心的问题。虽然理论上备机房能够在主机房出现故障时接替其工作,但是它毕竟没有担任主机房的实战经验,我们无法确认它真的能在关键时候起作用(根据笔者的实际经验,需要备机房挂帅的时候它总是掉链子)。这就好比医院的一场手术,没有谁会放心让一个没有实战经验的实习生直接当主刀医生。
总结
如何解决机房单点问题?
- 最简单的方案是建设主备机房。
如何建设主备机房?
- 在主机房所在的城市再建设一个备机房,整个备机房的内部完全复制主机房架构,在正常情况下仅主机房工作。
- 在存储层,备机房数据库被部署为主机房数据库的从库,主机房与备机房通过专线做存储层数据复制。
同城灾备的优势?
- 架构搭建简单,备机房的搭建照搬主机房即可。
同城灾备的缺点?
- 备机房大部分时间处于空闲状态,造成大量资源浪费。机房的建设与运维成本极其昂贵,常年供养一个空闲机房会让公司管理者颇有微词。
- 可用性存疑,这是最核心的问题。虽然理论上备机房能够在主机房出现故障时接替其工作,但是它毕竟没有担任主机房的实战经验,我们无法确认它真的能在关键时候起作用(根据笔者的实际经验,需要备机房挂帅的时候它总是掉链子)。这就好比医院的一场手术,没有谁会放心让一个没有实战经验的实习生直接当主刀医生。