一、负载均衡
Nginx是一个常用的【反向代理服务】,可以自定义模块,实现【请求转发】以及【负载均衡】(根具体采用策略有关)。
为了tomcat集群的【高可用性】,还需要实现nginx的【双机热备】。
1. 如果仅是对外提供一个【页面访问】,不用区分【单一用户】(不区分每个访问session,不涉及用户权限,用户资料等内容),仅仅配置【nginx负载均衡策略】即可。
Nginx负载均衡策略主要分以下4种:
1)轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器宕机,能自动剔除。
2)ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器。
3) fair
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
4) url_hash
按url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
2. 如果涉及到用户session,做一些鉴权缓存、存放临时信息时,就必须做tomcat的session共享。
目前可参考的session共享方式主要分为2种。
1)利用tomcat自带的【组播机制】,实现session复制。
对tomcat及应用的若干配置文件进行配置即可实现,但这种方式些弊端,不建议用session复制的方式。
在实际使用过程中,也发现有存在session莫名失踪的现象。
2)利用第三方机制存储session
比较常见的是tomcat集成memcached服务器来存储session。
在实际项目中,采用redis实现session存储,redis高效的存取性能为高效的访问提供了保障。
小结:
是否实现session共享与nginx的负载策略有很大关系。
比如:
采用轮训策略,就必须实现session共享,因为客户端会访问到每台服务器;
如果采用ip_hash策略,就可以不用考虑session共享问题了;
但是ip_hash有些缺陷使它不能随便使用(如多台pc使用同一个外网ip)。
最近发现一个Nginx的粘连模块(类似session粘连),可以看做nginx的第5种均衡策略。
它利用客户端cookie,对其写入一个route参数,每次访问可以根据route的值,固定的访问一台服务器,解决的session共享的问 题。
二、tomcat集群
所谓的tomcat集群,就是可以向外提供【并行服务】的多台机器,任何一台服务器宕机,其他服务器可以替代它向外提供服务,而不影响用户访问。