实验环境:
CentOS 5.11 final
hostname:T1.getg.com
IP地址:192.168.50.138
软件准备:
CentOS Linux 5.*系统光盘中的“Development tools”工具包组
jdk-8u45-linux-x64.tar.gz
pcre-8.36.tar.gz
apr-util-1.5.4.tar.gz
apr-1.5.1.tar.gz
httpd-2.4.12.tar.gz
apache-tomcat-7.0.61.tar.gz
所有应用程序都安装部署在/opt目录下,当然这不是必须的,如果你愿意也可以部署在你想要的目录下,大多数人都按照习惯部署在/usr/local目录下,由于/usr/local目录下有其他的程序,我怕混淆,因此这个实验的所有程序都部署在/opt目录下。
第一步:下载安装程序
(使用root用户下载到root用户的家目录下/root,后续移动应用程序的命令都是在这个目录下执行的)
下载jdk-8u45-linux-x64.tar.gz
wget http://download.oracle.com/otn-pub/java/jdk/8u45-b14/jdk-8u45-linux-x64.tar.gz?AuthParam=1430202129_13eb567f3345e9666fcd83ec03861832
下载pcre-8.36.tar.gz
wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.36.tar.gz
下载apr-1.5.1.tar.gz
wget http://mirror.bit.edu.cn/apache/apr/apr-1.5.1.tar.gz
下载apr-util-1.5.4.tar.gz
wget http://mirror.bit.edu.cn/apache/apr/apr-util-1.5.4.tar.gz
下载Apache httpd2.4.12
wget http://apache.fayea.com//httpd/httpd-2.4.12.tar.gz
下载apache-tomcat-7.0.61.tar.gz
wget http://apache.fayea.com/tomcat/tomcat-7/v7.0.61/bin/apache-tomcat-7.0.61.tar.gz
下载tomcat-connectors-1.2.40-src.tar.gz
wget http://mirror.bit.edu.cn/apache/tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.40-src.tar.gz
第二步:安装程序
这里需要说明一下,jdk和tomcat下载的时候已经编译好了,属于免安装版;pcre、apr、httpd、tomcat-connectors下载的是源程序,需要编译安装,这一步骤里面将讲述如何编译安装,其实这些程序在光盘的程序包中都是已经有的,我们这里实验的apache和tomcat都是最新版,因此相关的依赖程序也需要最新版本的才行。
----->安装Development tools(这里需要yum的支持,所以如果系统中没有配置yum,还需要先配置好yum才能执行这一以及后续的步骤,关于如何配置yum及其安装源请参考其他相关资料,我这里使用的是官网的安装源。)
# yum groupinstall "Development tools"
----->安装JDK,说是安装,其实就是解压下载的文件,然后配置环境变量,我么将JDK的环境变量设置在/etc/profile文件中,这样对所有用户都适用,如何仅仅配置在root用户的.bash_profile文件中,环境变量只对root用户生效。(如果你之前配置过JDK,也可以下载rpm安装包、bin二进制安装包或者源代码自己编译安装)
1、将下载的安装程序文件移动到opt目录下;
# mv jdk-8u45-linux-x64.tar.gz /opt
2、解压文件;
# cd /opt
# tar -xvf jdk-8u45-linux-x64.tar.gz
# cd jdk1.8.0_45/bin
3、验证java是否可以工作;
# ./java -version
4、编辑JDK环境变量;
# vim /etc/profile
添加下面的内容到/etc/profile文件中
JAVA_HOME=/opt/jdk1.8.0_45
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tool.jar
export JAVA_HOME PATH CLASSPATH
5、验证设置JDK环境。
# . /etc/profile
# java -version
# echo $JAVA_HOME
# echo $PATH
# echo $CLASSPATH
----->安装pcre(PCRE(Perl Compatible Regular Expressions中文含义:perl语言兼容正则表达式)是一个用C语言编写的正则表达式函数库,由菲利普.海泽(Philip Hazel)编写。PCRE是一个轻量级的函数库,比Boost之类的正则表达式库小得多。PCRE十分易用,同时功能也很强大,性能超过了POSIX正则表达式库和一些经典的正则表达式库。)
1、将下载安装程序移动到/opt目录下;
# mv pcre-8.36.tar.gz /opt
# mv pcre-devel-8.36-5.fc22.x86_64.rpm /opt
2、解压文件;
# cd /opt
# tar -xvf pcre-8.36.tar.gz
3、编译安装pcre
# cd pcre-8.36
# ./configure
# make && make install
----->安装pcre-devel(开发组件库我们使用系统自带的)
# yum install pcre-devel
----->安装配置Tomcat(配置3个节点的Tomcat,以便可以实现集群)
1、将下载的安装程序移动到/opt目录下;
# mv apache-tomcat-7.0.61.tar.gz /opt
# cd /opt
2、解压文件;
# tar -xvf apache-tomcat-7.0.61.tar.gz
3、复制一份tomcat程序做为tomcat节点1;
# cp -r apache-tomcat-7.0.61 tomcat1
4、复制一份tomcat程序做为tomcat节点2;
# cp -r apache-tomcat-7.0.61 tomcat2
5、重命名tomcat程序作为tomcat节点3;
# mv apache-tomcat-7.0.61 tomcat3
6、修改tomcat节点1的配置参数;
# cd tomcat1
# cd conf
# vim server.xml
将配置文件中部分内容修改如下:
<Server port="8105" shutdown="SHUTDOWN">
<Connector port="8180" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Connector port="8109" protocol="AJP/1.3" redirectPort="8443" />
<Engine name="Catalina" defaultHost="192.168.50.138" jvmRoute="tomcat1">
<Host name="192.168.50.138" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/> 去掉上下的注释符号
在配置文件中加入如下内容:
<Context docBase="/opt/webapps" path="/webapps" reloadable="false"/>
保存退出
7、我们这个配置实例的jsp测试网页部署在/opt/webapps目录下,我们在该目录下新建一个test.jsp的测试网页,他可以显示tomcat运服务器的IP地址和端口号;
# cd /opt
# mkdir webapps
# vim test.jsp
加入如下内容:
<%@ page contentType="text/html;charset=UTF-8" %>
<%@ page import="java.util.*" %>
<BR>获取服务器的IP地址和端口号是:
<BR><%
out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"<br>");%>
保存退出
8、启动Tomcat节点1的JVM虚拟机;
# cd /opt/tomcat1/bin
# ./startup.sh
9、测试Tomcat节点1已经能够正常工作;
在浏览器中输入:192.168.50.138:8180/webapps/test.jsp,验证结果如下图:
10、修改tomcat节点2的配置参数;
# cd /opt/tomcat2
# cd conf
# vim server.xml
将配置文件中部分内容修改如下:
<Server port="8205" shutdown="SHUTDOWN">
<Connector port="8280" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Connector port="8209" protocol="AJP/1.3" redirectPort="8443" />
<Engine name="Catalina" defaultHost="192.168.50.138" jvmRoute="tomcat2">
<Host name="192.168.50.138" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/> 去掉上下的注释符号
在配置文件中加入如下内容:
<Context docBase="/opt/webapps" path="/webapps" reloadable="false"/>
保存退出
11、启动Tomcat节点2的JVM虚拟机;
# cd /opt/tomcat2/bin
# ./startup.sh
12、测试Tomcat节点2已经能够正常工作;
在浏览器中输入:192.168.50.138:8280/webapps/test.jsp,验证结果如下图:
13、修改tomcat节点3的配置参数;
# cd /opt/tomcat3
# cd conf
# vim server.xml
将配置文件中部分内容修改如下:
<Server port="8305" shutdown="SHUTDOWN">
<Connector port="8380" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Connector port="8309" protocol="AJP/1.3" redirectPort="8443" />
<Engine name="Catalina" defaultHost="192.168.50.138" jvmRoute="tomcat3">
<Host name="192.168.50.138" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/> 去掉上下的注释符号
在配置文件中加入如下内容:
<Context docBase="/opt/webapps" path="/webapps" reloadable="false"/>
保存退出
14、启动Tomcat节点3的JVM虚拟机;
# cd /opt/tomcat3/bin
# ./startup.sh
15、测试Tomcat节点3已经能够正常工作;
在浏览器中输入:192.168.50.138:8380/webapps/test.jsp,验证结果如下图:
----->编译Apache httpd、apr、apr-util(我们将apr可移植运行库与httpd一起编译)
1、将下载的应用程序移动到/opt目录下;
# mv apr-1.5.1.tar.gz /opt
# mv apr-util-1.5.4.tar.gz /opt
# mv httpd-2.4.12.tar.gz /opt
2、解压文件;
# tar -xvf httpd-2.4.12.tar.gz
# tar -xvf apr-1.5.1.tar.gz
# tar -xvf apr-util-1.5.4.tar.gz
3、将apr和apr-util源码文件移动到apache源码目录下的srclib目录下;
# mv apr-1.5.1 /opt/httpd-2.4.12/srclib/apr
# mv apr-util-1.5.4 /opt/httpd-2.4.12/srclib/apr-util
4、编译安装apache httpd应用程序;
# cd httpd-2.4.12
# mkdir -p /opt/apache
# ./configure --prefix=/opt/apache --with-included-apr --enable-nonportable-atomics=yes --with-z
# make
# make install
5、启动apache应用程序;
# cd /opt/apache/bin
# ./apachectl start
# ps -ef |grep httpd
6、验证apache已经能够正常工作。
在浏览器中输入:192.168.50.138.确认页面能够正常打开,并且出现“It Works!”说明编译安装成功,验证结果如下所示:
----->编译Tomcat-connectors mod_jk模块
1、将下载的应用程序移动到/opt目录下
# mv tomcat-connectors-1.2.40-src.tar.gz /opt
2、解压文件
# cd /opt
# tar -xvf tomcat-connectors-1.2.40-src.tar.gz
3、编译jk模块
# cd tomcat-connectors-1.2.40-src/native
# ./configure --with-apxs=/opt/apache/bin/apxs
# make
4、将编译好的JK模块移动到/opt/apache/modules模块目录下
# cd apache-2.0/
# mv mod_jk.so /opt/apache/modules/
第三步:配置集群环境
1、验证系统编译的内核模块
[root@T1 apache-2.0]# cd /opt/apache
[root@T1 apache]# cd bin
[root@T1 bin]# ./apachectl -l
Compiled in modules:
core.c
mod_so.c
http_core.c
event.c
2、验证系统中已经加载的内核模块
[root@T1 bin]# ./apachectl -M
Loaded Modules:
core_module (static)
so_module (static)
http_module (static)
mpm_event_module (static)
authn_file_module (shared)
authn_core_module (shared)
authz_host_module (shared)
authz_groupfile_module (shared)
authz_user_module (shared)
authz_core_module (shared)
access_compat_module (shared)
auth_basic_module (shared)
reqtimeout_module (shared)
filter_module (shared)
mime_module (shared)
log_config_module (shared)
env_module (shared)
headers_module (shared)
setenvif_module (shared)
version_module (shared)
unixd_module (shared)
status_module (shared)
autoindex_module (shared)
dir_module (shared)
alias_module (shared)
----->编辑httpd.conf配置文件(由于我们此次试验的目的是做tomcat集群,因此关于apache这里不做过多的配置修改,使用默认的即可,如果使用Apache做静态网页服务器,请参考其他资料进行配置的修改)
# vim /opt/apache/conf/httpd.conf
1、在配置文件中修改如下内容
ServerRoot "/opt/apache"
Include conf/extra/httpd-mpm.conf
# 取消前面的注释符号,mpm模块是配置Apache的主要模块,关于后续如果对Apache进行优化,都需要修改该文件。
2、在配置文件中添加如下内容,加载jk模块,以便能够实现集群的功能
LoadModule jk_module modules/mod_jk.so
Include /opt/apache/conf/mod_jk.conf
----->在/opt/apache/conf目录下创建workers.properties
# touch /opt/apache/conf/workers.properties
# vim /opt/apache/conf/workers.properties
添加如下内容:
workers.java_home=/opt/jdk1.8.0_45
worker.list=controller
#========tomcat1========
worker.tomcat1.port=8109
worker.tomcat1.host=192.168.50.138
worker.tomcat1.type=ajp13
worker.tomcat1.lbfactor=1
worker.tomcat1.cachesize=10
worker.tomcat1.cache_timeout=600
worker.tomcat1.socket_keepalive=1
worker.tomcat1.socket_timeout=300
#========tomcat2========
worker.tomcat2.port=8209
worker.tomcat2.host=192.168.50.138
worker.tomcat2.type=ajp13
worker.tomcat2.lbfactor=1
worker.tomcat2.cachesize=10
worker.tomcat2.cache_timeout=600
worker.tomcat2.socket_keepalive=1
worker.tomcat2.socket_timeout=300
#========tomcat3========
worker.tomcat3.port=8309
worker.tomcat3.host=192.168.50.138
worker.tomcat3.type=ajp13
worker.tomcat3.lbfactor=1
worker.tomcat3.cachesize=10
worker.tomcat3.cache_timeout=600
worker.tomcat3.socket_keepalive=1
worker.tomcat3.socket_timeout=300
#=======controller======
worker.controller.type=lb
worker.controller.balance_workers=tomcat1,tomcat2,tomcat3
worker.controller.sticky_session=1
----->在/opt/apache/conf目录下创建mod_jk.conf文件
# touch /opt/apache/conf/mod_jk.conf
# vim /opt/apache/conf/mod_jk.conf
添加如下内容:
JKWorkersFile /opt/apache/conf/workers.properties
JkLogFile /opt/apache/logs/mod_jk.log
JkShmFile /opt/apache/logs/jk-runtime-status
JkLogLevel info
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
JkRequestLogFormat "%w %V %T"
# Sample JkMounts. Replace these with the paths you would
# like to mount from your JSP server.
# syntax: JkMount ${URL_DIR}/*.jsp worker_name
JkMount /servlet/* controller
JkMount /* controller
创建如下两个日志文件:
# touch /opt/apache/logs/mod_jk.log
# touch /opt/apache/logs/jk-runtime-status
----->重启apache程序(生产中最好将其加入到服务列表中,或者至少降入到PATH变量中)
# cd /opt/apache/bin
# ./apachectl stop
# ./apachectl start
修改test.jsp测试网页,使其可以显示SessionID
# vim /opt/webapps/test.jsp
添加如下内容:
<BR><%
out.println("<br> ID " + session.getId()+"<br>");%>
验证可以通过80端口访问test.jsp页面,其不同的访问来自不同的tomcat节点,观察是否实现了负载均衡,此次试验的地址如下
http://192.168.50.138/webapps/test.jsp
验证结果如下图所示:
如果达不到多用户并发访问的效果,可以是用ab命令+netstat命令,模拟多用户访问,并观察系统端口的连接状态
下图示使用ab命令模仿多用户连接情况下,tcp连接情况,从中我们可以看出,三个tomcat的8109、8209、8309端口上都有连接。