Apache+Tomcat实现负载均衡及集群(session同步)--三、动静分离(1)使用mod_jk

11 篇文章 0 订阅
11 篇文章 0 订阅

准备一个测试用的servlet小程序(见附件)



 


 
一个servlet,访问这个servlet会跳转到首页index.jsp,static中存放静态资源,把这个工程打成war包,放入到tomcat的webapps目录(ip为192.168.137.211),启动tomcat,访问一下




 
我们的页面还是很漂亮的
 
简述一下tomcat的结构


这个架构跟tomcat conf/server.xml中的配置大体上是一致的
 
默认的,我们在通过8080端口访问tomcat的时候,使用的是tomcat的http连接器,此连接器能提供静态和动态资源服务,tomcat还有其他连接器,比如ajp连接器,就是在跟Apache集成时用到的连接器
 

 
动静分离就是从上面的将所有请求都发送到tomcat演变到只将动态请求发送到tomcat,静态资源的请求留给apache处理
 
首先配置Apache
编辑Apache的主配置文件,进入Apache安装目录下的conf目录,编辑httpd.cfg文件
(这里说明一下,之前演示Apache安装过程时Apache是安装在 /usr/local/apache2/ 目录下的,而现在这台机器,Apache是安装在 /usr/local/apache/目录,所以细心的同学看到这里不要奇怪,只要进入到Apache安装目录下的conf目录即可)


 
Apache使用独立的模块来处理这种动态请求,包括mod_jk和mod_proxy.
如果下载的Apache安装包模块中不包含mod_jk,那么需要先下载并编译mod_jk,这里下载了tomcat-connectors-1.2.40-src.tar.gz,上传到/usr/local/目录,编译


 
解压缩


 
进入native目录




 

 

 
 
 
要使这些模块工作,首先得加载进来

 
ServerRoot指令指定了Apache查找静态资源的目录


 
第一行,LoadModule指令,加载mod_jk模块,这些模块存放于conf/modules目录下
第七行,IfModule指令,判断是否加载了模块,模块名称为jk_module
第二行到第六行的指令都是mod_jk模块提供的
JkWorkersFile    指定worker配置文件的路径,要想让Apache把动态请求转发给tomcat,得告诉Apache tomcat的位置,包括ip、端口等,workers.properties这个配置文件就是用于配置这些信息的
JkLogFile    指定日志文件所在位置
JkLogLevel    指定日志输出级别
JkMount    指定请求转发规则,mod_jk模块得决定哪些是动态资源,然后才能将动态资源转发给tomcat,/*表示所有请求,即将所有请求交给名称为worker1的tomcat处理
JkUnMount    指定不转发的请求的规则,即哪些请求不转发给tomcat,静态资源是放在shade/static目录下的,所以配置/shade/static路径下的所有请求不转发
 
JkMount、JkMount指令在处理时会有顺序,从上到下,如果规则满足,继续往下匹配,直到第一个不满足的规则才停止
 
接下来配置worker.properties,即告诉Apache请求转发到的tomcat在哪里


 
加入如下配置


 
worker.list配置worker的名称,这里暂时配置一个
worker.workerName.xxx配置每一个worker的属性,这里workerName就是worker.list后面配置的名称,worker指tomcat实例,可以有多个tomcat实例,后面配置负载均衡的时候会配置,这里暂时配置一个worker
 
type:指定tomcat连接器的类型,必须为ajp13,在配置负载均衡时还有一种,lb
host:tomcat运行的主机
port:tomcat的ajp连接器监听的端口
cachesize:apache服务器是多线程的,tomcat能够利用这一优势来维持一定数量的连接作为缓存。根据用户的多少来配置一个合适缓存连接数量有助于提高性能。这里配置为5
 
修改tomcat的conf/server.xml,确保ajpconnector监听在8009端口,Engine元素的jvmRouter属性的值配置为worker1,即之前在worker.properties文件中配置的tomcat名称


 
现在将tomcat的webapps/shade目录下的static目录删除,然后启动tomcat,用8080端口访问下



 
静态资源已经访问不到了
接着在Apache安装目录下的htdocs目录下创建shade目录,将存放静态资源的static目录拷贝进来


 
启动Apache,然后访问,注意,确保安装tomcat的服务器的8009端口打开


 
注意,这里访问的是Apache所在的服务器,80端口
 
至此,已经实现动态资源和静态资源的分离
概念: AJP是Apache提供的完成与其它服务器通讯的一种协议。在Apache中通过mod_proxy_ajp模块发送AJP数据,另外一端的服务器需要实现AJP协议,能够接受mod_proxy_ajp模块发送的AJP协议数据,在接受到AJP协议数据后适当处理,并能够将处理结果以AJP协议方式发送回给mod_proxy_ajp模块。 配置过程: 1 安装apache 2 测试apache是否安装成功:http://localhost 出现It works! 3 解压、安装tocmat 4 测试tocmat是否安装成功:http://localhost:8080 5 配置tocmat的jdk: 打开startup.bat添加: rem ----------------------------------------------------JDK目录 SET JAVA_HOME=D:\progam\jdk160_05 rem ----------------------------------------------------解压后Tomcat的目录 6 复制tocmat,名字为tomcat2 7 apache 整合tomcat 1)modules目录下添加模块:jk mod_jk-1.2.26-httpd-2.2.4.so 2)修改conf/httpd.conf 最后一行添加: include conf/mod_jk.conf 3)在conf目录下创建mok_jk.conf 内容: #加载mod_jk Module LoadModule jk_module modules/mod_jk-1.2.26-httpd-2.2.4.so #指定 workers.properties文件路径 JkWorkersFile conf/workers.properties #指定哪些请求交给tomcat处理,"controller"为在workers.propertise里指定的负载分配控制器名 JkMount /*.jsp controller 4)在confi目录下创建workers.properties 内容为: worker.list = controller,tomcat1,tomcat2 #========tomcat1======== worker.tomcat1.port=8009 worker.tomcat1.host=192.168.9.210 worker.tomcat1.type=ajp13 worker.tomcat1.lbfactor = 1 #加权因子 越大执行的请求越多 #========tomcat2======== worker.tomcat2.port=9009 worker.tomcat2.host=192.168.9.210 worker.tomcat2.type=ajp13 worker.tomcat2.lbfactor = 1 #========controller,负载均衡控制器======== worker.controller.type=lb worker.controller.balanced_workers=tomcat1,tomcat2 worker.controller.sticky_session=1 5 修改tomcat的端口号(3处) <Server port="8005" shutdown="SHUTDOWN"> 改为: <Server port="9005" shutdown="SHUTDOWN"> <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"/> 改为: <Connector port="9090" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"/> <Connector port="8009" protocol="AJP/1.3" redirectPort="8443"/> 改为: <Connector port="9009" protocol="AJP/1.3" redirectPort="8443"/> 注意:该处需要与worker.tomcat2.port=9009对应 6 修改jvmRoute 备注与worker.list = controller,tomcat1,tomcat2的tomcat1或tocmat2对应 <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">
使用 Apache+Tomcat 实现负载均衡时,我们可以使用 mod_jk 模块实现mod_jkApache 的一个模块,它与 Tomcat 之间通过 AJP 协议进行通信,可以将请求分发给多个 Tomcat 服务器,从而实现负载均衡。 以下是使用 mod_jk 实现负载均衡的步骤: 1. 安装 mod_jk 模块 在 Apache 的模块目录下,添加 mod_jk 模块。在 Linux 系统中,通常是在 /etc/httpd/modules 目录下。 2. 配置 mod_jk 模块 在 Apache 的配置文件 httpd.conf 中,添加以下内容: ``` LoadModule jk_module modules/mod_jk.so JkWorkersFile /path/to/workers.properties JkLogFile /path/to/mod_jk.log JkLogLevel info ``` 上述配置中,LoadModule 指令用于加载 mod_jk 模块,JkWorkersFile 指令用于指定 workers.properties 文件的路径,该文件定义了 Tomcat 服务器的列表和其它相关参数,JkLogFile 指令用于指定 mod_jk 的日志文件路径,JkLogLevel 指令用于指定日志级别。 3. 配置 workers.properties 文件 在 workers.properties 文件中,我们需要定义多个 Tomcat 服务器的信息,例如: ``` worker.list=worker1,worker2 worker.worker1.type=ajp13 worker.worker1.host=192.168.1.1 worker.worker1.port=8009 worker.worker2.type=ajp13 worker.worker2.host=192.168.1.2 worker.worker2.port=8009 ``` 上述配置中,worker.list 指定了所有的 Tomcat 服务器名称,worker1 和 worker2 是两个 Tomcat 服务器的名称,type 指定了通信协议,host 和 port 分别指定了 Tomcat 服务器的 IP 地址和端口号。 4. 配置虚拟主机 在 Apache 的虚拟主机配置中,添加以下内容: ``` JkMount /* worker1 JkMount /app1/* worker2 ``` 上述配置中,JkMount 指令用于指定 URL 与 Tomcat 服务器之间的映射关系,* 表示所有的 URL,/app1/* 表示以 /app1/ 开头的 URL。 5. 配置重试和超时 在 workers.properties 文件中,我们可以配置重试和超时的参数,例如: ``` worker.worker1.retries=3 worker.worker1.connect_timeout=10000 worker.worker1.prepost_timeout=10000 ``` 上述配置中,retries 表示在重试之前的最大尝试次数,connect_timeout 表示连接超时时间,prepost_timeout 表示请求和响应的超时时间。 6. 测试负载均衡 完成上述配置后,我们可以启动多个 Tomcat 服务器,并访问 Apache 的虚拟主机。Apache 会将请求分发给多个 Tomcat 服务器,从而实现负载均衡。 以上就是使用 mod_jk 实现负载均衡的步骤。需要注意的是,使用 mod_jk 进行负载均衡时,需要确保 Tomcat 服务器之间的 session 同步。可以使用 Tomcat 提供的 session 共享机制或使用其它第方的 session 共享方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值