部署架构

既然没有什么硬件是永不损坏的,我们是否可以用多份冗余的硬件来降低故障的概率?如果挨在一起的服务器被一把火烧掉的可能性太大,我们是否可以把它们分散在不同的集群?如果数据可能被破坏,是否要经常做些备份?… …

把各种故障因素都考虑一遍,我们就得出了一个大致的部署框架:

1、以集群方式提供服务

Web服务器、缓存服务器都是非常适合部署为集群的,单台服务器损坏不会影响整个网站的访问。数据库服务器稍难一些,但它们也提供了主从复制、读写分离的解决方案。

2、 将云服务器分布在不同的可用区(Zone)下

不同的可用区代表数据中心里的不同物理位置,同一可用区内的服务器可能同时遭遇网络设备、电力等故障,因此,把一个集群内的云服务器分散到不同的可用区甚至不同的数据中心(Region)是个明智的选择。

3、 为Web服务集群配置负载均衡与DNS轮询

多台Web服务器可以通过配置负载均衡或者DNS轮询提供对外服务。

相比DNS轮询,负载均衡方式会更加灵活,因为它对外屏蔽了服务器的真实IP,当负载均衡资源池内增加或减少服务器时,对客户是透明的。而DNS存在时延的问题,集群发生调整后,很有可能造成部分用户在很长一段时间内无法正常访问网站。

另外,负载均衡能够跟踪后端应用服务器的健康状态,自动排除有故障的节点,避免出现服务时断时续的问题。

对于特别大的应用,我们推荐使用负载均衡+DNS轮询的方式,只是这里的DNS轮询域名指向的是负载均衡的VIP。

4、 实现动态部署

为了应对经常性的业务推广和可能的DDOS网络攻击,实现系统与应用程序的一键部署很重要。系统管理员可以根据应用的当前状态(CPU、内存使用率、HTTP的响应时间等)作出判断,即时增加服务器,并且快速部署应用程序,顶住突增的业务流量。如果实现得更智能一些,可以在应用服务器内部部署一些监控程序,由主控程序判断当前整个集群的负载情况,调用ECS API自动增减服务节点。

用一台主控机去批量操作其它云服务器时,应该尽量地使用一些便捷工具,例如SSH密钥对,它实现了授权服务器间的免登录,使得集群管理更加简单。

5、定时备份很重要

前面说到,没有什么技术可以保证100%的数据安全,你的数据始终面临误删文件、病毒破坏、程序写错、硬件损坏等种种可能的风险。如果你的数据非常重要,请定期备份!在弹性计算平台上,这件事情相对简单,快照功能自动完成增量数据备份。然而,单个物理位置的存储始终会面临地震、火灾等灾难的威胁,如果你觉得还不够安全,或者有异地使用的需要,且能够承受异地备份带来的存储、带宽等成本,可以自行拷贝数据文件。弹性计算平台也正在考虑跨机房的容灾方案。

6、 将应用程序配置为自恢复的

单台服务器的硬件故障是常见现象,以现有的云计算技术能力,尚无法做到不影响云服务器的运行,但ECS可以快速检测到故障特征,并且将云服务器自动迁移到新的宿主机上。这里存在一个问题,虽然云服务器重新启动了,而且硬盘数据恢复到最后一刻的状态,但是原先正在运行的应用程序中止了。为了让你的服务中断时间尽量地缩短,避免人工的介入,强烈建议将应用程序及相关服务设置为开机自启动,这样,你就可以高枕无忧地睡大觉,不用半夜起来恢复应用,尽管只是几个点击或者命令操作。

7、加固系统

安全也是高可用的重要前提之一。放在IDC机房中的服务器时时面临各种恶意攻击,下图是我们偶然截取的一个攻击片段:


图4 端口扫描攻击

这台服务器在循环探测机房中每一台机器的1433端口,有经验的读者很快猜出来了,它是在试探SQLServer服务,一旦SQLServer被攻破,再利用SQLServer管理员的系统权限漏洞,马上就有一些机器沦为肉鸡。


相关内容