Apache+Tomcat+jk集群

版权声明: https://blog.csdn.net/qq_39769369/article/details/80852086

Apache+Tomcat+jk集群

原理:JK插件的负载均衡器根据在worker.properties中配置的lbfactor(负载平衡因数),负责为集群系统中的Tomcat服务器分配工作负荷,以实现负载平衡。每个Tomcat服务器间用集群管理器(SimpleTcpCluster)进行通信,以实现HTTP回话的复制,比如Session。

一、搭建环境

操作系统:CentOS7

Jdk:1.7

Apache:2.4.33

Tomcat:7.0

Jk:1.2.43

二、安装包准备

Cenos镜像文件

jdk-7u80-linux-x64.tar.gz(jdk)

httpd-2.4.33.tar.gz (Apache)

apache-tomcat-7.0.88.tar.gz(Tomcat)

tomcat-connectors-1.2.43-src.tar.gz(Jk)

安装Apache所需要的依赖包:

apr-1.6.3.tar.gz

apr-util-1.6.1.tar.gz

apr-iconv-1.2.2.tar.gz

pcre-8.39.tar.gz

三、集群部署步骤

3.1安装在VMware安装centos7

https://blog.csdn.net/hui_2016/article/details/68927487

3.2 安装配置jdk

1、将centos自带jdk删除

2、将jdk压缩包拷贝到/urs/local下面

3、解压:#tar -zxvf jdk-7u80-linux-x64.tar.gz

4、配置Java环境变量在/etc/profile 末尾

5、selinux=enforcing改为selinux=disabled /etc/selinux/config文件中

3.3安装Apache步骤

3.3.1安装依赖包

1、下图四个安装包拷贝到/urs/local下面

 

2、安装apr——执行以下代码

# tar -zxvf apr-1.6.3.tar.gz 

# cd apr-1.6.3

# ./configure --prefix=/usr/local/apr 

# make

# make install

3、安装apr-util——执行以下代码

注意:apr-util  1.6.0以上的版本需要 expat 的支持,下载安装expat步骤如下: 

# wget https://sourceforge.net/projects/expat/files/expat/2.2.3/expat-2.2.3.tar.bz2

#tar -xjvf expat-2.2.3.tar.bz2

#./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr --with-expat=/usr/local/expat

# make && make install

以上是apr-util 1.6.0所需要的步骤不然会报错,接下来是apr-util安装

# tar -zxvf  apr-util-1.6.1.tar.gz

# cd apr-util-1.6.1

#  ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr --with-expat=/usr/local/expat

# make

# make install

4、安装pcre——执行以下代码

  # tar -zxvf pcre-8.32.tar.gz

  # cd pcre-8.39

  # ./configure --prefix=/usr/local/pcre

  # make

  # make install

3.3.2安装Apache

1、httpd-2.4.33.tar.gz拷贝到/urs/local下

2、#cd /usr/local

3、 #tar -zxvf httpd-2.4.33.tar.gz

4、#cd httpd-2.4.33

5、./configure --prefix=/usr/local/apache --enable-so -enable-proxy -enable-proxy_http=shared --enable-module=so --enable-mods-shared=all --enable-proxy-ajp=shared  --enable-proxy-balancer -with-mpm=worker  --with-apr=/usr/local/apr/ --with-apr-util=/usr/local/apr-util/ --with-pcre=/usr/local/pcre

[注意空格]

6、#make && make install

3.3.3 Apache 的配置及测试

1、# vim /apache/conf /httpd.conf

2、在文件中打开注释ServerName,将ServerName值改为对应的IP地址,如下图所示

 

3、文件中的DirectoryIndex中添加 index.jsp,如下图所示

 

4、文件中以下2个注释去掉:

 #Include conf/extra/httpd-mpm.conf

 #Include conf/extra/httpd-default.conf

5、保存修改退出

6、# cd /urs/local/apache/bin

7、#./apachectl start

8、查看进程服务:# ps -ef | grep httpd  显示如下结果则说明已经情动服务

 

9、打开浏览器访问 输入地址:http://127.0.0.1  如下界面,说明Apache安装成功

 

3.4安装Tomcat步骤

1、apache-tomcat-7.0.88.tar.gz拷贝到/urs/local 下面,解压

#tar -zxvf apache-tomcat-7.0.88.tar.gz

2、将解压后的文件夹重命名为tomcat1,复制一份为tomcat2,方便区分,可利用xftp远程连接工具进行该步骤

3、Server.xml具体修改3.6节会详细讲解

3.5安装jk

1、将安装包tomcat-connectors-1.2.43-src.tar.gz(Jk)目录拷贝到

/usr/local目录

2、#cd /usr/local

3、# tar -zxvf tomcat-connectors-1.2.43-src.tar.gz

4、编译安装mod_jk。

     #cd /tomcat-connectors-1. 2.43-src/native

     # chmod 755buildconf.sh

     # ./buildconf.sh

     # ./configure --with-apxs=/usr/local/apache/bin/apxs

     # make

     # make install

5、/tomcat-connectors-1.2.53/apache-2.0下的mod_jk.so文件拷贝到apache安装目录下的modules文件夹下面。

3.6整合Apache+Tomcat+jk

3.6.1修改Tomcat 的server.xml

1、# cd /usr/local/tomcat1/conf

2、# vim server.xml

3、修改<Engine>的配置,打开<Cluster>标签,保存退出

 

4、#vim /usr/local/tomcat2/conf/server.xml 【修改tomcat2的server.xml】

5、修改对应的端口号,以防端口产生冲突

①默认8005

 

②默认8080

 

默认8009

 

6、修改<Engine>的配置,打开<Cluster>标签,保存退出

 

3.6.2 Apache配置——修改 httpd.conf

1、# vim/urs/local/apache/conf/httpd.xml

2、在文件最后添加一下内容:

LoadModule jk_module modules/mod_jk.so

JkWorkersFile conf/workers.properties

#日志文件

JkLogFile logs/mod_jk.log

#tomcat运行模式

JkLogLevel debug

#收到.jsp结尾的文件交给负载均衡器处理,可自行配置

JkMount /*.jsp loadbalancer

3.6.3 Apache配置——创建workers.properties

1、# touch /urs/local/apache/conf/workers.properties

2、#  vim workers.properties

3workers.properties具体配置如下:

# workers 列表

worker.list=tomcat1,tomcat2, loadbalancer, status

# 第一个tomcat1

worker.tomcat1.port=8009   #对应tomcat的server.xml中配置的ajp13端口号

worker.tomcat1.host=127.0.0.1  #tomcat1的主机IP地址,如不为本机,请填写IP地址

worker.tomcat1.type=ajp13  #定向包协议

worker.tomcat1.lbfactor=1  #server的负载分配权重,值越高,分得的请求越多

#以下为非必要配置,这部分配置tomcat2的配置同tomcat1

#worker.tomcat1.cachesize=1000  #配置tomcat的jk连接缓存大小 (非必要)

#worker.tomcat1.cachesize_timeout=600  # (非必要)

#worker.tomcat1.reclycle_timeout=300  # (非必要)

#worker.tomcat1.socket_keepalive=1  #防止防火墙切断未激活的网络连接(非必要)

#worker.tomcat1.socket_timeout=300   #(非必要)

#worker.tomcat1.local_worker=1  # (非必要)

#worker.tomcat1.retries=3  # (非必要) 

# tomcat2

worker.tomcat2.port=9009

worker.tomcat2.host=172.**.***.202  #tomcat2的主机IP地址

worker.tomcat2.type=ajp13

worker.tomcat2.lbfactor=1

# load balancerworker -负载均衡控制器

worker.loadbalancer.type=lb

worker.loadbalancer.balanced_workers=tomcat1,tomcat2  #指定分担请求的tomcat

worker.loadbalancer.sticky_session=1    #设置为粘性session

worker.loadbalancer.sticky_session_force=0  #设置当多次请求未响应,请求将转发

worker.status.type=status

注意:

 

与servel.xml 中的jvmRoute一致

3.6.4 Web项目创建

1、新建web项目

2、index测试代码

<%@ page contentType="text/html; charset=GBK" %>

<%@ page import="java.util.*" %>

<html><head><title>Cluster App Test</title></head>

<body>

Server Info:

<%

out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"<br>");%>

<%

  out.println("<br> ID " + session.getId()+"<br>");

  // 如果有新的 Session 属性设置

  String dataName = request.getParameter("dataName");

  if (dataName != null && dataName.length() > 0) {

     String dataValue = request.getParameter("dataValue");

     session.setAttribute(dataName, dataValue);

  }

  out.println("<b>Session 列表</b><br>");

  System.out.println("============================");

  Enumeration e = session.getAttributeNames();

  while (e.hasMoreElements()) {

     String name = (String)e.nextElement();

     String value = session.getAttribute(name).toString();

     out.println( name + " = " + value+"<br>");

         System.out.println( name + " = " + value);

%>

  <forma"method="POST"> 

    名称:<input type=textsize=20 name="dataName"> 

     <br> 

    :<inpu ttype=textsize=20 name="dataValue">

     <br>

   </form>

</body>

</html>

3、修改web.xml 文件

<web-app>标签里添加<distributable/>,确保session能够复制

4、将项目打成war包,放到tomcat1和tomcat2的webapps下面

四、测试

1、将Apache和Tomcat依次启动

2、访问http://127.0.0.1/项目名/index.jsp

测试结果:

Worker.properties中  .sticky_session=1 设置为有粘性,一个用户在一个Tomcat中建立了会话后则此后这个用户的所有操做都由这个Tomcat服务器承担,所以访问一直出现的是tomcat1tomcat1关闭时,会由tomcat2承担,但是sessionID不改变。

ID C3253704969A27AE48AD5EFDE4285708.tomcat1

ID C3253704969A27AE48AD5EFDE4285708.tomcat2

参考:

https://jingyan.baidu.com/article/ab0b5630b632dbc15afa7dc4.html

https://blog.csdn.net/h12kjgj/article/details/73421570

https://blog.csdn.net/guoyf123321/article/details/50724746【web项目参考】

五、知识点延伸

workers.properties配置 详解  

 1、worker常见属性

 ajp13:此类型表示当前worker为一个运行着的Tomcat实例。

  Lb lb即load balancing,专用于负载均衡场景中的woker;此worker并不真正负责处理用户请求,而是将用户请求调度给其它类型为ajp13的worker。

  Status :用户显示分布式环境中各实际worker工作状态的特殊worker,它不处理任何请求,也不关联到任何实际工作的worker实例。具体示例如请参见后文中的配置。       

     Host Tomcat 7的worker实例所在的主机

   Port Tomcat 7实例上AJP1.3连接器的端口

   connection_pool_minsize :最少要保存在连接池中的连接的个数;默认为pool_size/2

   connection_pool_timeout:连接池中连接的超时时长

   Mount :由当前worker提供的context路径,如果有多个则使用空格格开;此属性可以由JkMount指令替代

   retries :错误发生时的重试次数

   socket_timeout :mod_jk等待worker响应的时长,默认为0,即无限等待

   socket_keepalive :是否启用keep alive的功能,1表示启用,0表示禁用

   Lbfactor worker的权重,可以在负载均衡的应用场景中为worker定义此属性     

   method :可以设定为R、T或B;默认为R,即根据请求的个数进行调度;T表示根据已经发送给worker的实际流量大小进行调度;B表示根据实际负载情况进行调度。

  sticky_session :在将某请求调度至某worker后,源于此址的所有后续请求都将直接调度至此worker,实现将用户session与某worker绑定。默认为值为1,即启用此功能。如果后端的各worker之间支持session复制,则可以将此属性值设为0。

https://www.cnblogs.com/wala-wo/p/5119225.html【参数详细讲解】

 

文章可能存在不足的地方,仅供参考。

 

猜你喜欢

转载自blog.csdn.net/qq_39769369/article/details/80852086