最近单位的一个项目是使用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.jsp和 http://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