【世博IT魔方】Nginx+Keepalived实现在线xx系统
作者:Andrew.Yu(抚琴煮酒)
职业:外企linux/unix系统工程师、项目实施工程师
安全防护采用四层硬件防火墙+七层应用层防护来实现,系统均安装64位的Centos5.4;软件层分负载均衡层、web层、数据库层来说明,整套系统均关闭iptables防火墙,只映射Keepalived虚拟的VIP在最前端的华塞USG5000的外网80端口上,先将整套系统的安全级别提高到金融级别,再考虑负载均衡及其它事宜。
华赛USGUSG5000可以有效抵御高强度的网络攻击,而且同时可以保证正常的网络应用。其基于多核处理器的硬件构架,依靠多线程处理设计提供了十分优异的数据处理能力,xx可以为Internet服务提供商、大型企业、园区网、数据中心等具备大流量网络带宽用户提供高性能的安全防御手段;尤其是USG5000所具备的超高的“每秒新建连接数”,不仅可以实现对多种并行的网络应用实现快速响应,而且在大流量网络攻击的情况下,仍然可以防止网络业务中断给用户带来的损失。有效地保障网络的运行,并且其独特的GTP安全防护功能可以为GPRS网络提供有效的安全防护;USG5000安全网关可以抵御大流量的DDoS攻击,为用户的业务系统提供DDoS攻击防护,依托优越的产品性能,能防范每秒数百万包以上的DDoS攻击,可支持对SYN FLOOD、UDP FLOOD、ICMP FLOOD、DNS FLOOD、CC等多种DDoS攻击种类的准确识别和控制,同时还能提供蠕虫病毒流量的识别和防范能力,结合华为赛门铁克专有ICA智能连接算法,保证在准确识别DDoS攻击流量的同时,不影响用户的正常访问,在复杂网络情况下实现真正的安全防护,是业界{lx1}的DDoS防护设备,这功能也是我们关注的重点
天泰WAF-T3-500-L安全网关防火墙具备全面的攻击防御系统,可保证系统不受网络蠕虫/病毒和应用专用漏洞的攻击,并且大大缓解来自网络层和应用层DoS/DDoS攻击的影响。网关的NetShield™引擎在网络层对数据进行细致检查,彻底阻断来自网络层的潜在攻击。网关的WebShield™引擎在应用层对Web请求进行检查,辨别恶意内容并阻止其进入应用服务器。
其安全性能包括:
常见网络攻击防护——保护网络基础设施不受常见的来自网络层的攻击
DoS/DDoS 保护——识别网络层和应用层的DoS/DDoS攻击,缓解攻击对应用基础设施的影响(这也是我们关注的重点)
入侵过滤——通过在恶意蠕虫和病毒进入应用服务器前进行识别并拒绝,保护应用服务器不受侵袭。
SSL加密——应用内容在传输过程中都受加密保护,通过转移服务器复杂的加/解密任务将应用处理能力发挥到了{jz}。该功能保护敏感应用内容的安全,使其摆脱被窃取及被滥用的潜在威胁。
此外,能实现SQL注入攻击防护,钓鱼攻击,跨站脚本攻击防护及常见系统溢出防护等,这个也是我们比较关注的
服务器我们一般采用的是HP DL380G6(用于web)和HP DL580G5(用于数据库);在项目实施中发现HP DL580G5的性能确实彪悍,如果成本充分,可考虑都上此服务器;然后根据用途不同,内存的数量侧重点也不同;跟以往的老型号不同,用的双四核至强E74403.2GB的CPU,内存一般上的64GB或146GB。
租用机房:我们一般选择的是电信机房,也可考虑北京的双线通机房;出口带宽建议100MB,这些没什么好说的。
负载均衡层用的软件我们采用的是Nginx源码,二台Nginx用Keepalived作高HA;其实也可以用LVS/Keepavlied来实现;但我们在项目实施发现,Nginx在正则处理及location分发上效果比LVS更好(有些功能LVS实现不了),而且稳定性并不亚于LVS;在我从事的某些金融项目里,按客户的要求,1+2架构就很稳定的运行,当然也要配合Nagios实现监控。
如何处理session的问题:
①Nginx负载均衡器采用ip_hash模块,让访问的客户端始终与后端某台web建议{yj}性连接关系;
②采用与PHPCMS类似的方法,将session写进后端的统一数据库里,例如MySQL;
页面同步
办法①可以采用rsync自动同步的办法。
办法②后端采用共用存储,读数据采用同一个存储设备。
这里说下要用的存储设备,我们用的比较多的是EMC CLARiiON CX4的FC磁盘阵列,很稳定,没发生过丢失数据库的问题;缺点是比较贵,会增加整个系统实施成本。
办法③在程序上实现动态的调取数据(如图片及文字)采用后端的{wy}文件服务器,后期可考虑采用moosefs分布式文件系统来减小压力.
Web集群方面用的是Nginx+PHP5(FastCGI),这里说下并发的问题;在设计项目方案时,我们考虑的单台web上的并发值为9000,在局域网环境中通过LoadRunner及Webbench反复测试,单台Nginx的web通过9000并发没有问题,3台web即是9000*3=27000并发;但系统正式上线时发现,由于非游戏类网站,根本达不到27000并发,这只是一个理论值;但本着高扩展性的原则,还是尽量在硬件和性能上对单台web进行调优;本系统是9000万张票,预计并发在2000左右,此系统架构xx能胜任并发情况;另Nginx负载均衡器在高并发下的稳定性是无用置疑的,有此项目经验的人都应该清楚。
数据库层:
考虑到数据库层的压力情况,我提出三种主案:
①采用最常用MySQL一主一从方案,在主上做好单机的优化,MySQL在压力和性能上的表现超过预期;
②如果压力还是过大,考虑采用oracle的双机RAC方案,我们用此成功解决了某用户100用户的OA系统数据库压力大的问题;
③可用用MySQL的一主多从方案,在web层上实行分布式memcache缓存,另还可考虑自己开发中间件技术,让真正的实现写功能的MySQL压力做小,从而达到数据库架构级调优的功能(这个也是游戏行业数据库采用减压的办法)。
此篇文章我参加了51cto.com的活动,有兴趣的帮我投下票,谢啦