一个大型网站 如果发展到一定的规模,访问量不断增多,服务器就要做一些措施
进行应对。。。最常见的就是 群集 负载均衡,多台服务器,有点分流的意思,减轻服务器负担
好,我现在用 CentOS5.4 Linux 和 apache2.2.11 tomcat6.0.18 这样的环境来实现一下。
再做这个试验之前,你的电脑必须 是
mod_jk 1.2.15 链接器 已经整合apache 和 tomcat 。。。
这个教程在之前已经做过了,我是在那个基础上实现 群集和负载均衡的。
http://www.17rumen.com/archives/124.html
如果你还不清楚如何 整合 apache 和 tomcat ,可以看回以前视频教程。
================================================
好了,不多说了, 马上开始。 通过 putty登陆上 centos
首先要明确是 一个 apache 带 2个 tomcat 来实现,所以要启动2个tomcat 服务器
先拷贝多一个 tomcat
#cp -r tomcat tomcat2
拷贝复制多一个 tomcat 还不行,因为 这样还不能同时运行,因为端口会发生冲突的。
下面修改 tomcat2 目录 conf 下的 server.xml 文件
把 8005 改为 9005
<Server port="9005" shutdown="SHUTDOWN">
把8080改为8088
<Connector port="8088" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
把8009改为9009
<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port="9009" protocol="AJP/1.3" redirectPort="8443" />
:wq 保存退出
===============================================
配置 mod_jk, 在 apache2/conf 下
vi mod_jk.conf
JkWorkersFile conf/workers.properties #加载集群中的workers
JkMountFile conf/uriworkermap.properties #加载workers的请求处理分配文件
JkLogFile logs/mod_jk.log #指定jk的日志输出文件
JkLogLevel warn #指定日志级别
和上面内容基本基本一样可以了, 我的是在以前的做修改,有些内容要删掉,有些添加了。
==============================
然后就是 workers.properties 文件的配置了。
把以前全部删掉,然后添加下面的上去。
worker.list=controller, status
worker.s1.port=8009
worker.s1.host=localhost
worker.s1.type=ajp13
worker.s1.lbfactor=1
worker.s2.port=9009
worker.s2.host=localhost
worker.s2.type=ajp13
worker.s2.lbfactor=1
worker.controller.type=lb
worker.retries=3
worker.controller.balanced_workers=s1,s2
worker.controller.sticky_session=0
worker.status.type=status
================================
再新建一个文件:uriworkermap.properties,文件内容如下:
/*=controller
/jkstatus=status
!/*.gif=controller
!/*.jpg=controller
!/*.png=controller
!/*.css=controller
!/*.js=controller
!/*.htm=controller
!/*.html=controller
============================================
再修改tomcat配置:这里两个tomcat都要配置。
第一个 tomcat server.xml文件,
<Engine name="Catalina" defaultHost="localhost" jvmRoute="s1">
第二个 tomcat2 server.xml文件,
<Engine name="Catalina" defaultHost="localhost" jvmRoute="s2">
其实就是 加入 jvmRoute
========================================
好了 现在就要测试时候了, 关闭 tomcat 和 apache
因为我一直运行着的。
下面启动2个tomcat 服务器先
[root@localhost conf]# /usr/local/tomcat/bin/startup.sh
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/java/jdk1.7.0
[root@localhost conf]# /usr/local/tomcat2/bin/startup.sh
Using CATALINA_BASE: /usr/local/tomcat2
Using CATALINA_HOME: /usr/local/tomcat2
Using CATALINA_TMPDIR: /usr/local/tomcat2/temp
Using JRE_HOME: /usr/java/jdk1.7.0
没有提示任何错误, 再查看一下端口情况
tcp 0 0 ::ffff:127.0.0.1:8005 :::* LISTEN
tcp 0 0 :::8009 :::* LISTEN
tcp 0 0 ::ffff:127.0.0.1:9005 :::* LISTEN
tcp 0 0 :::8080 :::* LISTEN
tcp 0 0 :::9009 :::* LISTEN
tcp 0 0 :::8088 :::* LISTEN
端口没有发生冲突, 都是按照我们修改的端口正常运行。
---------------------
再启动一下 apache2 了
[root@localhost conf]# /usr/local/apache2/bin/apachectl start
看到 80 端口也正常打开了。
========================
写一个 jsp 来进行测试
<%
out.println( "Hello, www.17rumen.com" );
System.out.println( "========== test ========" );
%>
很简单的测试页面, 页面正常打开会显示 Hello, www.17rumen.com
而后台 tomcat 会显示 ========== test ========
然后你再刷新的话 就会 tomcat2 显示, 也就是 tomcat 和 tomcat2 会轮流显示的。
实现负载均衡
[root@localhost logs]# vi /usr/local/tomcat/logs/catalina.out
看到 tomcat 后台显示出来了,
再刷新 页面 。。。
[root@localhost logs]# vi /usr/local/tomcat2/logs/catalina.out
这次 tomcat2 后台也显示出来一条 ========== test ========
为了验证 这是 tomcat 和 tomcat2 轮流执行 访问 页面的,
再看看 vi /usr/local/tomcat/logs/catalina.out
tomcat 有没有重复显示,没错,tomcat 还是只显示一条 ========== test ========
说明 第二次 访问页面 ,apache2 已经把jsp页面交给 tomcat2 处理了。
好了, 负载均衡实现成功, 演示就到这里。
11月 24th, 2009 at 19:31:40 #admin
有些朋友说到 session 复制的问题。。。
我不知道复制和共享有什么区别, 呵呵, 我刚入门,
但是配置文件 其中有一个代码是这样的
#设置用于负载均衡的server的session可否共享(重要,缓存共享)
worker.controller.sticky_session=1
#worker.controller.sticky_session_force=1
worker.status.type=status
这里是可以设置 session 共享的,我以后会写一个jsp去验证。
如果有朋友知道 session 复制的话,可以交流一下。谢谢
[回复]