`
yunnick
  • 浏览: 393855 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

nginx负载均衡实现tomcat集群方案简要小结

阅读更多

 

 

 

点两部分:一、负载均衡二、tomcat集群

 

        所谓tomcat集群,就是可以向外提供并行服务的多台机器,任何一台服务器宕机,其它服务器可以替代它向外提供服务,而不影响用户访问。

        nginx是一个常用的反向代理服务,可自定义模块,实现请求转发及负载均衡(根具体采用策略有关)。为了tomcat集群的高可用性,还需要实现nginx的双机热备。

       ,如果仅是对外提供一个页面访问,不用区分单一用户(不区分每个访问session,不涉及用户权限,用户资料等内容),仅仅配置nginx负载均衡策略即可。

 nginx负载均衡策略主要分一下四种:

1)、轮询(默认)

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器宕机,能自动剔除。

2)、ip_hash 每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器。

3)、fair 按后端服务器的响应时间来分配请求,响应时间短的优先分配。

4)、url_hash 按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。

         ,如果涉及到用户session,做一些鉴权缓存、存放临时信息时,就必须做tomcat的session共享。

目前可参考到的session共享方式主要分为两种。

1)利用tomcat自带的组播机制,实现session复制。

对tomcat及应用的若干配置文件进行配置即可实现,网上有很多资料可参考。但这种方式些弊端,看过一些资料,不建议用session复制的方式。在实际使用过程中,也发现有存在session莫名失踪的现象。

2)利用第三方机制存储session。

比较常见的是tomcat集成memcached服务器来存储session。实际项目中,我们采用过利用redis实现session存储,redis高效的存取性能为高效的访问提供了保障,但是目前redis的集群功能似乎没有发布,如何解决redis的单点故障需要研究。

 

          结:是否实现session共享与nginx的负载策略有很大关系。比如采用轮询策略,就必须实现session共享,因为客户端会访问到每台服务器;而如果采用ip_hash策略,就可以不用考虑session共享的问题了,但是ip_hash有些缺陷使它不能随便使用(如多台pc使用同一个外网ip)。

最近发现一个nginx的粘连模块(类似session粘连),可以看做nginx的第5种均衡策略。它利用客户端cookie,对其写入一个route参数,每次访问可以根据route的值,固定的访问一台服务器,解决的session共享的问题。

 

               nginx粘连模块:http://code.google.com/p/nginx-sticky-module/

 参考:

                   http://www.oschina.net/question/12_621

0
9
分享到:
评论
3 楼 yunnick 2013-09-10  
gxz1989611 写道
PO主,请问你们tomcat集群session共享存放到redis的时候,用了什么插件呢?
我现在找到的这个https://github.com/jcoleman/tomcat-redis-session-manager貌似不支持tomcat集群。

我们用的是Redis主从复制,故障切换比较麻烦,后来替换成Couchbase了,这个比较好使。
2 楼 yunnick 2013-09-10  
gxz1989611 写道
PO主,请问你们tomcat集群session共享存放到redis的时候,用了什么插件呢?
我现在找到的这个https://github.com/jcoleman/tomcat-redis-session-manager貌似不支持tomcat集群。

我们做的比较简单,没使用插件。
就是用户请求的时候,要求在请求里加上SessionId(写到Cookie里或者加在URL后面)。
当然如果出于安全考虑,防止冒用SessionId,可以每次都检测用户的请求IP或者每次都修改用户的SessionId,确保一致即可(这也是网上看的)。
1 楼 gxz1989611 2013-09-05  
PO主,请问你们tomcat集群session共享存放到redis的时候,用了什么插件呢?
我现在找到的这个https://github.com/jcoleman/tomcat-redis-session-manager貌似不支持tomcat集群。

相关推荐

    Nginx+Tomact集群部署

    在深入了解Nginx+Tomcat集群部署之前,我们先简要回顾一下这两款软件的基本功能。 - **Nginx**:是一款高性能的HTTP服务器及反向代理服务器,同时也是邮件代理服务器。Nginx以其出色的稳定性、丰富的功能集、简单的...

    WEB系统中实现负载均衡

    ### WEB系统中实现负载均衡的关键知识点 #### 一、负载均衡的基本概念 负载均衡是一种用于在多台服务器之间分配网络流量的技术,目的是提高系统的可用性和响应速度,同时也能提升资源利用率。具体来说,负载均衡器...

    tomcat 的安装与 集群的设定

    当需要高可用性和负载均衡时,可以考虑使用Tomcat集群。集群配置主要包括以下步骤: 1. **安装多台Tomcat服务器**:在不同的服务器上安装相同版本的Tomcat,并确保每台服务器上的配置文件一致。 2. **设置负载...

    Nginx环境打架

    - 可以添加一个`upstream`定义负载均衡的后端服务器集群。 - 可以添加多个`server`块来定义不同的虚拟主机或服务。 ##### 2. 常用命令 - **检查配置文件**: `nginx -t` - **启动服务**: `service nginx start` - *...

    Datingapp

    使用Nginx等负载均衡器可以将流量分散到多个服务器,确保服务的高可用性。同时,应用可能部署在容器化环境中,如Docker和Kubernetes,以实现动态扩展和故障恢复。 8. **推送通知** "Datingapp"可能采用Firebase ...

    hbase配置内置的zookeeper

    <value>nginx,tomcat1,tomcat2 <name>hbase.zookeeper.property.clientPort <value>2181 ``` 这里有几个关键点需要注意: - `hbase.rootdir` 指定了 HBase 数据存储在 HDFS 上的位置。 - `hbase.master`...

Global site tag (gtag.js) - Google Analytics