最近单位的一个项目是使用Apache+jk+tomcat集群方式在运行,上线运行后,总是存在jk无法连接tomcat节点的情况(报错信息为:service failed, worker tomat1 is in local error state)没有找到合适的解决方案,所以最近研究了下Nginx和tomcat集群方面的配置,本文大是根据网上收集的资料整理,并在虚拟机环境下通过了测试的,现就主要的配置环节进行总结:
一、环境及用到的工具
    1、目标环境:虚拟机Windows server 2003(32位,192.168.1.128)
    2、工具:jdk7、tomcat-7、nginx-1.8、memcached-1.4.2
二、搭建步骤:
    1、安装jdk及配置环境变量等,具体的就不说了(自行百度或google)
    2、安装nginx-1.8,将nginx解压到E盘,如图:

     打开命令行(Win+r),cd到E:\nginx-1.8.1\目录,如图:

输入nginx,启动服务:

本人在实验时出现了上述错误,表示80端口已被占用,经排查为IIS所占用,因此关闭IIS即可。

关闭后再次运行nginx,启动nginx:

没有输入任何信息,表示已经启动成功,此时可通过物理机来访问192.168.1.128测试下,nginx是否启动成功,出现如下界面,则表示启动成功:

至此,nginx的安装介绍完毕。
    3、安装tomcat,本文采用的是解压版的tomcat(可根据需要替换成安装版的tomcat):
        (1)将tomcat解压到E:\tomcat7_cluster\目录下,并复制为两份,重命名后,如图:
        
        (2)将事先准备好的test.jsp文件放到E:\wwwroot\test\目录(该目录用于放置需要进行集群部署的应用程序)下,如图:


        (3)配置tomcat的server.xml文件, apache-tomcat-7.0.65_1的conf/server.xml配置如下:

E:\tomcat_cluster\apache-tomcat-7.0.65_1\conf\Catalina\localhost目录下新建一个xml文件,内容如下:

并将上述文件复制一份到 E:\tomcat_cluster\apache-tomcat-7.0.65_2\conf\Catalina\localhost的目录下。
      apache-tomcat-7.0.65_2的conf/server.xml配置如下:

        (4)分别启动两个tomcat,测试是否成功,如图所示,两个tomcat已经启动起来了:

此时分别访问 http://192.168.1.128:8081/test/test.jsphttp://192.168.1.128:8082/test/test.jsp,应该可以看到打印出来的session了


4、集成nginx和tomcat:
(1)打开 E:\nginx-1.8.1\conf\nginx.conf,进行如下配置:

(2)运行nginx -s reload重新加载配置文件,如图:

访问 http://192.168.1.128/test/test.jsp,如果显示如下界面:

则表示nginx与tomcat集成成功,刷新后,显示如下,session没有共享:

接下来需要安装配置memcaced用来实现tomcat之间的session共享。
5、Memcached的安装与配置:
(1)安装:
将memcached解压到 E:\memcached目录下,如图:

执行,如图所示命令将memcaced安装为系统服务:

出现如下所示服务,则表示安装成功:

在命令行输入regedit,打开注册表修改memcached的端口号等配置信息:

参数介绍

    -p 监听的端口 
    -l 连接的IP地址, 默认是本机 
   -d start 启动memcached服务 
   -d restart 重起memcached服务 
   -d stop|shutdown 关闭正在运行的memcached服务 
   -d install 安装memcached服务 
   -d uninstall 卸载memcached服务 
   -u 以的身份运行 (仅在以root运行的时候有效) 
   -m 最大内存使用,单位MB。默认64MB 
   -M 内存耗尽时返回错误,而不是删除项 
   -c 最大同时连接数,默认是1024 
   -f 块大小增长因子,默认是1.25 
   -n 最小分配空间,key+value+flags默认是48 
   -h 显示帮助

修改参数 ,windows下需要通过修改注册表信息进行设置,打开注册表,找  HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\memcached  在其中有一个“ImagePath”项,值为:  "E:\memcached\memcached.exe" -d runservice  在后面加上“-m 1024 -c 2048 -p 11211”。

修改后,如图:

然后启动memcached服务,如图:

表示已经启动成功。
(2)配置tomcat以实现session共享:
需要下载如下jar包,并拷贝到tomcat的lib目录下:
memcached-2.6.jar

javolution-5.4.3.1.jar

memcached-session-manager-1.5.1.jar

memcached-session-manager-tc7-1.5.1.jar

msm-javolution-serializer-1.5.1.jar

msm-kryo-serializer-1.5.1.jar

msm-xstream-serializer-1.5.1.jar

在tomcat的context.xml文件的<context>标签中加入如下内容:

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
    memcachedNodes="n1:localhost:11211"
    requestUriIgnorePattern=".*/.(png|gif|jpg|css|js)$"
    sessionBackupAsync="false"
    sessionBackupTimeout="100"
    transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"
    copyCollectionsForSerialization="false"/>
然后分别重启两个tomcat。
6、测试集群及session共享配置是否成功:
第一次访问 http://192.168.1.128/test/test.jsp 时的结果:

然后刷新浏览器:

由上可见,刷新浏览器后,sessionid并没有改变,改变的只是sessionid后面的tomcat1和tomcat2,为什么会显示这两个呢,这是在jvmRoute中设置的。如果我们把其中一个tomcat的server.xml文件中的jvmRoute修改为如下内容:

然后再重启该tomcat,再次访问 http://192.168.1.128/test/test.jsp,会得到不一样的结果:
如图:


测试其中一个tomcat宕机后的情形,关闭掉一个tomcat,然后再次访问 http://192.168.1.128/test/test.jsp
不断刷新浏览器,显示结果一直没变,如图:

将刚才关闭掉的tomcat再次启动起来,然后再次访问 http://192.168.1.128/test/test.jsp,并不断刷新浏览器:


表示集群中一个节点失败并恢复后,对sessionid没有影响,因为它已经被缓存到memcached中了。
至此,nginx+memcached+tomcat集群配置介绍完毕。
相关软件工具及配置文件下载地址为:http://download.csdn.net/detail/zhangyu_kenshin/9429982
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐