实验环境:
    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,验证结果如下图:

wKiom1VB4vGS-oI_AAEBPC3qJiM025.jpg


        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,验证结果如下图:

wKioL1VB5IvTl6o5AAELwYft7g4999.jpg


        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,验证结果如下图:

wKiom1VB4znjRTU1AAEPSW0mGBg122.jpg


    ----->编译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!”说明编译安装成功,验证结果如下所示:

wKioL1VB5ZaB3rHlAAD7aaKyw5w483.jpg


    ----->编译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

        验证结果如下图所示:

wKioL1VB5evRXyN3AAErW0LdYLA060.jpg

wKiom1VB5IOwg_-HAAE2dafxXJU863.jpg

wKioL1VB5eyTL6TZAAE0RcABPu8978.jpg



        如果达不到多用户并发访问的效果,可以是用ab命令+netstat命令,模拟多用户访问,并观察系统端口的连接状态

        下图示使用ab命令模仿多用户连接情况下,tcp连接情况,从中我们可以看出,三个tomcat的8109、8209、8309端口上都有连接。


wKioL1VB5g3TyVW6AAblJnYijlM109.jpg