石浩波
摘要:Nginx作为一款开源高效的反向代理服务器在各大网站都得到了良好的应用,该文主要应用Nginx替换原有的F5设备实现负载均衡以及并通过Redis数据库实现会话保持,降低维护成本并且实现更加灵活的部署结构。
关键词:Nginx;负责均衡;Redis;会话保持
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2015)14-0239-02
Abstract: nginx as a source, the reverse proxy server in each big website have been good application. In this paper, we mainly use nginx replace original F5 equipment to achieve load balance and maintain the session by the redis database, reduce maintenance costs and achieve a more flexible deployment structure.
Key words: Nginx, equilibrium, Redis, session keeping
1 背景
笔者所在单位原本通过F5设备对2台Web服务器实现负载均衡,并向外提供服务,但近期由于F5设备故障,并进行了网络线路切换,根据现有原有的需求,F5设备仅仅使用了负载均衡和会话保持功能,并没有使用到高可用特性,而购置F5设备的成本及后续的维护成本等原因,因此开始了通过Nginx来替代F5设备的实践
2 实践过程
1)原有的网络结构如图1所示:通过F5设备将外网的访问均匀地分发到两台WEB服务器上,实现负载均衡,结构相对比较简单。
2)实现负载均衡:通过Nginx进行反向代理的方式进行的部署,其部署结构没有太大的变化,不需要对WEB服务器的地址进行任何的修改,对网络的改造足够小,如图2所示:
Nginx通过ip_hash策略对后端两台服务器进行负载均衡和会话保持,所谓的负载均衡即来自外部用户的访问根据会根据用户端的ip地址,分配到两台服务器的其中一台提供服务,只要用户的ip地址不变,则会有同一台服务器提供服务,这样用户的会话,会保持在同一台服务器上。其基本配置如下:
3)实现会话保持:实现负载均衡后,就是对WEB服务器上的业务系统实现会话保持,由于原有的业务系统是采用Java开发的Web业务系统,Web容器为Tomcat,通过Session实现用户状态的保存,但是在实践过程中发现通过Nginx的ip_hash策略无法很好地实现会话保持的目标,为了解决这个问题,解决方案有主要有以下几种:通过Tomcat的Session复制,通过Memcached或者Redis等内存数据库共享会话,笔者经过权衡后,决定采用Redis内存数据库共享会话的方式,为了保证隔离,这样部署需要额外的3台服务器,通过VMWare虚拟机实现。
新的部署架构如图3所示:
通过3台虚拟机部署了集群系统,设定了Nginx凡是对于企业后台的访问,全部转向到Tomcat1/Tomcat2两台服务器上,并且这两台服务器的会话通过另外一台Redis数据库进行存储,加快访问速度。
这样做的优势在于:采用的VMWare虚拟化系统来部署中间层,采用了轻量级的Tomcat,并部署在Linux之上,去掉无关软件和服务,使得系统更加精简,每台服务器的职责也更加精简;通过VMWare虚拟化系统可以进行快速部署,可以通过简单的复制操作对后台系统进行快速部署,在访问压力大的时候,可以多部署几台服务器,横向扩展;可以实现动静分离,即静态内容由原来的服务器处理,而动态内容由新的服务器处理,不仅分流也提高处理速度,大大提高网站的并发数。
3 配置过程
1)nginx系统配置
4 总结
从此次部署来看,不仅解决了网站原有F5设备置换需要购买的高成本以及后续的高维护费用,而且对原有网站的架构进行了扩充,使结构更加灵活。Nginx作为一款高性能的反向代理服务器其简单、高效也得到了验证。当然Nginx默认自带的负载均衡算法并没有F5的强大,如果要应用更好的负载均衡算法,则需要另外安装模块,在本文中默认的已经足够满足。