Httpd (mod_jk.so) workers.properties文件 uriworkermap.properties文件 |
<--AJP1.3--> |
Tomcat --> jdk |
大致流程:apache服务器通过mod_jk.so 模块处理jsp文件的动态请求。通过tomcat worker等待执行servlet/JSP的tomcat实例。使用 AJP1.3协议与tomcat通信。tomcat有借助jdk解析。
负载就是 多台tomcat。共同解析apache发送的jsp请求,实现高可用。
1.安装apache
版本:(http://httpd.apache.org/download.cgi 下载地址。最新的是http-2.3.32)
apache软件在1.3版本之前以apache开头。2.x版本后以httpd开头
# cat /etc/redhat-release
CentOS release 6.5 (Final)
# uname -r
2.6.32-431.el6.x86_64
cd httpd-2.2.29
./configure \
--prefix=/usr/local/apache2 \
--enable-modules=most \
--enable-mods-shared=all \
--enable-so \
参数解析:
--enable-mods-shared=all
是加载全部动态库 去掉shared 是加载静态库动态加载的好处。性能比静态的效率高5%。
静态编译:
如果编译的时候没有使用enable-mods-shared=module或者enable-module=shared 这2个参数就是静态编译,何谓静态?
其实就是编译的时候所有的模块自己编译进 httpd 这个文件中(启动的时候这些模块就已经加载进来了,也就是可以使用)
动态编译:
编译的时候,使用enable-module=shared 或者enable-modules-shared=module 来动态编译。那么什么是动态?静态是直接编译进httpd中, 那么动态显然就不编译进去了,也就是你启动的时候根本不会加载这个模块, 而是给你一个module.so 文件,你一定要使用 loadmodule 这个语法来加载,这个模块才有效。
--enable-so
让 Apache 可以支持DSO模式,告诉编译器将所有标准模块都动态编译为DSO模块。
DSO究竟是什么?事实上DSO是Dynamic SharedObjects(动态共享目标)的缩写,它是现代Unix派生出来的操作系统都存在着的一种动态连接机制。
它提供了一种在运行时将特殊格式的代码,在程序运行需要时,将需要的部分从外存调入内存执行的方法
make && make install
2.安装jdk (安装在另一台主机上 地址192.168.1.141)
jdk 是解析tomcat的容器( tomcat是java编写的)
cd /usr/local
tar xf jdk-7u79-linux-x64.tar.gz
3.安装tomcat (安装在另一台主机上 地址192.168.1.141)
软件下载地址: http://tomcat.apache.org/download-80.cgi (版本从6-9)
由于这个包是二进制包。只需要修改完放入 指定目录即可。
tar xf apache-tomcat-8.0.32.tar.gz
\mv apache-tomcat-8.0.32 /usr/local/tomcat8
配置环境变量(为了让tomcat可以找到(调用)jdk。)
cd /usr/local/tomcat8
vim ./bin/catalina.sh
export JAVA_HOME=/usr/local/jdk1.7.0_79
这样的好处是:每次tomcat启动的时候加载jdk。(减少对系统环境的影响)
进入配置文件修改端口;
vim conf/server.xml
<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port="8109" protocol="AJP/1.3" redirectPort="8443" />
这里默认是8009.修改为8109 保存退出。
准备测试:
下载jsp探针文件到webapps/ROOT 目录下
启动tomcat:
# ./bin/startup.sh
Using CATALINA_BASE: /usr/local/tomcat8
Using CATALINA_HOME: /usr/local/tomcat8
Using CATALINA_TMPDIR: /usr/local/tomcat8/temp
Using JRE_HOME: /usr/local/jdk1.7.0_79
Using CLASSPATH: /usr/local/tomcat8/bin/bootstrap.jar:/usr/local/tomcat8/bin/tomcat-juli.jar
Tomcat started.
现在就可以访问jsp程序了通过浏览器:
http://192.168.1.141:8080/jspenv.jsp
(这里jspenv.jsp 是下载的jsp探针文件类似于phpinfo)
关闭tomcat:(这样速度快)
# killall -9 java
4.安装JK 模块(安装在apache上面)
一般httpd连接tomcat的模块有 mod_jk2.so ,mod_jk.so , proxy_ajg.so
这里使用 mod_jk.so 而mod_jk2.so(社区停止开发维护)proxy_ajg.so(过滤静态文件功能不佳)
下载网址http://apache.fayea.com/tomcat/tomcat-connectors
# yum install libtool autoconf -y (需要这2个软件包的支持)
(mod_jk.so这个模块是httpd和tomcat连接用的)
# tar xf tomcat-connectors-1.2.41-src
# cd tomcat-connectors-1.2.41-src/native/
检查权限:# ll buildconf.sh
-rwxr-xr-x. 1 root bin 1277 Dec 30 2014 buildconf.sh
buildconf.sh(检查所需支持后会生成编译安装的配置文件。)
# ./buildconf.sh
# ./configure --with-apxs=/usr/local/apache2/bin/apxs
# make && make install
安装完成后会出现提示:chmod 755 /usr/local/apache2/modules/mod_jk.so
检查文件是否存在。如果没有。可以拷贝到apache下面。
安装完成后: tomcat-connectors-1.2.41-src]# ls native/apache-2.0/
native/apache-2.0/ 目录下会出现 mod_jk.so 模块。(如果apache下没有可以拷贝这个注意权限755)、
加载JK模块 vim conf/httpd.conf
#添加JK模块加载
LoadModule jk_module modules/mod_jk.so
5.创建tomcat workers (在apache上面)
Tomcat worker是一个服务于web server、等待执行servlet/JSP的Tomcat实例,简单来说就是:指定tomcat的地址,指明那个tomcat去解析的。(特别是负载的时候,有多个tomcat一起要工作的。)创建tomcat workers需要增加3个配置文件,
分别是Tomcat workers配置文件workers.properties,URL过滤规则文件uriworkermap.properties和JK模块日志输出文件mod_jk.log,mod_jk.log文件会在apache启动时自动创建,这里只需创建前两个文件即可。
(1) 创建workers
# vim /usr/local/apache2/conf/workers.properties
worker.tomcat1.port=8109 #ajp13 端口号,在tomcat 下server.xml 配置, 默认8109
worker.tomcat1.host=192.168.1.141 #tomcat 的主机地址,如不为本机,请填写ip 地址
worker.tomcat1.type=ajp13 #定义apache与tomcat的通信协议
worker.tomcat1.lbfactor = 1 #server 的加权比重,值越高,分得的请求越多
(2)URL过滤规则文件uriworkermap.properties (在apache上面执行)
#vi /usr/local/apache2/conf/uriworkermap.properties
/*=tomcat1
!/*.jpg=tomcat1
!/*.gif=tomcat1
!/*.png=tomcat1
!/*.bmp=tomcat1
!/*.html=tomcat1
!/*.htm=tomcat1
!/*.swf=tomcat1
!/*.css= tomcat1
!/*.js= tomcat1
然后在httpd.conf 主配置文件中加载workers.properties和uriworkermap.properties这两个文件并指明相关日志。
apache下增加:
JkWorkersFile /usr/local/apache2/conf/workers.properties
JkMountFile /usr/local/apache2/conf/uriworkermap.properties
JkLogFile /usr/local/apache2/logs/mod_jk.log
JkLogLevel info
JkLogStampformat "[%a %b %d %H:%M:%S %Y]"
测试:确保本机的apache服务和 141上的tomcat启动。
输入不存在的网址。看最后的错误信息。可以简单判断是否tomcat工作。
tomcat的解析默认错误如下:
HTTP Status 404 - /inex.jsp
。。。。
Apache Tomcat/8.0.32
apache的错误如下:
Not Found
The requested URL /inex was not found on this server.
下面简单修改下内容:作tomcat的负载
环境简析: 192.168.1.199 httpd tomcat
192.168.1.141 tomcat
由于192.168.1.199上面没有tomcat:
所以 可以直接把141 上的jdk和tomcat打包拷贝过来。为了方便查看将tomcat改名为tomcat81
192.168.1.141上的操作:
tar zcvf jdk1.7.0_79.tar.gz jdk1.7.0_79/
scp jdk1.7.0_79.tar.gz [email protected]:/usr/local/
tar zcvf tomcat81.tar.gz tomcat8/
scp tomcat81.tar.gz [email protected]:/usr/local/
192.168.1.199上的操作。
cd /usr/local/
tar xf tomcat81.tar.gz
tar xf jdk1.7.0_79.tar.gz
\mv tomcat8 tomcat81
进入199下面修改http服务
workers.properties文件
worker.list = controller,tomcat1,tomcat2 #server 列表
#========tomcat1========
worker.tomcat1.port=8109 #ajp13 端口号,在tomcat 下server.xml 配置, 默认8109
worker.tomcat1.host=192.168.1.141 #tomcat 的主机地址,如不为本机,请填写ip 地址
worker.tomcat1.type=ajp13
worker.tomcat1.lbfactor = 1 #server 的加权比重,值越高,分得的请求越多
#========tomcat2========
worker.tomcat2.port=8109 #ajp13 端口号,在tomcat 下server.xml 配置, 默认8009
worker.tomcat2.host=localhost #tomcat 的主机地址,如不为本机,请填写ip 地址
worker.tomcat2.type=ajp13
worker.tomcat2.lbfactor = 1 #server 的加权比重,值越高,分得的请求越多
#========controller, 负载均衡控制器========
worker.controller.type=lb
worker.controller.balanced_workers=tomcat1,tomcat2 # 指定分担请求的tomcat
worker.controller.sticky_session=1
uriworkermap.properties文件
/*.jsp=controller
#特别注意这里需要修改这里。第一次没有负载。值查询tomcat1 这里做了负载。所以请求要发给
负载均衡器。
最后利用探针文件,查看:用户目录在这2个目录下切换代表成功。
用户目录 /usr/local/tomcat81
用户目录 /usr/local/tomcat8