问题描述
有两台linux服务器,准备部署Nginx+Jboss高可用集群,准备在服务器1上安装Nginx和多个Jboss实例,服务器2上也是安装Nginx和多个Jboss实例,Nginx负责静态文件处理和前端调度,静态文件存储于两台服务器可共同访问的存储上。俩个Nginx中只有一个处于工作状态,所有Jboss实例均处于工作状态。实现效果:1、Jboss集群中的实例失效后,前端调度的Nginx负责把请求分发到其他Jboss实例,失效Jboss实例上的session转移到其他实例。2、其中一个Nginx宕掉后,另外一个Nginx能够接替工作,并实现session复制。 问题:效果1个人感觉应该是没有问题的,效果2不知道能否实现,如果能,还请指教如何实现。
解决方案
2、其中一个Nginx宕掉后,另外一个Nginx能够接替工作,并实现session复制。http://www.linuxidc.com/Linux/2012-06/63233.htmhttp://song49.blog.51cto.com/4480450/901459http://www.iteye.com/topic/676347
解决方案二:
1、Jboss集群中的实例失效后,前端调度的Nginx负责把请求分发到其他Jboss实例,失效Jboss实例上的session转移到其他实例.这个不存在问题,不管是nginx或者是apache,都有相应的心跳检测模块,能够自动检测server实例的状态,如果server故障,会自动从server列表中去除,server重启正常运行之后,又会自动添加到server列表中。2、其中一个Nginx宕掉后,另外一个Nginx能够接替工作,并实现session复制Nginx主从模式解决的就是自动切换功能。session复制方面,一般有两种机制1)基于中间件容器。我接触过的weblogic、jboss都支持这种方式。不过节点过多,对性能影响比较大。这种机制,其实就是在server之间互相复制session。2)基于分布式缓存。比较常用的像memcached。这种实现方式,就是把session存储到分布式缓存中,优点是性能比1方式要好,不是互相复制。还有个方式(本人不推荐),使用nginx的Session sticky:http://itindex.net/blog/2009/02/12/1234429191753.html要让session复制,有个前提,所有放到session中的数据(如User对象、以及其它一些标识对象)必须实现序列化接口。
解决方案三:
单台服务器64g内存,静态图片多也能撑得住啊,不过还是要通过压力测试测试一下,看看能撑到多少的并发。如你所说,如果ngnix的机器宕掉了,怎么办?可以做双机热备,实时切换。如果一台宕机了,另一台切换过来就行了。但是需要两台设备。目前双机热备还是主流的。
解决方案四:
session复制怕是有困难,你可以采用其他方式实现session的共享,比如memcache,jboss挂掉后,其中的session信息并不在jboss中保存,其他jboss仍然可以从memcahe中获取session信息,你可以参考一下nginx+tomcat+memcache的方案:http://yunnick.iteye.com/blog/1838031