预计阅读本页时间:-
7.4 Linux集群的项目案例分享
7.4.1 案例分享一:用Nginx+Keepalived实现在线票务系统
这是一套以前实施过的在线订票系统,防火墙、交换机、服务器均置于电信机房的同一机柜中,服务器的带宽为40MB,项目拓扑图如图7-6所示。
广告:个人专属 VPN,独立 IP,无限流量,多机房切换,还可以屏蔽广告和恶意软件,每月最低仅 5 美元
图7-6 在线订票系统网络拓扑图
1.整套系统的安全考虑
因为牵涉到信用卡和银行卡在线支付的问题,所以系统的安全性就需要尤为重视了。在项目实施的过程中,在安全防护方面,笔者公司是采用硬件防火墙加上应用层防火墙双层防护来实现的,系统均安装了CentOS 5.4 x86_64;软件层分为负载均衡层、Web层、数据库层,整套系统均关闭了iptables防火墙,只映射Keepalived虚拟的VIP在最前端的华赛USG5000的外网80端口上,先将整套系统的安全级别提高到金融安全级别,再考虑负载均衡及其他事宜。另外,网络工程师都应该清楚,防火墙有三种工作模式——路由、透明和混合模式,在这里,华赛USG5000防火墙用的是路由模式,而天泰防火墙用的则是透明模式。
下面简单介绍下这两种防火墙。
华赛USG5000可以有效抵御高强度的网络攻击,同时还可以保证正常的网络应用。其基于多核处理器的硬件构架,依靠多线程处理设计提供了十分优异的数据处理能力,完全可以为Internet服务提供商、大型企业、园区网、数据中心等具备大流量网络带宽的用户提供高性能的安全防御手段。尤其是USG5000所具备的超高的“每秒新建连接数”,不仅可以对多种并行的网络应用实现快速响应,而且在大流量网络攻击的情况下,仍然可以防止网络业务中断,避免给用户带来损失。
USG5000能有效地保障网络的正常运行,并且其独特的GTP安全防护功能可以为GPRS网络提供有效的安全防护。USG5000安全网关可以抵御大流量的DDoS攻击,为用户的业务系统提供DDoS攻击防护,依靠其优越的产品性能,能防范每秒数百万包以上的DDoS攻击,可准确识别并控制SYN FLOOD、UDP FLOOD、ICMP FLOOD、DNS FLOOD、CC等多种DDoS攻击,同时还能提供蠕虫病毒流量的识别和防范功能,结合华为赛门铁克专有的ICA智能连接算法,保证在准确识别DDoS攻击流量的同时,不影响用户的正常访问,在复杂的网络情况下实现真正的安全防护,是业界领先的DDoS防护设备,上述功能也是我们关注的重点。
而天泰WAF-T3-500-L安全网关防火墙则具备全面的攻击防御系统,可保证系统不受网络蠕虫/病毒和应用专用漏洞的攻击,并且大大缓解了来自网络层和应用层DoS/DDoS攻击的影响。网关的NetShield引擎在网络层会对数据进行细致检查,彻底阻断来自网络层的潜在攻击,并在应用层会对Web请求进行检查,辨别恶意内容并阻止其进入应用服务器。
WAF-T3-500-L安全性能如下。
·常见网络攻击防护:保护网络基础设施不受常见的、来自网络层的恶意攻击的影响。
·DoS/DDoS保护:识别网络层和应用层的DoS/DDoS攻击,缓解攻击对应用基础设施的影响(这也是我们关注的重点)。
·入侵过滤:通过在恶意蠕虫和病毒进入应用服务器之前进行识别并拒绝其进入,保护应用服务器不受侵袭。
·SSL加密:应用内容在传输过程中都会受到加密保护,通过转移服务器复杂的加/解密任务将应用处理能力发挥到极致。该功能可保护敏感应用内容的安全,使其摆脱被窃取及被滥用的潜在威胁。
此外,能实现SQL注入攻击、钓鱼攻击、跨站脚本攻击的防护,以及常见的系统溢出的防护等,这也是我们比较关注的内容。
关于安全证书的配置,笔者公司购买了Geo Trust的商业证书,它是支持多域名的HTTPS的,防止以后域名有rewrite跳转的需求,价格自然也不菲了。另外,我们还购买了Mcafee的网站扫描服务,这一服务是针对代码层面安全的。
2.硬件方面的投入
我们一般采用的服务器是HP DL380G6(用于后面的Web集群)和HP DL580G5(用于MySQL数据库)。在项目实施过程中我们发现HP DL580G5的性能确实优越,如果成本充足,可考虑采用此服务器作为应用服务器。它跟以往的老型号不同,用的是双四核至强E74403.2G的CPU,内存一般是64GB或146GB,这可以根据项目成本来权衡。在租用机房时,我们一般选择的是电信机房,也可以考虑北京双线通机房;出口带宽建议为40MB。
3.负载均衡层
在负载均衡层,我们采用的软件是Nginx 0.8.15源码(当时最新最稳定的版本),两台Nginx负载均衡用Keepalived作高HA。其实也可以用LVS/Keepavlied来实现,但我们在项目实施过程中发现,Nginx在正则处理及分发上效果比LVS更好(有些功能LVS实现不了),而且稳定性也不错。在已上线的金融资讯类网站的项目里,笔者做的是1+2的架构(按客户的要求),已经稳定运行好几年了,当然也要配合Cacti+Nagios进行实时监控。
那么如何处理Session的问题呢?有如下两种方案。
·Nginx负载均衡器采用ip_hash算法机制,让访问的客户端始终与后端的某台Web服务器建立固定的连接关系。
·采用与PHPCMS类似的方法,将Session写进后端的统一数据库里,例如MySQL数据库。
前期我们采用的是第二种方案,后来发现数据库的压力会因此而增大,所以采取了前一种会话保持的方法。
4.Web层
页面同步的办法如下所示:
·不同的Web服务器之间,代码的同步可以采用rsync+inotify的办法,图片建议用独立的存储。
·后端采用共用存储,读数据采用同一个存储设备。这里说一下要用到的存储设备,我们用得比较多的是EMC CLARiiON CX4的FC磁盘阵列,它很稳定,没发生过丢失数据库的问题;缺点是比较贵,会增加整个系统的实施成本。
·在PHP程序上实现动态地中调取数据,不在Web服务器中调取而直接采用后端的文件服务器或存储。
前期笔者公司用的是单NFS方案,后期采用的是DRBD+Heartbeat+NFS方案(客户最后要求要上存储,我们就上了EMC CLARiiON CX4),其稳定性还是很不错的。
个人觉得这几种方案里性价比最高的当属rsync+inotify了。
此外,Web集群方面用的是Nginx+PHP5(FastCGI),这里说一下并发的问题。在设计项目方案时,我们考虑单台Web服务器上的并发值为3000,在局域网环境中(要考虑网络环境的影响)通过LoadRunner反复测试,单台Nginx的Web服务器通过3000的并发是没有问题的,3台Web机器就是3000×3并发。但系统正式上线时会发现,在非游戏类的网站上根本达不到9000并发,这只是一个理论值。本着高扩展性的原则,我们还是尽量在硬件和性能上对单台Web服务器进行了调优。我们要设计的这个票务系统是9000万张票,预计并发在2000左右,此系统架构完全能胜任此并发情况。另外,Nginx作为负载均衡器/代理服务器在高并发下的稳定性是毋庸置疑的,有相关项目经验的人都应该清楚这点。
5.数据库层
考虑到数据库层的压力情况,这里提出四种设计方案:
·采用最常用的MySQL一主一从方案,在主MySQL数据库上做好单机数据库的优化。
·采用MySQL的一主多从、读写分离方案,另还可以考虑自己开发中间件技术,让真正实现写功能的MySQL压力降低,从而达到数据库架构级调优的功能。
·可以做MySQL数据库的垂直切分,将压力过大的MySQL数据库根据业务分成几个小数据库,以减轻压力。
·如果读写压力还是过大,考虑采用Oracle数据库的RAC方案,我们曾用此方案成功解决了某企业100万用户的OA在线系统数据库压力大的问题,当然预算成本也大大增加了。
项目实施时,我们用的是MySQL一主一从方案,项目上线后发现事实上数据库的压力并没有想象中的那么大。
目前整套系统已在线上稳定运行,并且在高并发时间段也没有发生任何问题。笔者通过设计这套网站架构(包括防火墙的型号)整理出了一个框架,并已形成工作文档,可用于公司其他项目的实施方案中。