转:css
首先很是感谢
阿里云给咱们提供了一个如此省事的平台。
咱们公司是一家物流公司,主要提供运输和仓储的服务。咱们如今正在把咱们的系统往阿里云迁移。固然,还在迁移过程当中,因此还有不少是没办法如今说得太清楚。但鉴于现有估计用阿里云的公司或我的愈来愈多,确实没有一个在阿里云搭建基于ECS的Tomcat集群的教程。我这就给大伙献丑了。这是个入门教程,同时其中也存在问题,还望你们指正。 首先,咱们明确目标,作Tomcat集群的目的是为了提供更高的负载能力,把访问均摊到不一样的服务器上。为此咱们准备的配置清单是: SLB x 1 ECS x 2 OCS x 1 RDS x 1 ![]() 咱们系统使用的软件也是应用厂商提供,不像阿里的技术那么牛逼,因此其内部仍是使用了如Session等之类的标准技术。而咱们对于集群的定义就是能够保持Session,确保用户登陆后正常使用。 在阿里云或者是其余方式玩集群通常也都分为两种模式,一种是彻底集中SESSION,各个集群点保持一致;还有一种就是基于一次会话指定某一个集群中节点提供服务。这个可能没说太明白,那么请参考SLB的资料,SLB其中有个是否保存会话(这个就对应到咱们TOMCAT里面的配置模式是采用STICKY or NON-STICKY模式),本分享会说到两种模式,而且也会讨论关于咱们在使用中发现的问题(这不会是我司部署的最终版本,由于咱们天天都还在不断调整)。 首先,ECS要安装TOMCAT和JDK。这个很简单,网上不少教程。 我这就不介绍了。咱们用的是TOMCAT7 以及 JDK7。建议TOMCAT先下载到本身电脑,配置好了再上传到ECS。 Step.1 TOMCAT增长memcached支持的lib包 咱们须要memcached-session-manager,http://code.google.com/p/memcached-session-manager/。其中文档说得比较明确,参考其中去配置就好。 那么在本步骤中,咱们主要是下载一些lib,在上面连接中的文档中有给出。本身找下啦。把下载到的lib放到Tomcat/lib目录里面(注意每一个文件前缀的“msm-”这个原本是没有的,是我为了方便管理加的),有了这些包以后就能够配置TOMCAT链接到OCS啦: ![]() Step.2 TOMCAT同步Session到OCS 这个步骤就是具体配置了。前面说到有两种模式:STICKY or NON-STICKY。 STICKY:负载均衡会根据用户会话,每次都分配到同一个集群节点上。用户每次获取会话数据都是从TOMCAT里面取得,TOMCAT会备份一个SESSION到OCS。 这样能够保持获取SESSION的最高效。 NON-STICKY:负载均衡不会管用户会话,而是按每次链接分别分发的方式,会话都保持在OCS上,每次读写都在OCS上。因为会远程访问数据,因此效率会低一些,可是这种倒是最符合集群或集中缓存预期效果的。 关于链接到OCS的配置,都是在/Tomcat/conf/context.xml中编辑,在<Context>元素下增长下述的配置描述便可。 下面咱们分别说两种的配置(只能有一种模式,千万别写两个上去了): STICKY模式
NON-STICKY模式
其实配置是否是很简单呐,总之里面配置跟链接Memcached是同样的,因此我对阿里的这种设计很是之赞扬。 其中就注意一点,必定要有memcachedProtocol="binary",不然是用不了的,由于Tomcat memcached插件模式这个属性值是text,而阿里支持的是binary模式的数据,因此务必务必要注意。 Step.3 修改TOMCAT的JVM设置以及NIO(这个步骤跟OCS无关) 修改JVM设置在/Tomcat/bin/目录下,增长setenv.sh文件,写定要优化的配置。 我配置的以下,这个JVM参数有点问题,GC回收跟过山车同样。还须要继续改,因此不建议参考。若是有高人还望指点。ECS配置是双核/4G配置,用的CentOS 6.5 x64。
修改NIO设置在/Tomcat/conf/context.xml 注释掉原有的Connector=8080的定义,增长以下的配置定义,使用NIO方式
Step.4 建立一个检查SESSION的JSP 建立一个JSP文件到Tomcat/webapps/ROOT目录下
Step.5 上传你配置好的TOMCAT到ECS 上传后启动,正常这个时候你就看见你的TOMCAT了。http://yourserver:8080/session.jsp,若是你看见的是以下字样,说明你的TOMCAT链接OCS成功了。 “ This is (TOMCAT1), SESSION ID:CAC189E5ABA13FFE29FCB1697F80182B-OCS ” 若是你用的是SLB,两个ECS,而且使用的NON-STICKY模式,经过负载后你会看到内部的Server在变,可是SESSION不变。 接下来,说问题 使用PTS压测session.jsp,100用户,TOMCAT配置NON-STICKY模式下。此刻使用浏览器访问session.jsp会出现SESSION_ID每次看都不同的状况。没有执行压测的时候就正常的,也就是在大并发状况下OCS会出奇怪的问题么? 如今为了防止这种状况出现,咱们已经换成了STICKY模式。即经过SLB分发会话到同一个节点机器执行服务,OCS只是作一个SESSION备份,防止节点宕机,另外节点能够从新获取到继续提供服务。 就是如此了,还请OCS团队给个答复或者是建议。或者有高人能指点下,怎么弄才是最好的办法呢?
[ 此帖被Happy_Tian在2014-11-07 13:06从新编辑 ]
|
|||||
|