1、Apache Http Server 与与 Tomcat 实现负载均衡和集群实现负载均衡和集群 Apache Http Server 与 Tomcat 实现负载均衡和集群 一、分布式实现原理 1 二、负载均衡 2 1.准备软件 2 2.安装 mod_jk 连接模块 3 3.修改 mod_jk.conf 文件 3 4.修改 workers.properties 文件 4 5.修改 tomcat 配置文件 server.xml 4 6.编写一个测试页面 teat1.jsp 5 7.启动服务器并进行测试 5 三、集群 6 1.tomcat 配置 6 2.添加 test.jsp 页面 7 3.Sess
2、ion 复制测试 9 文档跟踪说明:日期 版本 操作者 备注 2011-06-22 V0.5 Nicholas 初稿 一、分布式实现原理一、分布式实现原理 如上图所示,主要通过 Apache-Server作为中转服务器,实现多个 tomcat 服务器之间的分布式处理,用户直接请求 Apache-Server,然后 Apache-Server会将请求分发到具体的 tomcat-server,之后 tomcat-server响应客户请求并返回结果到 Apache-Server,最后 Apache-Server返回结果给用户 二、负载均衡二、负载均衡 文件说明:mod_jk.conf 主要定义 mo
3、d_jk 模块的位置以及 mod_jk 模块的连接日志设置,还有定义worker.properties 文件的位置。worker.properties 定义 worker的参数,主要是连接 tomcat 主机的地址和端口信息。如果 Tomcat 与apache不在同一台机器上,或者需要做多台机器上 tomcat 的负载均衡只需要更改workers.properties 文件中的相应定义即可。APACHE_HOME为你的安装目录 环境说明:主要使用了一个 Apache Server 和两个 Tomcat,在同一台电脑上进行测试。1.准备软件准备软件 Jdk1.6 下载地址:http:/ tomc
4、at-6.0.29 下载地址:http:/jakarta.apache.org apache_2.2.4-win32-x86-no_ssl.msi 下载地址:http:/httpd.apache.org/download.cgi mod_jk-1.2.31-httpd-2.0.52.so(主要作用是建立 Apache Server与 Tomcat 之间的连接)下载地址:http:/www.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/说明:apache-server 安装完成后,可以在浏览器中输入 http:/localhost/来测
5、试,如果出现”It works!”则表示安装成功。2.安装安装 mod_jk连接模块连接模块 安装好 Jdk、tomcat、apache后,加入 mod_jk 连接模块,把 mod_jk-1.2.31-httpd-2.2.3.so 文件拷贝到APACHE_HOMEmodules 下,把 jk模块的配置放到单独的文件中来,在APACHE_HOMEconf目录新建 mod_jk.conf、workers.properties 文件。在 httpd.conf最后加上:#JK module settings Include conf/mod_jk.conf 说明:以上表示将 mod_jk.conf配置
6、文件包含进来 3.修改修改 mod_jk.conf 文件文件 为了保持 httpd.conf 文件的简洁,把 jk 模块的配置放到单独的文件中来。在 mod_jk.conf文件中添加以下内容:#Load mod_jk2 module LoadModule jk_module modules/mod_jk-1.2.31-httpd-2.2.3.so#Where to find workers.properties(引用 workers 配置文件)JkWorkersFile conf/workers.properties#Where to put jk logs(log文件路径)JkLogFile
7、 logs/mod_jk2.log#Set the jk log level debug/error/info(log级别)JkLogLevel info#Select the log format(log格式)JkLogStampFormat%a%b%d%H:%M:%S%Y#JkOptions indicate to send SSL KEY SIZE,JkOptions+ForwardKeySize+ForwardURICompat-ForwardDirectories#JkRequestLogFormat set the request format JkRequestLogFormat
8、%w%V%T#Send JSPs for context/to worker named loadBalancer(URL 转发配置,匹配的 URL才转发到 tomcat 进行处理)JkMount/*.jsp controller#JkMount/*.*controller 4.修改修改 workers.properties 文件文件 在 workers.properties 文件中添加以下内容:#server 列表 worker.list=controller,tomcat1,tomcat2#tomcat1(ajp13 端口号,在 tomcat 下 server.xml 配置,默认 8009
9、)worker.tomcat1.port=8009#tomcat 的主机地址,如不为本机,请填写 ip 地址 worker.tomcat1.host=localhost worker.tomcat1.type=ajp13#server的加权比重,值越高,分得的请求越多 worker.tomcat1.lbfactor=1#tomcat2 worker.tomcat2.port=9009 worker.tomcat2.host=localhost worker.tomcat2.type=ajp13 worker.tomcat2.lbfactor=1#controller(负载均衡控制器)worke
10、r.controller.type=lb#指定分担请求的 tomcat worker.controller.balanced_workers=tomcat1,tomcat2#worker.controller.sticky_session=true 说明:此文件配置了 2个 tomcat 服务器进行负载均衡处理 5.修改修改 tomcat 配置文件配置文件 server.xml 更改其中一个的设置打开 tomcat2/conf/server.xml 文件,修改里面所有的端口设置,将 8改为 9,如下:6.编写一个测试页面编写一个测试页面 test1.jsp 建立一个 test 的 web 应用
11、,里面新建一个 test1.jsp,内容为 test1 7.启动服务器并进行测试启动服务器并进行测试 依次启动 apache-server、tomcat1、tomcat2,通过 http:/localhost/test/test1.jsp 访问,查看 tomcat1 的窗口,可以看到打印了一行=,再刷新一次,tomcat2也打印了一条,再刷新,可以看到请求会被 tomcat1,tomcat2 轮流处理,实现了负载均衡 三、集群三、集群(session 复制复制)只配置负载均衡还不行,还要 session 复制,也就是说其中任何一个 tomcat 的添加的 session,是要同步复制到其它 t
12、omcat,集群内的 tomcat 都有相同的 session 1.tomcat 配置配置 1.1 修改 tomcat1,tomcat2 的 server.xml 文件添加集群内容,tomcat5.5 无需添加,只需要去掉注释符,tomcat6.0 需要添加,内容如下:分别添加以上内容后,在 tomcat2 中,修改 tcpListenPort=4001 为 4002 1.2.Engine增加 jvmRoute 属性设置,jvmRoute的值来自于 workers.properties 文件所设置的服务器名称。该值指定负载均衡时可与本 tomcat 进行切换的 tomcat 服务器。如若不设置
13、任何值,则默认在实现了负载均衡的各个 tomcat 服务器间相互切换#server 列表 worker.list=controller,tomcat1,tomcat2 2.添加添加 test.jsp 页面页面 2.1.test.jsp 添加以下内容:Cluster App Test Server Info:%out.println(request.getLocalAddr()+:+request.getLocalPort()+);%out.println(ID +session.getId()+);/如果有新的 Session 属性设置 String dataName=request.getP
14、arameter(dataName);if(dataName!=null&dataName.length()0)String dataValue=request.getParameter(dataValue);session.setAttribute(dataName,dataValue);out.print(Session 列表);Enumeration e=session.getAttributeNames();while(e.hasMoreElements()String name=(String)e.nextElement();String value=session.getAttri
15、bute(name).toString();out.println(name+=+value+);System.out.println(name+=+value);%名称:值:2.2.修改 web.xml 文件,加入节点,如下所示:test index.html index.htm index.jsp default.html default.htm default.jsp 3.Session 复制测试复制测试 测试步骤如下:1)启动 apache-server、tomcat1、tomcat2 2)访问 http:/localhost/test/test.jsp,输入名称:test0001、值
16、:123并点击“提交查询内容”按钮,显示效果如下:如上图所示,tomcat1 创建了一个新的 session,session 中有属性 test0001,值为 123 3)关闭 tomcat1 服务器,tomcat1 端口为 8080,如下图:4)在页面中再次点击“提交查询内容”按钮,效果如下:前端页面并没有发生改变,接下来查看后台情况:如图所示,可以发现 session 已成功复制到 tomcat2 中,以此证明 tomcat 集群已配置成功。5)另外来看看不关闭 tomcat1 服务器再次提交的情况 如图所示,请求并没有转发到 tomcat2 服务器,而是再次转回 tomcat1 服务器,这种情况是由于配置了 jvmRoute 所致,以个人理解,配置了此属性后,apache-server会根据 session 情况来进行路由,同一个 session 会转发给同一个服务器。6)打开一个新的 IE 窗口,并访问 http:/localhost/test/test.jsp 新窗口的请求转发到了 tomcat2 服务器,session 的 id 为 DD9E6C8181653B9BCCF534FC8760B264.tomcat2,根据测试结果可以说明,在不发生服务器关闭的情况下,每个 session 会绑定到同一个服务器中,而不会在服务器间发生复制。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1