Web app

Jvm: Java VM

bootstrap

连接器:

  AJP

  HTTP(web服务器)

  https

  proxy

  java类来实现

APR: Apache Portable Runtime(java可移植运行时环境)

  AJP:

    类

  类

 

TI1:

  http:80, ajp:8009

TI2:

  http:80

多实例

MySQL: 同一个物理服务器

  进行多个MySQL, 3306

  3307

CATALINA_HOME

CATALINA_BASE

NetworkManager

network

standalone 自我运行

mod_proxy

mod_proxy_http

mod_proxy_ajp

mod_proxy_banlancer

mod_jk

mod_jk2

ajp: 效率高

 

安装apache

6.4.1 安装apr和apr-util

 

可以从http://apr.apache.org/获取apr源码,目前最新的版本是1.4.6。

[root@www.magedu.com ~]# tar xf apr-1.4.6.tar.bz2

[root@www.magedu.com ~]# cd apr-1.4.6

[root@www.magedu.com ~]# ./configure --prefix=/usr/local/apr --disable-ipv6

[root@www.magedu.com ~]# make && make install

apr-util是apr的工具库,其可以让程序员更好的使用apr的功能。可以从http://apr.apache.org/获取apr源码,目前最新的版本是1.4.1。

[root@www.magedu.com ~]# tar xf apr-util-1.4.1.tar.bz2

[root@www.magedu.com ~]# cd apr-util-1.4.1

[root@www apr-util-1.4.1]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr

[root@www apr-util-1.4.1]# make && make install

6.4.2 安装apache

httpd目前最新的2.4系列版本中引入了event MPM,其在性能上较之其它MPM有了较大的提升,

[root@www.magedu.com ~]# tar xf httpd-2.4.2

[root@www.magedu.com ~]# cd httpd-2.4.2

[root@www.magedu.com ~]# ./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-mpms-shared=all --with-mpm=event --enable-proxy --enable-proxy-http --enable-proxy-ajp --enable-proxy-balancer --enable-lbmethod-heartbeat --enable-heartbeat --enable-slotmem-shm --enable-slotmem-plain --enable-watchdog

[root@www.magedu.com ~]# make && make install

为apache提供init脚本,实现服务的控制。建立/etc/rc.d/init.d/httpd文件,并添加如下内容:

这是个脚本文件,因此需要执行权限;同时,为了让httpd服务能够开机自动启动,还需要将其添加至服务列表,并设置其在3或5级别下自动运行。

chmod +x /etc/rc.d/init.d/httpd

chkconfig --add httpd

chkconfig --level 35 httpd on

 

6.5 配置apache通过mod_proxy模块与Tomcat连接

要使用mod_proxy与Tomcat实例连接,需要apache已经装载mod_proxy、mod_proxy_http、mod_proxy_ajp和proxy_balancer_module(实现Tomcat集群时用到)等模块:

# /usr/local/apache/bin/httpd -D DUMP_MODULES | grep proxy

  proxy_module (shared)

  proxy_connect_module (shared)

  proxy_ftp_module (shared)

  proxy_http_module (shared)

  proxy_fcgi_module (shared)

  proxy_scgi_module (shared)

  proxy_ajp_module (shared)

  proxy_balancer_module (shared)

  proxy_express_module (shared)

 

2、在httpd.conf的全局配置段或虚拟主机中添加如下内容:

ProxyVia Off

ProxyRequests Off(是否开启apache正向代理功能)

ProxyPreserveHost Off(支持虚拟主机)

<Proxy *>(对那个路径访问如何完成授权)

Require all granted(允许所有用户访问)

</Proxy>

  ProxyPass / ajp://172.16.100.1:8009/(把基于ajp协议代理到后端主机)

  ProxyPassReverse / ajp://172.16.100.1:8009/(避免绕过后端服务器)

<Location / >

  Require all granted

</Location>

 

或让apache跟Tomcat的http连接器进行整合:

ProxyVia Off

ProxyRequests Off

ProxyPass / http://172.16.100.1:8080/(基于http向后代理)

ProxyPassReverse / http://172.16.100.1:8080/

<Proxy *>

  Require all granted

</Proxy>

<Location / >

  Require all granted

</Location>

 

关于如上apache指令的说明:

ProxyPreserveHost {On|Off}:如果启用此功能,代理会将用户请求报文中的Host:行发送给后端的服务器,而不再使用ProxyPass指定的服务器地址。如果想在反向代理中支持虚拟主机,则需要开启此项,否则就无需打开此功能。

ProxyVia {On|Off|Full|Block}:用于控制在http首部是否使用Via:,主要用于在多级代理中控制代理请求的流向。默认为Off,即不启用此功能;On表示每个请求和响应报文均添加Via:;Full表示每个Via:行都会添加当前apache服务器的版本号信息;Block表示每个代理请求报文中的Via:都会被移除。

ProxyRequests {On|Off}:是否开启apache正向代理的功能;启用此项时为了代理http协议必须启用mod_proxy_http模块。同时,如果为apache设置了ProxyPass,则必须将ProxyRequests设置为Off。

ProxyPass [path] !|url [key=value key=value ...]]:将后端服务器某URL与当前服务器的某虚拟路径关联起来作为提供服务的路径,path为当前服务器上的某虚拟路径,url为后端服务器上某URL路径。使用此指令时必须将ProxyRequests的值设置为Off。需要注意的是,如果path以“/”结尾,则对应的url也必须以“/”结尾,反之亦然。

另外,mod_proxy模块在httpd 2.1的版本之后支持与后端服务器的连接池功能,连接在按需创建在可以保存至连接池中以备进一步使用。连接池大小或其它设定可以通过在ProxyPass中使用key=value的方式定义。常用的key如下所示:

◇ min:连接池的最小容量,此值与实际连接个数无关,仅表示连接池最小要初始化的空间大小。

◇ max:连接池的最大容量,每个MPM都有自己独立的容量;都值与MPM本身有关,如Prefork的总是为1,而其它的则取决于ThreadsPerChild指令的值。

◇ loadfactor:用于负载均衡集群配置中,定义对应后端服务器的权重,取值范围为1-100。

◇ retry:当apache将请求发送至后端服务器得到错误响应时等待多长时间以后再重试。单位是秒钟。

 

如果Proxy指定是以balancer://开头,即用于负载均衡集群时,其还可以接受一些特殊的参数,如下所示:

◇lbmethod:apache实现负载均衡的调度方法,默认是byrequests,即基于权重将统计请求个数进行调度,bytraffic则执行基于权重的流量计数调度,bybusyness通过考量每个后端服务器的当前负载进行调度。
◇ maxattempts:放弃请求之前实现故障转移的次数,默认为1,其最大值不应该大于总的节点数。

◇ nofailover:取值为On或Off,设置为On时表示后端服务器故障时,用户的session将损坏;因此,在后端服务器不支持session复制时可将其设置为On。

◇ stickysession:调度器的sticky session的名字,根据web程序语言的不同,其值为JSESSIONID或PHPSESSIONID。

上述指令除了能在banlancer://或ProxyPass中设定之外,也可使用ProxySet指令直接进行设置,如:

<Proxy balancer://hotcluster>

BalancerMember http://www1.magedu.com:8080 loadfactor=1

BalancerMember http://www2.magedu.com:8080 loadfactor=2

ProxySet lbmethod=bytraffic

</Proxy>

 

ProxyPassReverse:用于让apache调整HTTP重定向响应报文中的Location、Content-Location及URI标签所对应的URL,在反向代理环境中必须使用此指令避免重定向报文绕过proxy服务器。


6.6 配置apache通过mod_jk模块与Tomcat连接

 

mod_jk是ASF的一个项目,是一个工作于apache端基于AJP协议与Tomcat通信的连接器,它是apache的一个模块,是AJP协议的客户端(服务端是Tomcat的AJP连接器)。

[root@www.magedu.com ~]# tar xf tomcat-connectors-1.2.37-src.tar.gz

[root@www.magedu.com ~]# cd tomcat-connectors-1.2.37-src/native/

[root@www.magedu.com ~]# ./configure --with-apxs=/usr/local/apache/bin/apxs

[root@www.magedu.com ~]# make && make install

 

apache要使用mod_jk连接器,需要在启动时加载此连接器模块。为了便于管理与mod_jk模块相关的配置,这里使用一个专门的配置文件/etc/httpd/extra/httpd-jk.conf来保存相关指令及其设置。其内容如下:

# Load the mod_jk

LoadModule jk_module modules/mod_jk.so(指定装载jk模块)

JkWorkersFile /etc/httpd/extra/workers.properties(使用worker子进程跟后端的tomcat进行通信)

JkLogFile logs/mod_jk.log(jk模块Log文件)

JkLogLevel debug(日志级别)

JkMount /* TomcatA(把那个uri路径送到那个tomcat上去)

JkMount /status/ stat1

除了需要使用LoadModule指令在apache中装载模块外,mod_jk还需要在apache的主配置文件中设置其它一些指令来配置其工作属性。如JkWorkersFile则用于指定保存了worker相关工作属性定义的配置文件,JkLogFile则用于指定mod_jk模块的日志文件,JkLogLevel则可用于指定日志的级别(info, error, debug),此外还可以使用JkRequestLogFormat自定义日志信息格式。而JkMount(格式: JkMount <URL to match> <Tomcat worker name>)指定则用于控制URL与Tomcat workers的对应关系。

为了让apache能使用/etc/httpd/extra/httpd-jk.conf配置文件中的配置信息,需要编辑/etc/httpd/httpd.conf,添加如下一行:
Include /etc/httpd/extra/httpd-jk.conf

 

对于apache代理来说,每一个后端的Tomcat实例中的engine都可以视作一个worker,而每一个worker的地址、连接器的端口等信息都需要在apache端指定以便apache可以识别并使用这些worker。约定俗成,配置这些信息的文件通常为workers.properties,其具体路径则是使用前面介绍过的JkWorkersFile指定的,在apache启动时,mod_jk会扫描此文件获取每一个worker的配置信息。比如,我们这里使用/etc/httpd/extra/workers.properties。

workers.properties文件一般由两类指令组成:一是mod_jk可以连接的各worker名称列表,二是每一个worker的属性配置信息。它们分别遵循如下使用语法。

worker.list = < a comma separated list of worker names >
worker. <worker name> .<property> = <property value>

其中worker.list指令可以重复指定多次,而worker name则是Tomcat中engine组件jvmRoute参数的值。如:
worker.TomcatA.host=172.16.100.1

根据其工作机制的不同,worker有多种不同的类型,这是需要为每个worker定义的一项属性woker.<work name>.type。常见的类型如下:

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

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

◇ status:用户显示分布式环境中各实际worker工作状态的特殊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定义此属性;

 

另外,在负载均衡模式中,专用的属性还有:

◇balance_workers:用于负载均衡模式中的各worker的名称列表,需要注意的是,出现在此处的worker名称一定不能在任何worker.list属性列表中定义过,并且worker.list属性中定义的worker名字必须包含负载均衡worker。具体示例请参见后文中的定义。

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

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

根据前文中的指定,这里使用/etc/httpd/extra/workers.properties来定义一个名为TomcatA的worker,并为其指定几个属性。文件内容如下:

worker.list=TomcatA,stat1(stat1是用来让我们当前输出jk的状态信息的专用由apache提供的内嵌的worker)

worker.TomcatA.port=8009(端口)

worker.TomcatA.host=172.16.100.1(后端主机)

worker.TomcatA.type=ajp13(ajp版本)

worker.TomcatA.lbfactor=1(权重)

worker.stat1.type = status(状态)

至此,一个基于mod_jk模块与后端名为TomcatA的worker通信的配置已经完成,重启httpd服务即可生效。

 

环境:启用三台linux虚拟机,rhel6作为前端apache服务器,内网IP地址为192.168.10.7,两台rhel5.8作为tomcat服务器,其中一台为TC1,IP地址为192.168.10.8,另一台为TC2,IP地址为192.168.10.9,网关均指向前端apache服务器的内网接口192.168.10.7;

前端apache服务器:

[root@Smoke ~]# iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j SNAT --to-source 172.16.100.106(向nat表的postroutrouting添加规则,-s指定源,
-j指定动作,--to-source指定转换后的地址)

TC2:

[root@localhost ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
172.16.100.0    0.0.0.0         255.255.255.0   U     0      0        0 eth1
192.168.10.0    0.0.0.0         255.255.255.0   U     0      0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     0      0        0 eth1
0.0.0.0         192.168.10.7    0.0.0.0         UG    0      0        0 eth0
[root@localhost ~]# ping 192.168.10.7(ping测试到达192.168.10.7)
PING 192.168.10.7 (192.168.10.7) 56(84) bytes of data.
64 bytes from 192.168.10.7: icmp_seq=1 ttl=64 time=0.679 ms
64 bytes from 192.168.10.7: icmp_seq=2 ttl=64 time=0.224 ms

--- 192.168.10.7 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 0.224/0.451/0.679/0.228 ms
[root@localhost ~]# ping 172.16.100.106(ping测试到达172.16.100.106)
PING 172.16.100.106 (172.16.100.106) 56(84) bytes of data.
64 bytes from 172.16.100.106: icmp_seq=1 ttl=64 time=2.79 ms
64 bytes from 172.16.100.106: icmp_seq=2 ttl=64 time=0.232 ms

--- 172.16.100.106 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 0.232/1.512/2.793/1.281 ms

前端apache服务器:

[root@Smoke ~]# cat /proc/sys/net/ipv4/ip_forward(查看网卡转发)
0
[root@Smoke ~]# echo 1 > /proc/sys/net/ipv4/ip_forward(打开网卡转发)

TC2:

[root@localhost ~]# lftp 172.16.0.1(连接ftp服务器)
lftp 172.16.0.1:~> cd pub/Sources(切换到pub/Sources目录)
lftp 172.16.0.1:/pub/Sources> cd tomcat/(切换到tomcat目录)
lftp 172.16.0.1:/pub/Sources/tomcat> get apache-tomcat-7.0.33.tar.gz(下载apache-tomcat)
635165 bytes transferred
lftp 172.16.0.1:/pub/Sources/tomcat> cd ..(切换到上级目录)
lftp 172.16.0.1:/pub/Sources> cd jdk/(切换到jdk目录)
lftp 172.16.0.1:/pub/Sources/jdk> get jdk-6u21-linux-i586-rpm.bin(下载jdk-6u21软件)
79491215 bytes transferred in 26 seconds (2.86M/s)
lftp 172.16.0.1:/pub/Sources/jdk> bye(退出)
[root@localhost ~]# scp apache-tomcat-7.0.33.tar.gz jdk-6u21-linux-i586-rpm.bin 192.168.10.8:/root/(复制apache-tomcat和jdk软件到192.168.10.8
的/root目录)
The authenticity of host '192.168.10.8 (192.168.10.8)' can't be established.
RSA key fingerprint is ea:32:fd:b5:e6:d2:75:e2:c2:c2:8c:63:d4:82:4c:48.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.10.8' (RSA) to the list of known hosts.
root@192.168.10.8's password: 
apache-tomcat-7.0.33.tar.gz                                                                                  100% 7660KB   7.5MB/s   00:00
jdk-6u21-linux-i586-rpm.bin                                                                                  100%   76MB  25.3MB/s   00:03

TC1:

[root@localhost ~]# chmod +x jdk-6u21-linux-i586-rpm.bin(给jdk文件执行权限)
[root@localhost ~]# ./jdk-6u21-linux-i586-rpm.bin(执行jdk文件)

For more information on what data Registration collects and 
how it is managed and used, see:
http://java.sun.com/javase/registration/JDKRegistrationPrivacy.html

Press Enter to continue.....

TC2:

[root@localhost ~]# chmod +x jdk-6u21-linux-i586-rpm.bin(给jdk文件执行权限)
[root@localhost ~]# ./jdk-6u21-linux-i586-rpm.bin(执行jdk文件)

For more information on what data Registration collects and 
how it is managed and used, see:
http://java.sun.com/javase/registration/JDKRegistrationPrivacy.html

Press Enter to continue.....

前端apache服务器:

[root@Smoke ~]# lftp 172.16.0.1(连接ftp服务器)
cd ok, cwd=/pub/Sources
lftp 172.16.0.1:/pub/Sources> cd new_lamp/(切换到new_lampp目录)
lftp 172.16.0.1:/pub/Sources/new_lamp> get httpd-2.4.4.tar.bz2(下载httpd-2.4.4软件)
4780289 bytes transferred in 9 seconds (491.8K/s)
lftp 172.16.0.1:/pub/Sources/new_lamp> bye(退出)
[root@Smoke ~]# rpm -q apr(查看是否安装apr)
apr-1.3.9-5.el6_2.i686
[root@Smoke ~]# rpm -q apr-util(查看是否安装apr-utils)
apr-util-1.3.9-3.el6_0.1.i686
[root@Smoke ~]# yum -y install apr-devel apr-util-devel(通过yum源安装apr-devel和apr-util-devel)

TC1:

[root@localhost ~]# ls(查看当前目录文件及子目录)
anaconda-ks.cfg              install.log.syslog           sun-javadb-client-10.5.3-0.2.i386.rpm  sun-javadb-demo-10.5.3-0.2.i386.rpm
apache-tomcat-7.0.33.tar.gz  jdk-6u21-linux-i586.rpm      sun-javadb-common-10.5.3-0.2.i386.rpm  sun-javadb-docs-10.5.3-0.2.i386.rpm
install.log                  jdk-6u21-linux-i586-rpm.bin  sun-javadb-core-10.5.3-0.2.i386.rpm    sun-javadb-javadoc-10.5.3-0.2.i386.rpm
[root@localhost ~]# vim /etc/profile.d/java.sh(编辑java.sh环境变量文件)

export JAVA_HOME=/usr/java/latest
export PATH=$PATH:$JAVA_HOME/bin

[root@localhost ~]# . /etc/profile.d/java.sh(读取java.sh文件)
[root@localhost ~]# java -version(查看java版本)
java version "1.4.2"
gij (GNU libgcj) version 4.1.2 20080704 (Red Hat 4.1.2-52)

Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
[root@localhost ~]# tar xf apache-tomcat-7.0.33.tar.gz -C /usr/local/(解压apache-tomcat到/usr/local目录,x解压,f后面跟文件名,-C更改解压目录)
[root@localhost ~]# cd /usr/local/(切换到/usr/local目录)
[root@localhost local]# ln -sv apache-tomcat-7.0.33 tomcat(给apache-tomcat创建软连接叫tomcat,-s软连接,-v显示创建过程)
create symbolic link `tomcat' to `apache-tomcat-7.0.33'
[root@localhost local]# ll(查看当前目录文件及子目录详细信息)
total 84
drwxr-xr-x 9 root root 4096 Nov 22 03:26 apache-tomcat-7.0.33
drwxr-xr-x 2 root root 4096 Oct  1  2009 bin
drwxr-xr-x 2 root root 4096 Oct  1  2009 etc
drwxr-xr-x 2 root root 4096 Oct  1  2009 games
drwxr-xr-x 2 root root 4096 Oct  1  2009 include
drwxr-xr-x 2 root root 4096 Oct  1  2009 lib
drwxr-xr-x 2 root root 4096 Oct  1  2009 libexec
drwxr-xr-x 2 root root 4096 Oct  1  2009 sbin
drwxr-xr-x 4 root root 4096 Nov 22  2014 share
drwxr-xr-x 2 root root 4096 Oct  1  2009 src
lrwxrwxrwx 1 root root   20 Nov 22 03:28 tomcat -> apache-tomcat-7.0.33
[root@localhost local]# vim /etc/profile.d/tomcat.sh(编辑tomcat.sh环境变量文件)

export CATALINA_HOME=/usr/local/tomcat
export PATH=$PATH:$CATALINA_HOME/bin

[root@localhost local]# . /etc/profile.d/tomcat.sh(读取tomcat.sh文件)
[root@localhost local]# catalina.sh version(查看catalina版本号)
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/java/latest
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Server version: Apache Tomcat/7.0.33
Server built:   Nov 18 2012 04:15:21
Server number:  7.0.33.0
OS Name:        Linux
OS Version:     2.6.18-308.el5
Architecture:   i386
JVM Version:    1.6.0_21-b06
JVM Vendor:     Sun Microsystems Inc.
[root@localhost local]# cd /usr/local/tomcat/conf/(切换到/usr/local/tomcat/conf)
[root@localhost conf]# ls(查看当前目录文件及子目录)
catalina.policy  catalina.properties  context.xml  logging.properties  server.xml  tomcat-users.xml  web.xml
[root@localhost conf]# vim server.xml(编辑server.xml配置文件)    

    <Engine name="Catalina" defaultHost="www.magedu.com" jvmRoute="TomcatA">(默认虚拟主机)

      </Host>
      <Host name="www.magedu.com"  appBase="/web"
            unpackWARs="true" autoDeploy="true">
        <Context path="" docBase="webapps" reLoadable="true" />
      </Host>
    </Engine>
  </Service>
</Server>

[root@localhost conf]# catalina.sh configtest(测试catalina配置文件语法)
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/java/latest
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Nov 22, 2014 3:43:17 AM org.apache.catalina.core.AprLifecycleListener init
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.libr
ary.path: /usr/java/jdk1.6.0_21/jre/lib/i386/client:/usr/java/jdk1.6.0_21/jre/lib/i386:/usr/java/jdk1.6.0_21/jre/../lib/i386:/usr/java/pack
ages/lib/i386:/lib:/usr/lib Nov 22, 2014 3:43:17 AM org.apache.tomcat.util.digester.SetPropertiesRule begin WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'reLoadable' to 'true' did not find a matching property. Nov 22, 2014 3:43:17 AM org.apache.coyote.AbstractProtocol init INFO: Initializing ProtocolHandler ["http-bio-8080"] Nov 22, 2014 3:43:17 AM org.apache.coyote.AbstractProtocol init INFO: Initializing ProtocolHandler ["ajp-bio-8009"] Nov 22, 2014 3:43:17 AM org.apache.catalina.startup.Catalina load INFO: Initialization processed in 579 ms [root@localhost conf]# mkdir -pv /web/webapps(创建webapps目录,-p递归创建,-v显示创建过程) mkdir: created directory `/web' mkdir: created directory `/web/webapps' [root@localhost conf]# cd /web/webapps/(切换到/web/apps/目录) [root@localhost webapps]# ls(查看当前目录文件及子目录) [root@localhost webapps]# vim index.jsp(编辑index.jsp文件内容) <%@ page language="java" %> <html> <head><title>TomcatA</title></head> <body> <h1><font color="red">TomcatA </font></h1> <table align="centre" border="1"> <tr> <td>Session ID</td> <% session.setAttribute("abc","abc"); %> <td><%= session.getId() %></td> </tr> <tr> <td>Created on</td> <td><%= session.getCreationTime() %></td> </tr> </table> </body> </html> [root@localhost webapps]# catalina.sh start(启动catalina服务) Using CATALINA_BASE: /usr/local/tomcat Using CATALINA_HOME: /usr/local/tomcat Using CATALINA_TMPDIR: /usr/local/tomcat/temp Using JRE_HOME: /usr/java/latest Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar [root@localhost webapps]# netstat -tnlp(查看系统服务,-t代表tcp,-n以数字显示,-l监听端口,-p显示服务名称) Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 127.0.0.1:2208 0.0.0.0:* LISTEN 3494/./hpiod tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 3175/portmap tcp 0 0 0.0.0.0:852 0.0.0.0:* LISTEN 3214/rpc.statd tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 3515/sshd tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 3527/cupsd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 3564/sendmail tcp 0 0 127.0.0.1:6010 0.0.0.0:* LISTEN 5434/sshd tcp 0 0 127.0.0.1:2207 0.0.0.0:* LISTEN 3499/python tcp 0 0 ::ffff:127.0.0.1:8005 :::* LISTEN 15742/java tcp 0 0 :::8009 :::* LISTEN 15742/java tcp 0 0 :::8080 :::* LISTEN 15742/java tcp 0 0 :::22 :::* LISTEN 3515/sshd tcp 0 0 ::1:6010 :::* LISTEN 5434/sshd

测试:通过windows的ie浏览器访问192.168.10.8:8080;

前端apache服务器:

[root@Smoke ~]# tar xf httpd-2.4.4.tar.bz2(解压httpd-2.4.4软件包) 
[root@Smoke ~]# cd httpd-2.4.4(切换到httpd-2.4.4目录)
[root@Smoke httpd-2.4.4]# ls(查看当前目录文件及子目录)
ABOUT_APACHE     apache_probes.d  BuildBin.dsp   configure     httpd.dsp   InstallBin.dsp  Makefile.in   NWGNUmakefile     ROADMAP  test
acinclude.m4     ap.d             buildconf      configure.in  httpd.spec  LAYOUT          Makefile.win  os                server   VERSIONING
Apache-apr2.dsw  build            CHANGES        docs          include     libhttpd.dsp    modules       README            srclib
Apache.dsw       BuildAll.dsp     config.layout  emacs-style   INSTALL     LICENSE         NOTICE        README.platforms  support
[root@Smoke httpd-2.4.4]# ./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd --enable-so --enable-ssl --enable-cgi --enable-rewrite
 --with-zlib --with-pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-mpms-shared=all --with-mpm=event --enable-proxy
 --enable-proxy-http --enable-proxy-ajp --enable-proxy-balancer  --enable-lbmethod-heartbeat --enable-heartbeat --enable-slotmem-shm  --enable
-slotmem-plain --enable-watchdog(配置httpd)

checking for APR... configure: error: the --with-apr parameter is incorrect. It must specify an install prefix, a build directory, or an apr-
config file

提示:没有安装ARP;
[root@Smoke httpd-2.4.4]# cd(切换到用户家目录)
[root@Smoke ~]# lftp 172.16.0.1(连接ftp服务器)
cd ok, cwd=/pub/Sources
lftp 172.16.0.1:/pub/Sources> cd new_lamp/(切换到new_lamp目录)
lftp 172.16.0.1:/pub/Sources/new_lamp> mget apr-1.4.6.tar.bz2 apr-util-1.5.2.tar.bz2(下载apr和apr-util)
Total 2 files transferred
lftp 172.16.0.1:/pub/Sources/new_lamp> bye(退出)
[root@Smoke ~]# tar xf apr-1.4.6.tar.bz2(加压apr-1.4.6)
[root@Smoke ~]# cd apr-1.4.6(切换到apr-1.4.6)
[root@Smoke apr-1.4.6]# ls(查看当前目录文件及子目录)
apr-config.in  apr.mak    build             CHANGES        docs        helpers     libapr.mak  Makefile.in   mmap           passwd  shmem
test           apr.dep    apr.pc.in         buildconf      config.layout           dso         include       libapr.rc      Makefile.win
network_io     poll       strings           threadproc     apr.dsp                 apr.spec    build.conf    configure      emacs-mode 
libapr.dep     LICENSE    memory            NOTICE         random                  support     time          apr.dsw        atomic
build-outputs.mk          configure.in      file_io        libapr.dsp              locks       misc          NWGNUmakefile  README
tables         user
[root@Smoke apr-1.4.6]# ./configure --prefix=/usr/local/apr --disable-ipv6(配置apr)

rm: cannot remove `libtoolT': No such file or directory(可以忽略不用关心)
config.status: executing default commands

[root@Smoke apr-1.4.6]# make && make install(编译并安装)
[root@Smoke ~]# tar xf apr-util-1.5.2.tar.bz2(解压apr-util-1.5.2)
[root@Smoke ~]# cd apr-util-1.5.2(切换到apr-util-1.5.2)
[root@Smoke apr-util-1.5.2]# ./configure  --prefix=/usr/local/apr-util  --with-apr=/usr/local/apr(配置apr-util)
[root@Smoke apr-util-1.5.2]# make && make install(编译并安装)
[root@Smoke apr-1.4.6]# cd(切换到用户家目录)
[root@Smoke ~]# cd httpd-2.4.4(切换到httpd-2.4.4)
[root@Smoke httpd-2.4.4]# ./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd --enable-so --enable-ssl --enable-cgi --enable-rewri
te --with-zlib --with-pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-mpms-shared=all --with-mpm=event --enable-p
roxy --enable-proxy-http --enable-proxy-ajp --enable-proxy-balancer  --enable-lbmethod-heartbeat --enable-heartbeat --enable-slotmem-shm  --e
nable-slotmem-plain --enable-watchdog(配置httpd)
[root@Smoke httpd-2.4.4]# make && make install(编译并安装) 
[root@Smoke httpd-2.4.4]# vim /etc/init.d/httpd(编辑httpd启动脚本)

#!/bin/bash
#
# httpd        Startup script for the Apache HTTP Server
#
# chkconfig: - 85 15
# description: Apache is a World Wide Web server.  It is used to serve \
#	       HTML files and CGI.
# processname: httpd
# config: /etc/httpd/conf/httpd.conf
# config: /etc/sysconfig/httpd
# pidfile: /var/run/httpd.pid

# Source function library.
. /etc/rc.d/init.d/functions

if [ -f /etc/sysconfig/httpd ]; then
        . /etc/sysconfig/httpd
fi

# Start httpd in the C locale by default.
HTTPD_LANG=${HTTPD_LANG-"C"}

# This will prevent initlog from swallowing up a pass-phrase prompt if
# mod_ssl needs a pass-phrase from the user.
INITLOG_ARGS=""

# Set HTTPD=/usr/sbin/httpd.worker in /etc/sysconfig/httpd to use a server
# with the thread-based "worker" MPM; BE WARNED that some modules may not
# work correctly with a thread-based MPM; notably PHP will refuse to start.

# Path to the apachectl script, server binary, and short-form for messages.
apachectl=/usr/local/apache/bin/apachectl
httpd=${HTTPD-/usr/local/apache/bin/httpd}
prog=httpd
pidfile=${PIDFILE-/var/run/httpd.pid}
lockfile=${LOCKFILE-/var/lock/subsys/httpd}
RETVAL=0

start() {
        echo -n $"Starting $prog: "
        LANG=$HTTPD_LANG daemon --pidfile=${pidfile} $httpd $OPTIONS
        RETVAL=$?
        echo
        [ $RETVAL = 0 ] && touch ${lockfile}
        return $RETVAL
}

stop() {
	echo -n $"Stopping $prog: "
	killproc -p ${pidfile} -d 10 $httpd
	RETVAL=$?
	echo
	[ $RETVAL = 0 ] && rm -f ${lockfile} ${pidfile}
}
reload() {
    echo -n $"Reloading $prog: "
    if ! LANG=$HTTPD_LANG $httpd $OPTIONS -t >&/dev/null; then
        RETVAL=$?
        echo $"not reloading due to configuration syntax error"
        failure $"not reloading $httpd due to configuration syntax error"
    else
        killproc -p ${pidfile} $httpd -HUP
        RETVAL=$?
    fi
    echo
}

# See how we were called.
case "$1" in
  start)
	start
	;;
  stop)
	stop
	;;
  status)
        status -p ${pidfile} $httpd
	RETVAL=$?
	;;
  restart)
	stop
	start
	;;
  condrestart)
	if [ -f ${pidfile} ] ; then
		stop
		start
	fi
	;;
  reload)
        reload
	;;
  graceful|help|configtest|fullstatus)
	$apachectl $@
	RETVAL=$?
	;;
  *)
	echo $"Usage: $prog {start|stop|restart|condrestart|reload|status|fullstatus|graceful|help|configtest}"
	exit 1
esac

exit $RETVAL

[root@Smoke httpd-2.4.4]# chmod +x /etc/rc.d/init.d/httpd(给httpd执行权限)
[root@Smoke httpd-2.4.4]# chkconfig --add httpd(将httpd添加进服务列表)
[root@Smoke httpd-2.4.4]# service httpd configtest(测试httpd配置文件)
Syntax OK
[root@Smoke httpd-2.4.4]# service httpd start(启动httpd)
正在启动 httpd:                                           [确定]
[root@Smoke httpd-2.4.4]# /usr/local/apache/bin/httpd -D DUMP_MODULES(查看httpd已经装载的模块)
Loaded Modules:
 core_module (static)
 so_module (static)
 http_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)
 proxy_module (shared)
 proxy_connect_module (shared)
 proxy_ftp_module (shared)
 proxy_http_module (shared)
 proxy_fcgi_module (shared)
 proxy_scgi_module (shared)
 proxy_ajp_module (shared)
 proxy_balancer_module (shared)
 proxy_express_module (shared)
 lbmethod_byrequests_module (shared)(根据用户请求做负载均衡)
 lbmethod_bytraffic_module (shared)(根据流量做负载均衡)
 lbmethod_bybusyness_module (shared)(根据空闲与否做负载均衡)
 lbmethod_heartbeat_module (shared)
 mpm_event_module (shared)
 unixd_module (shared)
 status_module (shared)
 autoindex_module (shared)
 dir_module (shared)
 alias_module (shared)

提示:要使用mod_proxy与Tomcat实例连接,需要apache已经装载mod_proxy、mod_proxy_http、mod_proxy_ajp和proxy_balancer_module(实现Tomcat集群时用到)等模块;
[root@Smoke httpd-2.4.4]# cd /etc/httpd/(切换到/etc/httpd目录)
[root@Smoke httpd]# cp httpd.conf httpd.conf.bak(复制httpd.conf为httpd.conf.bak)
[root@Smoke httpd]# vim httpd.conf(编辑httpd.conf配置文件)

#DocumentRoot "/usr/local/apache/htdocs"(注释掉中心主机)

Include /etc/httpd/extra/httpd-proxy.conf(包含httpd-proxy.conf配置文件)

/DocumentRoot

[root@Smoke httpd]# cd extra/(切换到extra目录)
[root@Smoke extra]# vim httpd-proxy.conf(编辑httpd.proxy.conf配置文件)

<VirtualHost *:80>
  ProxyVia On
  ProxyRequests Off
  ProxyPass / http://192.168.10.8:8080/
  ProxyPassReverse / http://192.168.10.8:8080/
  <Proxy *>
    Require all granted
  </Proxy>
  <Location  / >
    Require all granted
  </Location>
</VirtualHost>

[root@Smoke extra]# service httpd configtest(检查httpd配置文件语法)
Syntax OK
[root@Smoke extra]# service httpd restart(重启httpd服务)
停止 httpd:                                               [失败]
正在启动 httpd:                                           [确定]
[root@Smoke extra]# tail /usr/local/apache/logs/error_log(查看error_log日志文件) 
[Thu Jun 23 12:18:09.889659 2016] [proxy_balancer:emerg] [pid 3306:tid 3077555904] AH01177: Failed to lookup provider 'shm' for 'slotmem':
 is mod_slotmem_shm loaded??
[Thu Jun 23 12:18:09.889823 2016] [:emerg] [pid 3306:tid 3077555904] AH00020: Configuration Failed, exiting
[Thu Jun 23 12:38:00.701315 2016] [proxy_balancer:emerg] [pid 3368:tid 3077752512] AH01177: Failed to lookup provider 'shm' for 'slotmem':
 is mod_slotmem_shm loaded??
[Thu Jun 23 12:38:00.701488 2016] [:emerg] [pid 3368:tid 3077752512] AH00020: Configuration Failed, exiting
[Thu Jun 23 12:38:30.022879 2016] [proxy_balancer:emerg] [pid 3382:tid 3078366912] AH01177: Failed to lookup provider 'shm' for 'slotmem':
 is mod_slotmem_shm loaded??
[Thu Jun 23 12:38:30.023049 2016] [:emerg] [pid 3382:tid 3078366912] AH00020: Configuration Failed, exiting
[Thu Jun 23 12:38:50.629203 2016] [proxy_balancer:emerg] [pid 3398:tid 3077711552] AH01177: Failed to lookup provider 'shm' for 'slotmem':
 is mod_slotmem_shm loaded??
[Thu Jun 23 12:38:50.629353 2016] [:emerg] [pid 3398:tid 3077711552] AH00020: Configuration Failed, exiting
[Thu Jun 23 12:38:51.831493 2016] [proxy_balancer:emerg] [pid 3413:tid 3077752512] AH01177: Failed to lookup provider 'shm' for 'slotmem':
 is mod_slotmem_shm loaded??
[Thu Jun 23 12:38:51.831762 2016] [:emerg] [pid 3413:tid 3077752512] AH00020: Configuration Failed, exiting
[root@Smoke apache]# vim /etc/httpd/httpd.conf(编辑httpd.conf配置文件)

ServerRoot "/usr/local/apache"
PidFile "/var/run/httpd.pid"

#LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
LoadModule slotmem_shm_module modules/mod_slotmem_shm.so

[root@Smoke apache]# service httpd restart(重启httpd服务)
停止 httpd:                                               [确定]
正在启动 httpd:                                           [确定]
[root@Smoke apache]# netstat -tnlp(查看系统服务,-t代表tcp,-n以数字显示,-l监听端口,-p显示服务名称)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      3943/httpd          
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      1127/sshd           
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      1203/master         
tcp        0      0 127.0.0.1:6010              0.0.0.0:*                   LISTEN      4529/sshd           
tcp        0      0 127.0.0.1:6011              0.0.0.0:*                   LISTEN      13364/sshd          
tcp        0      0 :::22                       :::*                        LISTEN      1127/sshd           
tcp        0      0 ::1:25                      :::*                        LISTEN      1203/master         
tcp        0      0 ::1:6010                    :::*                        LISTEN      4529/sshd           
tcp        0      0 ::1:6011                    :::*                        LISTEN      13364/sshd  
提示: 80端口已经启动了;

测试:通过Windows的ie浏览器访问172.16.100.106;

打开调试工具,提示响应首部有个Via,这就是ProxyVia On的意义,tomcat设置它的session是使用JSESSIONID来传递它的java应用程序的session id号的;

TC1:

[root@localhost ~]# cd /usr/local/tomcat/(切换到/usr/local/tomcat目录)
[root@localhost tomcat]# ls(查看当前目录文件及子目录)
bin  conf  lib  LICENSE  logs  NOTICE  RELEASE-NOTES  RUNNING.txt  temp  webapps  work
[root@localhost tomcat]# cd bin/(切换到bin目录)
[root@localhost bin]# ls(查看当前目录文件及子目录)
bootstrap.jar  catalina-tasks.xml            configtest.bat  daemon.sh   setclasspath.bat  shutdown.sh  tomcat-juli.jar       tool-wrapper.sh
catalina.bat   commons-daemon.jar            configtest.sh   digest.bat  setclasspath.sh   startup.bat  tomcat-native.tar.gz(tomcat端用于实
现跟前端基于异步高效通信的一种机制,而这个接口还得到apache官方站点去下载)  version.bat
catalina.sh    commons-daemon-native.tar.gz  cpappend.bat    digest.sh   shutdown.bat      startup.sh   tool-wrapper.bat      version.sh

前端apache服务器:

[root@Smoke apache]# cd(切换到用户家目录)
[root@Smoke ~]# lftp 172.16.0.1(连接ftp服务器)
cd ok, cwd=/pub/Sources
lftp 172.16.0.1:/pub/Sources> cd tomcat/(切换到tomcat目录)
lftp 172.16.0.1:/pub/Sources/tomcat> get tomcat-connectors-1.2.37-src.tar.gz(下载tomcat-connectors文件)
1528647 bytes transferred
lftp 172.16.0.1:/pub/Sources/tomcat> bye(退出)
[root@Smoke ~]# ls(查看当前目录文件及子目录)
anaconda-ks.cfg  apr-1.4.6.tar.bz2  apr-util-1.5.2.tar.bz2  httpd-2.4.4.tar.bz2  install.log.syslog
apr-1.4.6        apr-util-1.5.2     httpd-2.4.4             install.log          tomcat-connectors-1.2.37-src.tar.gz
[root@Smoke ~]# tar xf tomcat-connectors-1.2.37-src.tar.gz(解压tomcat-connectors文件,x解压,f后面跟文件名)
[root@Smoke ~]# cd tomcat-connectors-1.2.37-src/native/(切换到native目录)
[root@Smoke native]# ls(查看当前目录文件及子目录)
aclocal.m4  apache-2.0    BUILDING.txt  configure     docs  Makefile.am  netscape    README.txt  STATUS.txt
apache-1.3  buildconf.sh  common        configure.in  iis   Makefile.in  nt_service  scripts     TODO.txt
[root@Smoke native]# ./configure --with-apxs=/usr/local/apache/bin/apxs(配置tomcat-connectors)
[root@Smoke native]# make && make install(编译并安装)
[root@Smoke native]# ls(查看当前目录文件及子目录)
aclocal.m4  buildconf.sh  config.log     configure     iis       Makefile.am  nt_service  STATUS.txt
apache-1.3  BUILDING.txt  config.nice    configure.in  libtool   Makefile.in  README.txt  TODO.txt
apache-2.0  common        config.status  docs          Makefile  netscape     scripts
[root@Smoke native]# cd /usr/local/apache/modules/(切换到/usr/local/apache/modules目录)
[root@Smoke modules]# ls(查看当前目录文件及子目录)
httpd.exp               mod_authz_host.so   mod_file_cache.so           mod_negotiation.so     mod_session.so
mod_access_compat.so    mod_authz_owner.so  mod_filter.so               mod_proxy_ajp.so       mod_setenvif.so
mod_actions.so          mod_authz_user.so   mod_headers.so              mod_proxy_balancer.so  mod_slotmem_plain.so
mod_alias.so            mod_autoindex.so    mod_heartbeat.so            mod_proxy_connect.so   mod_slotmem_shm.so
mod_allowmethods.so     mod_buffer.so       mod_include.so              mod_proxy_express.so   mod_socache_dbm.so
mod_auth_basic.so       mod_cache_disk.so   mod_info.so                 mod_proxy_fcgi.so      mod_socache_memcache.so
mod_auth_digest.so      mod_cache.so        mod_jk.so(jk模块)                   mod_proxy_ftp.so       mod_socache_shmcb.so
mod_auth_form.so        mod_cgid.so         mod_lbmethod_bybusyness.so  mod_proxy_http.so      mod_speling.so
mod_authn_anon.so       mod_cgi.so          mod_lbmethod_byrequests.so  mod_proxy_scgi.so      mod_ssl.so
mod_authn_core.so       mod_dav_fs.so       mod_lbmethod_bytraffic.so   mod_proxy.so           mod_status.so
mod_authn_dbd.so        mod_dav.so          mod_lbmethod_heartbeat.so   mod_ratelimit.so       mod_substitute.so
mod_authn_dbm.so        mod_dbd.so          mod_log_config.so           mod_remoteip.so        mod_unique_id.so
mod_authn_file.so       mod_deflate.so      mod_log_debug.so            mod_reqtimeout.so      mod_unixd.so
mod_authn_socache.so    mod_dir.so          mod_logio.so                mod_request.so         mod_userdir.so
mod_authz_core.so       mod_dumpio.so       mod_mime.so                 mod_rewrite.so         mod_version.so
mod_authz_dbd.so        mod_env.so          mod_mpm_event.so            mod_sed.so             mod_vhost_alias.so
mod_authz_dbm.so        mod_expires.so      mod_mpm_prefork.so          mod_session_cookie.so  mod_watchdog.so
mod_authz_groupfile.so  mod_ext_filter.so   mod_mpm_worker.so           mod_session_dbd.so
[root@Smoke modules]# cd /etc/httpd/(切换到/etc/httpd目录)
[root@Smoke httpd]# vim httpd.conf(编辑httpd.conf)

#Include /etc/httpd/extra/httpd-proxy.conf
Include /etc/httpd/extra/httpd-jk.conf

[root@Smoke httpd]# cd extra/(切换到/extra目录)
[root@Smoke extra]# vim httpd-jk.conf(编辑httpd-jk.conf配置文件)

LoadModule  jk_module  modules/mod_jk.so
JkWorkersFile  /etc/httpd/extra/workers.properties
JkLogFile  logs/mod_jk.log
JkLogLevel  debug
JkMount  /*  TomcatA
JkMount  /status/  stat1

[root@Smoke extra]# vim workers.properties(编辑workers.properties文件)

worker.list=TomcatA,stat1
worker.TomcatA.port=8009
worker.TomcatA.host=192.168.10.8
worker.TomcatA.type=ajp13
worker.TomcatA.lbfactor=1
worker.stat1.type = status

[root@Smoke extra]# service httpd configtest(检查httpd配置文件语法)
Syntax OK
[root@Smoke extra]# service httpd restart(重启httpd服务)
停止 httpd:                                               [确定]
正在启动 httpd:                                           [确定]
[root@Smoke extra]# netstat -tnlp(查看系统服务,-t代表tcp,-n以数字显示,-l监听端口,-p显示服务名称)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      10335/httpd         
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      1127/sshd           
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      1203/master         
tcp        0      0 127.0.0.1:6010              0.0.0.0:*                   LISTEN      4529/sshd           
tcp        0      0 127.0.0.1:6011              0.0.0.0:*                   LISTEN      13364/sshd          
tcp        0      0 :::22                       :::*                        LISTEN      1127/sshd           
tcp        0      0 ::1:25                      :::*                        LISTEN      1203/master         
tcp        0      0 ::1:6010                    :::*                        LISTEN      4529/sshd           
tcp        0      0 ::1:6011                    :::*                        LISTEN      13364/sshd          

测试:通过Windows的ie浏览器访问172.16.100.106;

http://192.168.10.8:8080/forum

proxy_pass /forum http://192.168.10.8:8080/forum

mod_proxy均衡时无法stickeysession

mod_jk, mod_proxy

 

配置基于mod_jk的负载均衡

1、 为了避免用户直接访问后端Tomcat实例,影响负载均衡的效果,建议在Tomcat 7的各实例上禁用HTTP/1.1连接器。

2、为每一个Tomcat 7实例的引擎添加jvmRoute参数,并通过其为当前引擎设置全局惟一标识符。如下所示。需要注意的是,每一个实例的jvmRoute的值均不能相同。

<Engine name=”Standalone” defaultHost=”localhost” jvmRoute=” TomcatA ”>

而后去配置apache,修改/etc/httpd/extra/httpd-jk.conf为如下内容:

LoadModule jk_module modules/mod_jk.so

JkWorkersFile /etc/httpd/extra/workers.properties

JkLogFile logs/mod_jk.log

JkLogLevel debug

JkMount /* lbcluster1

JkMount /jkstatus/ stat1

 

编辑/etc/httpd/extra/workers.properties,添加如下内容:

worker.list = lbcluster1,stat1

worker.TomcatA.type = ajp13

worker.TomcatA.host = 172.16.100.1

worker.TomcatA.port = 8009

worker.TomcatA.lbfactor = 5

worker.TomcatB.type = ajp13

worker.TomcatB.host = 172.16.100.2

worker.TomcatB.port = 8009

worker.TomcatB.lbfactor = 5

worker.lbcluster1.type = lb

worker.lbcluster1.sticky_session = 1

worker.lbcluster1.balance_workers = TomcatA, TomcatB

worker.stat1.type = status

 

演示效果,在TomcatA上某context中(如/test),提供如下页面

<%@ page language="java" %>

<html>

  <head><title>TomcatA</title></head>

  <body>

    <h1><font color="red">TomcatA </font></h1>

    <table align="centre" border="1">

      <tr>

        <td>Session ID</td>

    <% session.setAttribute("abc","abc"); %>

        <td><%= session.getId() %></td>

      </tr>

      <tr>

        <td>Created on</td>

        <td><%= session.getCreationTime() %></td>

      </tr>

    </table>

  </body>

</html>

 

演示效果,在TomcatB上某context中(如/test),提供如下页面

<%@ page language="java" %>

<html>

  <head><title>TomcatB</title></head>

  <body>

    <h1><font color="blue">TomcatB </font></h1>

    <table align="centre" border="1">

      <tr>

        <td>Session ID</td>

    <% session.setAttribute("abc","abc"); %>

        <td><%= session.getId() %></td>
      </tr>

      <tr>
        <td>Created on</td>

        <td><%= session.getCreationTime() %></td>

      </tr>

    </table>

  </body>

</html>

 

理解Sticky sessions:


基于mod_proxy实现负载均衡

在httpd.conf的全局配置中配置如下内容:

ProxyRequests Off

<proxy balancer://lbcluster1>

BalancerMember ajp://172.16.100.1:8009 loadfactor=10 route=TomcatA

BalancerMember ajp://172.16.100.2:8009 loadfactor=10 route=TomcatB

</proxy>

 

<VirtualHost *:80>

ServerAdmin admin@magedu.com

ServerName www.magedu.com

ProxyPass / balancer://lbcluster1/ stickysession=jsessionid

ProxyPassReverse / balancer://lbcluster1/

</VirtualHost>

 

<Proxy balancer://hotcluster>

BalancerMember http://www1.magedu.com:8080 loadfactor=1

BalancerMember http://www2.magedu.com:8080 loadfactor=2

ProxySet lbmethod=bytraffic

</Proxy>


会话管理:

标准会话管理器和持久会话管理器

标准会话管理器(StandardManager):

<Manager className="org.apache.catalina.session.StandardManager"

  maxInactiveInterval="7200"/>

默认保存于$CATALINA_HOME/work/Catalina/<hostname>/<webapp-name>/下的SESSIONS.ser文件中。

maxActiveSessions:最多允许的活动会话数量,默认为-1,表示不限制;

maxInactiveInterval:非活动的会话超时时长,默认为60s;

pathname:会话文件的保存目录;

 

持久会话管理器(PersistentManager):

将会话数据保存至持久存储中,并且能在服务器意外中止后重新启动时重新加载这些会话信息。持久会话管理器支持将会话保存至文件存储(FileStore)或JDBC存储(JDBCStore)中。

保存至文件中的示例:

<Manager className="org.apache.catalina.session.PersistentManager"

  saveOnRestart="true">

  <Store className="org.apache.catalina.session.FileStore"

    directory="/data/tomcat-sessions"/>

</Manager>

每个用户的会话会被保存至directory指定的目录中的文件中,文件名为<session id>.session,并通过后台线程每隔一段时间(checkInterval参数定义,默认为60秒)检查一次超时会话。


保存至JDBCStore中的示例:

<Manager className="org.apache.catalina.session.PersistentManager"

  saveOnRestart="true">

  <Store className="org.apache.catalina.session.JDBCStore"

    driverName="com.mysql.jdbc.Driver"

    connectionURL="jdbc:mysql://localhost:3306/mydb?user=jb;password=pw"/>

</Manager>

 

用于mod_proxy状态信息的输出

<Location /balancer-manager>

  SetHandler balancer-manager

  Order Deny,Allow

  Allow from all

</Location>


如果使用虚拟主机实现反向代理,如何在对应的虚拟主机上完成状态信息输出:

ProxyRequests Off

<proxy balancer://lbcluster1>

  BalancerMember ajp://192.168.10.8:8009 loadfactor=1

  BalancerMember ajp://192.168.10.9:8009 loadfactor=1

  ProxySet lbmethod=bytraffic

</proxy>

 

<VirtualHost *:80>

  ServerName localhost

  ProxyVia On

  ProxyPass / balancer://lbcluster1/ stickysession=JSESSIONID|jsessionid nofailover=On

  ProxyPassReverse / balancer://lbcluster1/

  <Location /balancer-manager>

    SetHandler balancer-manager

    Proxypass !

    Require all granted

  </Location>

  <Proxy *>

    Require all granted

  </Proxy>

  <Location / >

    Require all granted

  </Location>

</VirtualHost>

 

Tomcat基于内存复制的集群

<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"

          channelSendOptions="8">

  <Manager className="org.apache.catalina.ha.session.DeltaManager"

          expireSessionsOnShutdown="false"

          notifyListenersOnReplication="true"/>

  <Channel className="org.apache.catalina.tribes.group.GroupChannel">

    <Membership className="org.apache.catalina.tribes.membership.McastService"

        address="228.50.10.1" bind="172.16.100.1" port="45564"

        frequency="500" dropTime="3000"/>

      <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"

              address="172.16.100.1" port="4000" autoBind="100"

              selectorTimeout="5000" maxThreads="6"/>

      <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">

        <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>

      </Sender>

    <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>

    <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>

  </Channel>

  <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"

            filter=".*\.gif;.*\.js;.*\.jpg;.*\.htm;.*\.html;.*\.txt;"/>

  <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>

  <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"

          tempDir="/tmp/war-temp/" deployDir="/tmp/war-deploy/"

        watchDir="/tmp/war-listen/" watchEnabled="false"/>

  <ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>

  <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>

</Cluster>

以上内容定义在Engine容器中,则表示对所有主机均启动用集群功能。如果定义在某Host中,则表示仅对此主机启用集群功能。

 

<Cluster>

  Serves as the container element for all of the clustering configuration tags.

<Manager>

  Specifies a clustered session manager implementation for a node to use.

<Channel>

  Configures the group communication “channel” implementation usedby the cluster.

<Membership>

  Configures how the cluster members (nodes) find each other and how they keep track of which nodes are up and running.

<Receiver>

  Specifies andconfigures the implementation of the code that receives cluster replication messages. The Receiver receives cluster messages that were sent by another node’s Sender.

<Sender>

  Specifies and configures the implementation of the code that sends replication messages out to other cluster members (nodes).

<Transport>

  Specifies the pluggable transport implementation that will be usedby a Sender (but not a Receiver).

<Interceptor>

  Code modules that can act on or modify messages leaving the Sender, or entering the Receiver, or both.

<Valve>

  Regular Tomcat Valve implementations that can modify requests and/or responses.

<ClusterListener>

Configures the intended recipient code modules of cluster messages, such as session replication messages. ClusterListeners are similar to Interceptors, but they’re meant to be the final destination for certain types of cluster messages, whereas Interceptors are listening into the communication between the sender and the Receiver’s ClusterListener, and may intervene.

此外,所有启用集群功能的web应用程序,其web.xml中都须添加<distributable/>才能实现集群功能。如果某web应用程序没有自己的web.xml,也可以通过复制默认的web.xml至其WEB-INF目录中实现。

 

TC1:

[root@localhost ~]# scp apache-tomcat-7.0.33.tar.gz 192.168.10.9:/root/(复制apache-tomcat到192.168.10.9的root目录)
The authenticity of host '192.168.10.9 (192.168.10.9)' can't be established.
RSA key fingerprint is 89:76:bc:a3:db:68:83:e1:20:ce:d4:69:eb:73:0d:f1.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.10.9' (RSA) to the list of known hosts.
root@192.168.10.9's password: 
apache-tomcat-7.0.33.tar.gz                                                               100% 7516KB   7.3MB/s   00:01 
[root@localhost ~]# cd /etc/profile.d/(切换到/etc/profile.d目录)
[root@localhost profile.d]# scp java.sh tomcat.sh 192.168.10.9:/etc/profile.d/(将java.sh和tomcat.sh复制到192.168.10.9主机的/etc/profile.d目录)
root@192.168.10.9's password: 
java.sh                                                                                   100%   67     0.1KB/s   00:00    
tomcat.sh                                                                                 100%   76     0.1KB/s   00:00   

TC2:

[root@localhost ~]# java -version(查看java版本号)
java version "1.4.2"
gij (GNU libgcj) version 4.1.2 20080704 (Red Hat 4.1.2-52)

Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
[root@localhost ~]# ls(查看当前目录文件及子目录)
anaconda-ks.cfg              jdk-6u21-linux-i586.rpm                sun-javadb-core-10.5.3-0.2.i386.rpm
apache-tomcat-7.0.33.tar.gz  jdk-6u21-linux-i586-rpm.bin            sun-javadb-demo-10.5.3-0.2.i386.rpm
install.log                  sun-javadb-client-10.5.3-0.2.i386.rpm  sun-javadb-docs-10.5.3-0.2.i386.rpm
install.log.syslog           sun-javadb-common-10.5.3-0.2.i386.rpm  sun-javadb-javadoc-10.5.3-0.2.i386.rpm
[root@localhost ~]# tar xf apache-tomcat-7.0.33.tar.gz -C /usr/local/(解压apache-tomcat到/usr/local目录,x解压,f后面跟文件名,-C更改解决目录)
[root@localhost ~]# cd /usr/local/(切换到/usr/local目录)
[root@localhost local]# ls(查看当前目录文件及子目录)
apache-tomcat-7.0.33  bin  etc  games  include  lib  libexec  sbin  share  src
[root@localhost local]# ln -sv apache-tomcat-7.0.33 tomcat(给apache-tomcat创建软连接叫tomcat,-s软连接,-v显示创建过程)
创建指向“apache-tomcat-7.0.33”的符号链接“tomcat”

TC1:

[root@localhost profile.d]# cd /usr/local/tomcat/conf/(切换到/usr/local/tomcat/conf目录)
[root@localhost conf]# scp server.xml 192.168.10.9:/usr/local/tomcat/conf/(复制server.xml到192.168.10.9的/usr/local/tomcat/conf目录)
root@192.168.10.9's password: 
server.xml                                                                                                       100% 6629     6.5KB/s   00:00  

TC2:

[root@localhost local]# cd tomcat/conf/(切换到tomcat/conf目录)
[root@localhost conf]# vim server.xml(编辑server.xml文件)

    <Engine name="Catalina" defaultHost="www.magedu.com" jvmRoute="TomcatB">

      </Host>
      <Host name="www.magedu.com"  appBase="/web"
            unpackWARs="true" autoDeploy="true">
        <Context path="" docBase="webapps" reLoadable="true" />
      </Host>
    </Engine>
  </Service>
</Server>

[root@localhost conf]# mkdir -pv /web/webapps(创建/web/webapps目录,-p递归创建,-v显示创建过程)
mkdir: created directory `/web'
mkdir: created directory `/web/webapps'

TC1:

[root@localhost conf]# scp /web/webapps/index.jsp 192.168.10.9:/web/webapps/(复制index.jsp到192.168.10.9的/web/webapps目录)
root@192.168.10.9's password: 
index.jsp                                                                              100%  434     0.4KB/s   00:00   

TC2:

[root@localhost conf]# vim /web/webapps/index.jsp(编辑index.jsp文件)

<%@ page language="java" %>
<html>
  <head><title>TomcatB</title></head>
  <body>
    <h1><font color="blue">TomcatB </font></h1>
    <table align="centre" border="1">
      <tr>
        <td>Session ID</td>
    <% session.setAttribute("abc","abc"); %>
        <td><%= session.getId() %></td>
      </tr>
      <tr>
        <td>Created on</td>
        <td><%= session.getCreationTime() %></td>
     </tr>
    </table>
  </body>
</html>

[root@localhost conf]# catalina.sh configtest(测试tomcat配置文件语法)
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/java/latest
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Jul 19, 2016 10:38:47 AM org.apache.catalina.core.AprLifecycleListener init
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.libra
ry.path: /usr/java/jdk1.6.0_21/jre/lib/i386/client:/usr/java/jdk1.6.0_21/jre/lib/i386:/usr/java/jdk1.6.0_21/jre/../lib/i386:/usr/java/packag
es/lib/i386:/lib:/usr/lib
Jul 19, 2016 10:38:47 AM org.apache.tomcat.util.digester.SetPropertiesRule begin
WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'reLoadable' to 'true' did not find a matching property.
Jul 19, 2016 10:38:47 AM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-bio-8080"]
Jul 19, 2016 10:38:47 AM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["ajp-bio-8009"]
Jul 19, 2016 10:38:47 AM org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 656 ms
[root@localhost tomcat]# catalina.sh start(启动catalina服务)
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/java/latest
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar

前端httpd服务器:

[root@Smoke extra]# vim ../httpd.conf

Include /etc/httpd/extra/httpd-proxy.conf
#Include /etc/httpd/extra/httpd-jk.conf

[root@Smoke extra]# vim httpd-proxy.conf(编辑httpd-proxy.conf配置文件)

ProxyRequests Off
<proxy balancer://lbcluster1>
  BalancerMember ajp://192.168.10.8:8009 loadfactor=1 route=TomcatA
  BalancerMember ajp://192.168.10.9:8009 loadfactor=1 route=TomcatB
</proxy>

<VirtualHost *:80>
  ServerName www.magedu.com
  ProxyVia On
  ProxyPass / balancer://http://lbcluster1/
  ProxyPassReverse / balancer://http://lbcluster1/
  <Proxy *>
    Require all granted
  </Proxy>
  <Location  / >
    Require all granted
  </Location>
</VirtualHost>

[root@Smoke extra]# service httpd configtest(检查httpd配置文件语法)
Syntax OK
[root@Smoke extra]# service httpd restart(重启httpd服务)
停止 httpd:                                               [确定]
正在启动 httpd:                                           [确定]
[root@Smoke extra]# vim httpd-proxy.conf(编辑httpd-proxy.conf配置文件)

ProxyRequests Off
<proxy balancer://lbcluster1>
  BalancerMember ajp://192.168.10.8:8009 loadfactor=1 route=TomcatA
  BalancerMember ajp://192.168.10.9:8009 loadfactor=1 route=TomcatB
  ProxySet lbmethod=byrequests
</proxy>

<VirtualHost *:80>
  ServerName localhost
  ProxyVia On
  ProxyPass / balancer://lbcluster1/
  ProxyPassReverse / balancer://lbcluster1/
  <Proxy *>
    Require all granted
  </Proxy>
  <Location  / >
    Require all granted
  </Location>
</VirtualHost>

[root@Smoke extra]# service httpd restart(重启httpd服务)
停止 httpd:                                               [确定]
正在启动 httpd:                                           [确定]

测试:通过Windows的ie浏览器访问172.16.100.106;

刷新页面,每次刷新ID号都会改变,把每次请求都当作新请求;

实现将Session绑定:

[root@Smoke extra]# vim httpd-proxy.conf(编辑httpd-proxy.conf配置文件)

ProxyRequests Off
<proxy balancer://lbcluster1>
  BalancerMember ajp://192.168.10.8:8009 loadfactor=1 route=TomcatA 
  BalancerMember ajp://192.168.10.9:8009 loadfactor=1 route=TomcatB 
  ProxySet lbmethod=byrequests
</proxy>

<VirtualHost *:80>
  ServerName localhost
  ProxyVia On
  ProxyPass / balancer://lbcluster1/ stickysession=jsessionid
  ProxyPassReverse / balancer://lbcluster1/
  <Proxy *>
    Require all granted
  </Proxy> 
  <Location  / >
    Require all granted
  </Location>
</VirtualHost>

[root@Smoke extra]# service httpd configtest(检查配置文件语法)
Syntax OK
[root@Smoke extra]# service httpd restart(重启httpd服务)
停止 httpd:                                               [确定]
正在启动 httpd:                                           [确定]

测试:通过Windows的ie浏览器访问172.16.100.106;

刷新页面,Session ID没有绑定;

[root@Smoke extra]# vim httpd-proxy.conf(编辑httpd-proxy.conf配置文件)

ProxyRequests Off
<proxy balancer://lbcluster1>
  BalancerMember ajp://192.168.10.8:8009 loadfactor=1 route=TomcatA
  BalancerMember ajp://192.168.10.9:8009 loadfactor=1 route=TomcatB
  ProxySet lbmethod=byrequests
</proxy>

<VirtualHost *:80>
  ServerName localhost
  ProxyVia On
  ProxyPass / balancer://lbcluster1/ stickysession=JSESSIONID|jsessionid nofailover=On
  ProxyPassReverse / balancer://lbcluster1/
  <Proxy *>
    Require all granted
  </Proxy>
  <Location  / >
    Require all granted
  </Location>
</VirtualHost>

[root@Smoke extra]# service httpd restart(重启httpd服务)
停止 httpd:                                               [确定]
正在启动 httpd:                                           [确定]

测试:通过Windows的ie浏览器访问172.16.100.106;

刷新页面,Session ID没有绑定;

[root@Smoke extra]# vim httpd-proxy.conf(编辑httpd-proxy.conf配置文件)

ProxyRequests Off
<proxy balancer://lbcluster1>
  BalancerMember ajp://192.168.10.8:8009 loadfactor=1 route=TomcatA
  BalancerMember ajp://192.168.10.9:8009 loadfactor=1 route=TomcatB
</proxy>

<VirtualHost *:80>
  ServerName localhost
  ProxyVia On
  ProxyPass / balancer://lbcluster1/ stickysession=JSESSIONID|jsessionid nofailover=On
  ProxyPassReverse / balancer://lbcluster1/
  <Proxy *>
    Require all granted
  </Proxy>
  <Location  / >
    Require all granted
  </Location>
</VirtualHost>

[root@Smoke extra]# service httpd restart(重启httpd服务)
停止 httpd:                                               [确定]
正在启动 httpd:                                           [确定]

测试:通过Windows的ie浏览器访问172.16.100.106;

刷新页面,Session ID没有绑定;

[root@Smoke extra]# vim httpd-proxy.conf(编辑httpd-proxy.conf配置文件) 

ProxyRequests Off
<proxy balancer://lbcluster1>
  BalancerMember ajp://192.168.10.8:8009 loadfactor=1 route=TomcatA
  BalancerMember ajp://192.168.10.9:8009 loadfactor=1 route=TomcatB
  ProxySet lbmethod=bytraffic
</proxy>

<VirtualHost *:80>
  ServerName localhost
#  ProxyVia On
  ProxyPass / balancer://lbcluster1/ stickysession=JSESSIONID|jsessionid nofailover=On
  ProxyPassReverse / balancer://lbcluster1/
  <Proxy *>
    Require all granted
  </Proxy>
  <Location  / >
    Require all granted
  </Location>
</VirtualHost>

[root@Smoke extra]# service httpd restart(重启httpd服务)
停止 httpd:                                               [确定]
正在启动 httpd:                                           [确定]

测试:通过Windows的ie浏览器访问172.16.100.106;

 刷新页面,Session ID没有绑定;

[root@Smoke extra]# vim httpd-proxy.conf(编辑httpd-proxy.conf配置文件) 

ProxyRequests Off
<proxy balancer://lbcluster1>
  BalancerMember ajp://192.168.10.8:8009 loadfactor=1 
  BalancerMember ajp://192.168.10.9:8009 loadfactor=1 
  ProxySet lbmethod=bytraffic
</proxy>

<VirtualHost *:80>
  ServerName localhost
#  ProxyVia On
  ProxyPass / balancer://lbcluster1/ stickysession=JSESSIONID|jsessionid nofailover=On
  ProxyPassReverse / balancer://lbcluster1/
  <Proxy *>
    Require all granted
  </Proxy>
  <Location  / >
    Require all granted
  </Location>
</VirtualHost>

[root@Smoke extra]# service httpd restart(重启httpd服务)
停止 httpd:                                               [确定]
正在启动 httpd:                                           [确定]

测试:通过Windows的ie浏览器访问172.16.100.106;

刷新页面,Session ID没有绑定;

[root@Smoke extra]# vim httpd-proxy.conf(编辑httpd-proxy.conf配置文件)

ProxyRequests Off
<proxy balancer://lbcluster1>
  BalancerMember ajp://192.168.10.8:8009 loadfactor=1
  BalancerMember ajp://192.168.10.9:8009 loadfactor=1
  ProxySet lbmethod=bytraffic
</proxy>

<VirtualHost *:80>
  ServerName localhost
#  ProxyVia On
  ProxyPass / balancer://lbcluster1/ stickysession=JSESSIONID|jsessionid nofailover=On
#  ProxyPassReverse / balancer://lbcluster1/
  <Proxy *>
    Require all granted
  </Proxy>
  <Location  / >
    Require all granted
  </Location>
</VirtualHost>

[root@Smoke extra]# service httpd restart(重启httpd服务)
停止 httpd:                                               [确定]
正在启动 httpd:                                           [确定]

测试:通过Windows的ie浏览器访问172.16.100.106;

刷新页面,Session ID没有绑定;

[root@Smoke extra]# vim httpd-proxy.conf(编辑httpd-proxy.conf配置文件)

ProxyRequests Off
<proxy balancer://lbcluster1>
  BalancerMember ajp://192.168.10.8:8009 loadfactor=1
  BalancerMember ajp://192.168.10.9:8009 loadfactor=1
  ProxySet lbmethod=bytraffic
</proxy>

<VirtualHost *:80>
  ServerName localhost
  ProxyVia On
  ProxyPass / balancer://lbcluster1/ stickysession=JSESSIONID|jsessionid nofailover=On
  ProxyPassReverse / balancer://lbcluster1/
  <Proxy *>
    Require all granted
  </Proxy>
  <Location  / >
    Require all granted
  </Location>
  <Location /balancer-manager>
    SetHandler balancer-manager
    Order Deny,Allow
    Require all granted
  </Location>
</VirtualHost>

[root@Smoke extra]# service httpd configtest(检查httpd配置文件语法)
Syntax OK
[root@Smoke extra]# service httpd restart(重启httpd服务)
停止 httpd:                                               [确定]
正在启动 httpd:                                           [确定]

测试:通过Windows的ie浏览器访问http://172.16.100.106/balancer-manager,无法访问;

[root@Smoke extra]# vim httpd-proxy.conf(编辑httpd-proxy.conf配置文件)

ProxyRequests Off
<proxy balancer://lbcluster1>
  BalancerMember ajp://192.168.10.8:8009 loadfactor=1
  BalancerMember ajp://192.168.10.9:8009 loadfactor=1
  ProxySet lbmethod=bytraffic
</proxy>

<VirtualHost *:80>
  ServerName localhost
  ProxyVia On
  ProxyPass / balancer://lbcluster1/ stickysession=JSESSIONID|jsessionid nofailover=On
  ProxyPassReverse / balancer://lbcluster1/
  <Proxy *>
    Require all granted
  </Proxy>
  <Location  / >
    Require all granted
  </Location>
</VirtualHost>
  <Location /balancer-manager>
    SetHandler balancer-manager
    Order Deny,Allow
    Require all granted
  </Location>

[root@Smoke extra]# service httpd restart(重启httpd服务)
停止 httpd:                                               [确定]
正在启动 httpd:                                           [确定]

测试:通过Windows的ie浏览器访问http://172.16.100.106/balancer-manager,无法访问;

[root@Smoke extra]# tail /usr/local/apache/logs/error_log(查看error_log日志文件后10行) 
[Thu Jun 23 18:22:40.941561 2016] [lbmethod_heartbeat:notice] [pid 17148:tid 3078084288] AH02282: No slotmem from mod_heartmonitor
[Thu Jun 23 18:22:40.942018 2016] [jk:warn] [pid 17148:tid 3078084288] No JkShmFile defined in httpd.conf. Using default /usr/local/apache/
logs/jk-runtime-status
[Thu Jun 23 18:22:40.945367 2016] [mpm_event:notice] [pid 17148:tid 3078084288] AH00489: Apache/2.4.4 (Unix) mod_jk/1.2.37 configured -- r
esuming normal operations
[Thu Jun 23 18:22:40.945547 2016] [core:notice] [pid 17148:tid 3078084288] AH00094: Command line: '/usr/local/apache/bin/httpd'
[Thu Jun 23 18:26:56.799927 2016] [mpm_event:notice] [pid 17148:tid 3078084288] AH00491: caught SIGTERM, shutting down
[Thu Jun 23 18:26:56.931675 2016] [jk:warn] [pid 17271:tid 3078530752] No JkShmFile defined in httpd.conf. Using default /usr/local/apache
/logs/jk-runtime-status
[Thu Jun 23 18:26:56.944939 2016] [lbmethod_heartbeat:notice] [pid 17272:tid 3078530752] AH02282: No slotmem from mod_heartmonitor
[Thu Jun 23 18:26:56.945527 2016] [jk:warn] [pid 17272:tid 3078530752] No JkShmFile defined in httpd.conf. Using default /usr/local/apache
/logs/jk-runtime-status
[Thu Jun 23 18:26:56.948212 2016] [mpm_event:notice] [pid 17272:tid 3078530752] AH00489: Apache/2.4.4 (Unix) mod_jk/1.2.37 configured -- r
esuming normal operations
[Thu Jun 23 18:26:56.948325 2016] [core:notice] [pid 17272:tid 3078530752] AH00094: Command line: '/usr/local/apache/bin/httpd'
[root@Smoke extra]# date(查看系统时间)
2016年 06月 23日 星期四 18:29:42 CST
[root@Smoke extra]# tail /usr/local/apache/logs/access_log(查看access_log日志文件后10行) 
172.16.100.254 - - [23/Jun/2016:18:05:09 +0800] "GET / HTTP/1.1" 200 367
172.16.100.254 - - [23/Jun/2016:18:05:09 +0800] "GET / HTTP/1.1" 200 366
172.16.100.254 - - [23/Jun/2016:18:05:09 +0800] "GET / HTTP/1.1" 200 367
172.16.100.254 - - [23/Jun/2016:18:05:09 +0800] "GET / HTTP/1.1" 200 366
172.16.100.254 - - [23/Jun/2016:18:05:10 +0800] "GET / HTTP/1.1" 200 367
172.16.100.254 - - [23/Jun/2016:18:05:10 +0800] "GET / HTTP/1.1" 200 366
172.16.100.254 - - [23/Jun/2016:18:23:47 +0800] "GET /balancer-manager HTTP/1.1" 404 983
172.16.100.254 - - [23/Jun/2016:18:27:51 +0800] "GET /balancer-manager HTTP/1.1" 404 983
172.16.100.254 - - [23/Jun/2016:18:27:52 +0800] "GET /balancer-manager HTTP/1.1" 404 983
172.16.100.254 - - [23/Jun/2016:18:27:52 +0800] "GET /balancer-manager HTTP/1.1" 404 983
提示:访问的资源不存在;
[root@Smoke extra]# vim ../httpd.conf(编辑httpd.conf配置文件)

#Include /etc/httpd/extra/httpd-proxy.conf
Include /etc/httpd/extra/httpd-jk.conf

[root@Smoke extra]# service httpd restart(重启httpd服务)
停止 httpd:                                               [确定]
正在启动 httpd:                                           [确定]

测试:通过Windows的ie浏览器访问http://172.16.100.106/status/

[root@Smoke extra]# vim ../httpd.conf(编辑httpd.conf配置文件)

Include /etc/httpd/extra/httpd-proxy.conf
#Include /etc/httpd/extra/httpd-jk.conf

[root@Smoke extra]# service httpd restart(重启httpd服务)
停止 httpd:                                               [确定]
正在启动 httpd:                                           [确定]

测试:通过Windows的ie浏览器访问http://172.16.100.106/balancer-manager,无法访问;

[root@Smoke extra]# vim ../httpd.conf(编辑httpd.conf配置文件)
[root@Smoke extra]# vim httpd-proxy.conf(编辑httpd-proxy.conf)

ProxyRequests Off
<proxy balancer://lbcluster1>
  BalancerMember ajp://192.168.10.8:8009 loadfactor=1
  BalancerMember ajp://192.168.10.9:8009 loadfactor=1
  ProxySet lbmethod=bytraffic
</proxy>

<VirtualHost *:80>
  ServerName localhost
  ProxyVia On
  ProxyPass / balancer://lbcluster1/ stickysession=JSESSIONID|jsessionid nofailover=On
  ProxyPassReverse / balancer://lbcluster1/
  <Proxy *>
    Require all granted
  </Proxy>
  <Location  / >
    Require all granted
  </Location>
</VirtualHost>
<VirtualHost *:80>
  servername www.magedu.com
  <Location /balancer-manager>
    SetHandler balancer-manager
    Order Deny,Allow
    Require all granted
  </Location>
</VirtualHost>

[root@Smoke extra]# service httpd restart(重启httpd服务)
停止 httpd:                                               [确定]
正在启动 httpd:                                           [确定]
[root@Smoke extra]# vim httpd-proxy.conf(编辑httpd-proxy.conf配置文件)

ProxyRequests Off
<proxy balancer://lbcluster1>
  BalancerMember ajp://192.168.10.8:8009 loadfactor=1
  BalancerMember ajp://192.168.10.9:8009 loadfactor=1
  ProxySet lbmethod=bytraffic
</proxy>

<VirtualHost *:80>
  servername www.magedu.com
  <Location /balancer-manager>
    SetHandler balancer-manager
    Order Deny,Allow
    Require all granted
  </Location>
</VirtualHost>

<VirtualHost *:80>
  ServerName localhost
  ProxyVia On
  ProxyPass / balancer://lbcluster1/ stickysession=JSESSIONID|jsessionid nofailover=On
  ProxyPassReverse / balancer://lbcluster1/
  <Proxy *>
    Require all granted
  </Proxy>
  <Location  / >
    Require all granted
  </Location>
</VirtualHost>

:.,$d         

[root@Smoke extra]# service httpd restart(重启httpd服务)
停止 httpd:                                               [确定]
正在启动 httpd:                                           [确定]

测试:通过Windows的ie浏览器访问http://172.16.100.106/balancer-manager,可以访问;

[root@Smoke extra]# vim httpd-proxy.conf(编辑httpd-proxy.conf配置文件)

ProxyRequests Off
<proxy balancer://lbcluster1>
  BalancerMember ajp://192.168.10.8:8009 loadfactor=1
  BalancerMember ajp://192.168.10.9:8009 loadfactor=1
  ProxySet lbmethod=bytraffic
</proxy>

#<VirtualHost *:80>
#  servername www.magedu.com
#  <Location /balancer-manager>
#    SetHandler balancer-manager
#    Require all granted
#  </Location>
#</VirtualHost>

<VirtualHost *:80>
  ServerName localhost
  ProxyVia On
  ProxyPass / balancer://lbcluster1/ stickysession=JSESSIONID|jsessionid nofailover=On
  ProxyPassReverse / balancer://lbcluster1/
  <Location /balancer-manager>
    SetHandler balancer-manager
    Proxypass !
    Require all granted
  </Location>
  <Proxy *>
    Require all granted
  </Proxy>
  <Location  / >
    Require all granted
  </Location>
</VirtualHost>

[root@Smoke extra]# service httpd restart(重启httpd服务)
停止 httpd:                                               [确定]
正在启动 httpd:                                           [确定]

测试:通过Windows的ie浏览器访问http://172.16.100.106/balancer-manager,可以访问;

[root@Smoke extra]# vim httpd-proxy.conf(编辑httpd-proxy.conf配置文件)

TC1:

[root@localhost ~]# cd /web/webapps/(切换到/web/webapps目录)
[root@localhost webapps]# ls(查看当前目录文件及子目录)
index.jsp
[root@localhost webapps]# mkdir WEB-INF(创建WEB-INF目录)
[root@localhost webapps]# ls(查看当前目录文件及子目录)
index.jsp  WEB-INF
[root@localhost webapps]# cp /usr/local/tomcat/conf/web.xml WEB-INF/(复制web.xml到WEB-INF目录)
[root@localhost webapps]# ls(查看当前目录文件及子目录)
index.jsp  WEB-INF
[root@localhost webapps]# vim WEB-INF/web.xml(编辑web.xml文件)

<web-app xmlns="http://java.sun.com/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
                      http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
  version="3.0">

<distributable/>

[root@localhost webapps]# scp -r WEB-INF/ 192.168.10.9:/web/webapps/(复制WEB-INF目录到192.168.10.9的/web/webapps目录)
root@192.168.10.9's password: 
web.xml                                                                                                          100%  159KB 159.1KB/s   00:00 
[root@localhost webapps]# cd ..(切换到上级目录)
[root@localhost web]# cd /usr/local/tomcat/conf/(切换到/usr/local/tomcat/conf目录)
[root@localhost conf]# vim server.xml(编辑server.xml文件)

    <Engine name="Catalina" defaultHost="www.magedu.com" jvmRoute="TomcatA">

<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
                   channelSendOptions="8">
     <Manager className="org.apache.catalina.ha.session.DeltaManager"
                    expireSessionsOnShutdown="false"
                    notifyListenersOnReplication="true"/>
       <Channel className="org.apache.catalina.tribes.group.GroupChannel">
          <Membership className="org.apache.catalina.tribes.membership.McastService"
                   address="228.50.10.1"   bind="192.168.10.8"   port="45564"
                   frequency="500"  dropTime="3000"/>
             <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
                                address="192.168.10.8"   port="4000"  autoBind="100"
                                selectorTimeout="5000"   maxThreads="6"/>
             <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
                <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
             </Sender>
       <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
       <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
     </Channel>
     <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
                        filter=".*\.gif;.*\.js;.*\.jpg;.*\.htm;.*\.html;.*\.txt;"/>
     <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>
     <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
                     tempDir="/tmp/war-temp/" deployDir="/tmp/war-deploy/"
                    watchDir="/tmp/war-listen/"  watchEnabled="false"/>
      <ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>
      <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
</Cluster>

[root@localhost conf]# catalina.sh stop(停止catalina语法)
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/java/latest
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
[root@localhost conf]# catalina.sh configtest(检查配置文件语法)
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/java/latest
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Nov 22, 2014 1:18:31 PM org.apache.catalina.core.AprLifecycleListener init
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.libra
ry.path: /usr/java/jdk1.6.0_21/jre/lib/i386/client:/usr/java/jdk1.6.0_21/jre/lib/i386:/usr/java/jdk1.6.0_21/jre/../lib/i386:/usr/java/packag
es/lib/i386:/lib:/usr/lib
Nov 22, 2014 1:18:32 PM org.apache.tomcat.util.digester.SetPropertiesRule begin
WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'reLoadable' to 'true' did not find a matching property.
Nov 22, 2014 1:18:32 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-bio-8080"]
Nov 22, 2014 1:18:32 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["ajp-bio-8009"]
Nov 22, 2014 1:18:32 PM org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 738 ms
[root@localhost conf]# catalina.sh start(启动catalia服务)
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/java/latest
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar

TC2:

[root@localhost conf]# vim server.xml(编辑server.xml文件)

    <Engine name="Catalina" defaultHost="www.magedu.com" jvmRoute="TomcatB">

<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
                   channelSendOptions="8">
     <Manager className="org.apache.catalina.ha.session.DeltaManager"
                    expireSessionsOnShutdown="false"
                    notifyListenersOnReplication="true"/>
       <Channel className="org.apache.catalina.tribes.group.GroupChannel">
          <Membership className="org.apache.catalina.tribes.membership.McastService"
                   address="228.50.10.1"   bind="192.168.10.9"   port="45564"
                   frequency="500"  dropTime="3000"/>
             <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
                                address="192.168.10.9"   port="4000"  autoBind="100"
                                selectorTimeout="5000"   maxThreads="6"/>
             <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
                <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
             </Sender>
       <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
       <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
     </Channel>
     <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
                        filter=".*\.gif;.*\.js;.*\.jpg;.*\.htm;.*\.html;.*\.txt;"/>
     <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>
     <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
                     tempDir="/tmp/war-temp/" deployDir="/tmp/war-deploy/"
                    watchDir="/tmp/war-listen/"  watchEnabled="false"/>
      <ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>
      <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
</Cluster>

[root@localhost conf]# catalina.sh stop(停止catalina服务)
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/java/latest
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
[root@localhost conf]# catalina.sh configtest(检查配置文件语法)
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/java/latest
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
2016-7-19 16:18:21 org.apache.catalina.core.AprLifecycleListener init
信息: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.libra
ry.path: /usr/java/jdk1.6.0_21/jre/lib/i386/client:/usr/java/jdk1.6.0_21/jre/lib/i386:/usr/java/jdk1.6.0_21/jre/../lib/i386:/usr/java/packa
ges/lib/i386:/lib:/usr/lib
2016-7-19 16:18:21 org.apache.tomcat.util.digester.SetPropertiesRule begin
警告: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'reLoadable' to 'true' did not find a matching property.
2016-7-19 16:18:21 org.apache.coyote.AbstractProtocol init
信息: Initializing ProtocolHandler ["http-bio-8080"]
2016-7-19 16:18:21 org.apache.coyote.AbstractProtocol init
信息: Initializing ProtocolHandler ["ajp-bio-8009"]
2016-7-19 16:18:21 org.apache.catalina.startup.Catalina load
信息: Initialization processed in 975 ms

TC1:

[root@localhost conf]# ls(查看当前目录文件及子目录)
Catalina  catalina.policy  catalina.properties  context.xml  logging.properties  server.xml  tomcat-users.xml  web.xml
[root@localhost conf]# cd ..(切换到上级目录)
[root@localhost tomcat]# netstat -tunlp(查看系统服务,-t代表tcp,-n以数字显示,-l监听端口,-p显示服务名称)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
tcp        0      0 127.0.0.1:2208              0.0.0.0:*                   LISTEN      3494/./hpiod        
tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN      3175/portmap        
tcp        0      0 0.0.0.0:852                 0.0.0.0:*                   LISTEN      3214/rpc.statd      
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      3515/sshd           
tcp        0      0 127.0.0.1:631               0.0.0.0:*                   LISTEN      3527/cupsd          
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      3564/sendmail       
tcp        0      0 127.0.0.1:6010              0.0.0.0:*                   LISTEN      17588/sshd          
tcp        0      0 127.0.0.1:2207              0.0.0.0:*                   LISTEN      3499/python         
tcp        0      0 ::ffff:172.16.100.1:4000    :::*                        LISTEN      17772/java          
tcp        0      0 ::ffff:127.0.0.1:8005       :::*                        LISTEN      17772/java          
tcp        0      0 :::8009                     :::*                        LISTEN      17772/java          
tcp        0      0 :::8080                     :::*                        LISTEN      17772/java          
tcp        0      0 :::22                       :::*                        LISTEN      3515/sshd           
tcp        0      0 ::1:6010                    :::*                        LISTEN      17588/sshd          
udp        0      0 0.0.0.0:43547               0.0.0.0:*                               3701/avahi-daemon   
udp        0      0 0.0.0.0:846                 0.0.0.0:*                               3214/rpc.statd      
udp        0      0 0.0.0.0:849                 0.0.0.0:*                               3214/rpc.statd      
udp        0      0 0.0.0.0:5353                0.0.0.0:*                               3701/avahi-daemon   
udp        0      0 0.0.0.0:111                 0.0.0.0:*                               3175/portmap        
udp        0      0 0.0.0.0:631                 0.0.0.0:*                               3527/cupsd          
udp        0      0 :::40122                    :::*                                    3701/avahi-daemon   
udp        0      0 :::5353                     :::*                                    3701/avahi-daemon   
udp        0      0 :::45564                    :::*                                    17772/java        
[root@localhost tomcat]# ls(查看当前目录文件及子目录)
bin  conf  lib  LICENSE  logs  NOTICE  RELEASE-NOTES  RUNNING.txt  temp  webapps  work
[root@localhost tomcat]# tail logs/catalina.2014-11-22.log(查看catalina.2014-11-22.log日志文件) 
Nov 22, 2014 1:19:11 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory /usr/local/apache-tomcat-7.0.33/webapps/ROOT
Nov 22, 2014 1:19:11 PM org.apache.catalina.ha.session.JvmRouteBinderValve startInternal
INFO: JvmRouteBinderValve started
Nov 22, 2014 1:19:11 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-bio-8080"]
Nov 22, 2014 1:19:11 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["ajp-bio-8009"]
Nov 22, 2014 1:19:11 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 3029 ms
[root@localhost tomcat]# tail -50 logs/catalina.2014-11-22.log(查看catalina.2014-11-22.log日志文件后50行) 
Nov 22, 2014 1:19:08 PM org.apache.catalina.tribes.membership.McastServiceImpl setupSocket
INFO: Attempting to bind the multicast socket to /228.50.10.1:45564
Nov 22, 2014 1:19:08 PM org.apache.catalina.tribes.membership.McastServiceImpl setupSocket
INFO: Binding to multicast address, failed. Binding to port only.
Nov 22, 2014 1:19:08 PM org.apache.catalina.tribes.membership.McastServiceImpl setupSocket
INFO: Setting multihome multicast interface to:/172.16.100.1
Nov 22, 2014 1:19:08 PM org.apache.catalina.tribes.membership.McastServiceImpl setupSocket
INFO: Setting cluster mcast soTimeout to 500
Nov 22, 2014 1:19:08 PM org.apache.catalina.tribes.membership.McastServiceImpl waitForMembers
INFO: Sleeping for 1000 milliseconds to establish cluster membership, start level:4
Nov 22, 2014 1:19:10 PM org.apache.catalina.tribes.membership.McastServiceImpl waitForMembers
INFO: Done sleeping, membership established, start level:4
Nov 22, 2014 1:19:10 PM org.apache.catalina.tribes.membership.McastServiceImpl waitForMembers
INFO: Sleeping for 1000 milliseconds to establish cluster membership, start level:8
Nov 22, 2014 1:19:11 PM org.apache.catalina.tribes.membership.McastServiceImpl waitForMembers
INFO: Done sleeping, membership established, start level:8
Nov 22, 2014 1:19:11 PM org.apache.catalina.ha.deploy.FarmWarDeployer start
SEVERE: FarmWarDeployer can only work as host cluster subelement!
Nov 22, 2014 1:19:11 PM org.apache.catalina.ha.session.DeltaManager startInternal
INFO: Register manager www.magedu.com# to cluster element Engine with name Catalina
Nov 22, 2014 1:19:11 PM org.apache.catalina.ha.session.DeltaManager startInternal
INFO: Starting clustering manager at www.magedu.com#
Nov 22, 2014 1:19:11 PM org.apache.catalina.ha.session.DeltaManager getAllClusterSessions
INFO: Manager [www.magedu.com#]: skipping state transfer. No members active in cluster group.
Nov 22, 2014 1:19:11 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory /web/webapps
Nov 22, 2014 1:19:11 PM org.apache.catalina.ha.session.DeltaManager startInternal
INFO: Register manager www.magedu.com#/webapps to cluster element Engine with name Catalina
Nov 22, 2014 1:19:11 PM org.apache.catalina.ha.session.DeltaManager startInternal
INFO: Starting clustering manager at www.magedu.com#/webapps
Nov 22, 2014 1:19:11 PM org.apache.catalina.ha.session.DeltaManager getAllClusterSessions
INFO: Manager [www.magedu.com#/webapps]: skipping state transfer. No members active in cluster group.
Nov 22, 2014 1:19:11 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory /usr/local/apache-tomcat-7.0.33/webapps/host-manager
Nov 22, 2014 1:19:11 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory /usr/local/apache-tomcat-7.0.33/webapps/manager
Nov 22, 2014 1:19:11 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory /usr/local/apache-tomcat-7.0.33/webapps/docs
Nov 22, 2014 1:19:11 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory /usr/local/apache-tomcat-7.0.33/webapps/examples
Nov 22, 2014 1:19:11 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory /usr/local/apache-tomcat-7.0.33/webapps/ROOT
Nov 22, 2014 1:19:11 PM org.apache.catalina.ha.session.JvmRouteBinderValve startInternal
INFO: JvmRouteBinderValve started
Nov 22, 2014 1:19:11 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-bio-8080"]
Nov 22, 2014 1:19:11 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["ajp-bio-8009"]
Nov 22, 2014 1:19:11 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 3029 ms

TC2:

[root@localhost conf]# catalina.sh start(启动catalina服务)
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/java/latest
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
[root@localhost conf]# cd ..(切换到上级目录)
[root@localhost tomcat]# tail logs/catalina.2016-07-19.log(查看catalina.2016-07-19.log日志文件后10行) 
	at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:119)
	at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:59)
	at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:52)
	at org.apache.catalina.tribes.transport.ReceiverBase.bind(ReceiverBase.java:231)
	at org.apache.catalina.tribes.transport.nio.NioReceiver.bind(NioReceiver.java:144)
	at org.apache.catalina.tribes.transport.nio.NioReceiver.start(NioReceiver.java:108)
	at org.apache.catalina.tribes.group.ChannelCoordinator.internalStart(ChannelCoordinator.java:145)
	... 22 more
2016-7-19 16:29:14 org.apache.catalina.startup.Catalina start
信息: Server startup in 120 ms

TC1:

[root@localhost tomcat]# ntpdate 172.16.100.30(向ntp服务器同步时间)
 6 Jul 00:17:23 ntpdate[17881]: step time server 172.16.100.30 offset 51100787.942916 sec
[root@localhost tomcat]# hostname node1.magedu.com(修改主机名)
[root@localhost tomcat]# hostname(查看主机名)
node1.magedu.com
[root@localhost tomcat]# vim /etc/sysconfig/network(编辑主机名称配置文件)

NETWORKING=yes
NETWORKING_IPV6=yes
HOSTNAME=node1.magedu.com

[root@localhost tomcat]# uname -n(查看主机名称)
node1.magedu.com
[root@node1 ~]# vim /etc/hosts(编辑hosts文件)

# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1               localhost.localdomain localhost
::1             localhost6.localdomain6 localhost6
192.168.10.8    node1.magedu.com node1
192.168.10.9    node2.magedu.com node2
[root@node1 ~]# ssh-keygen -t rsa -f ~/.ssh/id_rsa -P ''(生成一对密钥,-t指定加密算法类型rsa或dsa,-f指定密钥文件保存位置,-P指定私钥密码)
Generating public/private rsa key pair.
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
60:4e:fe:9a:89:e8:73:6a:e4:16:cb:73:95:a2:06:e6 root@node1.magedu.com
[root@node1 ~]# ssh-copy-id -i .ssh/id_rsa.pub root@192.168.10.9(通过ssh-copy-id将.ssh/id_rsa.pub公钥文件复制到云彩主机192.168.10.9,以root用户登录,-i
指定公钥文件)
15
root@192.168.10.9's password: 
Now try logging into the machine, with "ssh 'root@192.168.10.9'", and check in:

  .ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.

TC2:

[root@localhost tomcat]# hostname node2.magedu.com
[root@localhost tomcat]# hostname 
node2.magedu.com
[root@localhost tomcat]# vim /etc/sysconfig/network

NETWORKING=yes
NETWORKING_IPV6=yes
HOSTNAME=node2.magedu.com

[root@localhost tomcat]# uname -n(查看主机名称)
node2.magedu.com
[root@node2 ~]# vim /etc/hosts(编辑hosts文件)

# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1               localhost.localdomain localhost
::1             localhost6.localdomain6 localhost6
192.168.10.8    node1.magedu.com node1
192.168.10.9    node2.magedu.com node2

[root@node2 ~]# ssh-keygen -t rsa -f ~/.ssh/id_rsa -P ''(生成一对密钥,-t指定加密算法类型rsa或dsa,-f指定密钥文件保存位置,-P指定私钥密码)
Generating public/private rsa key pair.
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
2b:c7:ed:ef:84:c4:88:d1:5a:d3:c5:c2:a6:7c:e0:4f root@node2.magedu.com
[root@node2 ~]# ssh-copy-id -i .ssh/id_rsa.pub root@192.168.10.8通过ssh-copy-id将.ssh/id_rsa.pub公钥文件复制到云彩主机192.168.10.8,以root用户登录,
-i指定公钥文件)
15
root@192.168.10.8's password: 
Now try logging into the machine, with "ssh 'root@192.168.10.8'", and check in:

  .ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.

TC1:

[root@node1 tomcat]# tail -50 logs/catalina.2016-07-06.log(查看catalina.2016-07-05.log日志文件后50行) 
Jul 6, 2016 12:49:38 AM org.apache.catalina.tribes.membership.McastServiceImpl setupSocket
INFO: Setting multihome multicast interface to:/192.168.10.8
Jul 6, 2016 12:49:38 AM org.apache.catalina.tribes.membership.McastServiceImpl setupSocket
INFO: Setting cluster mcast soTimeout to 500
Jul 6, 2016 12:49:38 AM org.apache.catalina.tribes.membership.McastServiceImpl waitForMembers
INFO: Sleeping for 1000 milliseconds to establish cluster membership, start level:4
Jul 6, 2016 12:49:39 AM org.apache.catalina.tribes.membership.McastServiceImpl waitForMembers
INFO: Done sleeping, membership established, start level:4
Jul 6, 2016 12:49:39 AM org.apache.catalina.tribes.membership.McastServiceImpl waitForMembers
INFO: Sleeping for 1000 milliseconds to establish cluster membership, start level:8
Jul 6, 2016 12:49:40 AM org.apache.catalina.tribes.membership.McastServiceImpl waitForMembers
INFO: Done sleeping, membership established, start level:8
Jul 6, 2016 12:49:40 AM org.apache.catalina.ha.deploy.FarmWarDeployer start
SEVERE: FarmWarDeployer can only work as host cluster subelement!
Jul 6, 2016 12:49:40 AM org.apache.catalina.ha.session.DeltaManager startInternal
INFO: Register manager www.magedu.com# to cluster element Engine with name Catalina
Jul 6, 2016 12:49:40 AM org.apache.catalina.ha.session.DeltaManager startInternal
INFO: Starting clustering manager at www.magedu.com#
Jul 6, 2016 12:49:40 AM org.apache.catalina.ha.session.DeltaManager getAllClusterSessions
INFO: Manager [www.magedu.com#]: skipping state transfer. No members active in cluster group.
Jul 6, 2016 12:49:40 AM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory /web/webapps
Jul 6, 2016 12:49:40 AM org.apache.catalina.ha.session.DeltaManager startInternal
INFO: Register manager www.magedu.com#/webapps to cluster element Engine with name Catalina
Jul 6, 2016 12:49:40 AM org.apache.catalina.ha.session.DeltaManager startInternal
INFO: Starting clustering manager at www.magedu.com#/webapps
Jul 6, 2016 12:49:40 AM org.apache.catalina.ha.session.DeltaManager getAllClusterSessions
INFO: Manager [www.magedu.com#/webapps]: skipping state transfer. No members active in cluster group.
Jul 6, 2016 12:49:40 AM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory /usr/local/apache-tomcat-7.0.33/webapps/host-manager
Jul 6, 2016 12:49:41 AM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory /usr/local/apache-tomcat-7.0.33/webapps/manager
Jul 6, 2016 12:49:41 AM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory /usr/local/apache-tomcat-7.0.33/webapps/docs
Jul 6, 2016 12:49:41 AM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory /usr/local/apache-tomcat-7.0.33/webapps/examples
Jul 6, 2016 12:49:41 AM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory /usr/local/apache-tomcat-7.0.33/webapps/ROOT
Jul 6, 2016 12:49:41 AM org.apache.catalina.ha.session.JvmRouteBinderValve startInternal
INFO: JvmRouteBinderValve started
Jul 6, 2016 12:49:41 AM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-bio-8080"]
Jul 6, 2016 12:49:41 AM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["ajp-bio-8009"]
Jul 6, 2016 12:49:41 AM org.apache.catalina.startup.Catalina start
INFO: Server startup in 2944 ms
Jul 6, 2016 12:49:57 AM org.apache.catalina.tribes.io.BufferPool getBufferPool
INFO: Created a buffer pool with max size:104857600 bytes of type:org.apache.catalina.tribes.io.BufferPool15Impl
Jul 6, 2016 12:49:58 AM org.apache.catalina.ha.tcp.SimpleTcpCluster memberAdded
INFO: Replication member added:org.apache.catalina.tribes.membership.MemberImpl[tcp://{192, 168, 10, 9}:4000,{192, 168, 10, 9},4000, alive=
1219, securePort=-1, UDP Port=-1, id={88 63 49 -28 76 113 72 77 -120 -5 55 112 -103 -46 70 40 }, payload={}, command={}, domain={}, ]

TC2:

[root@node2 tomcat]# tail -50 logs/catalina.2016-07-19.log(查看catalina.2016-07-19.log日志文件后50行) 
2016-7-19 17:14:46 org.apache.catalina.tribes.membership.McastServiceImpl waitForMembers
信息: Sleeping for 1000 milliseconds to establish cluster membership, start level:4
2016-7-19 17:14:46 org.apache.catalina.ha.tcp.SimpleTcpCluster memberAdded
信息: Replication member added:org.apache.catalina.tribes.membership.MemberImpl[tcp://{192, 168, 10, 8}:4000,{192, 168, 10, 8},4000, alive=192
92, securePort=-1, UDP Port=-1, id={-115 66 -107 71 -7 -62 71 -110 -117 45 -20 -110 -35 -57 91 103 }, payload={}, command={}, domain={}, ]
2016-7-19 17:14:47 org.apache.catalina.tribes.membership.McastServiceImpl waitForMembers
信息: Done sleeping, membership established, start level:4
2016-7-19 17:14:47 org.apache.catalina.tribes.membership.McastServiceImpl waitForMembers
信息: Sleeping for 1000 milliseconds to establish cluster membership, start level:8
2016-7-19 17:14:47 org.apache.catalina.tribes.io.BufferPool getBufferPool
信息: Created a buffer pool with max size:104857600 bytes of type:org.apache.catalina.tribes.io.BufferPool15Impl
2016-7-19 17:14:48 org.apache.catalina.tribes.membership.McastServiceImpl waitForMembers
信息: Done sleeping, membership established, start level:8
2016-7-19 17:14:48 org.apache.catalina.ha.deploy.FarmWarDeployer start
严重: FarmWarDeployer can only work as host cluster subelement!
2016-7-19 17:14:48 org.apache.catalina.ha.session.DeltaManager startInternal
信息: Register manager www.magedu.com# to cluster element Engine with name Catalina
2016-7-19 17:14:48 org.apache.catalina.ha.session.DeltaManager startInternal
信息: Starting clustering manager at www.magedu.com#
2016-7-19 17:14:48 org.apache.catalina.ha.session.DeltaManager getAllClusterSessions
信息: Manager [www.magedu.com#], requesting session state from org.apache.catalina.tribes.membership.MemberImpl[tcp://{192, 168, 10, 8}:4000,
{192, 168, 10, 8},4000, alive=20798, securePort=-1, UDP Port=-1, id={-115 66 -107 71 -7 -62 71 -110 -117 45 -20 -110 -35 -57 91 103 }, paylo
ad={}, command={}, domain={}, ]. This operation will timeout if no session state has been received within 60 seconds.
2016-7-19 17:14:48 org.apache.catalina.ha.session.DeltaManager waitForSendAllSessions
信息: Manager [www.magedu.com#]; session state send at 7/19/16 5:14 PM received in 110 ms.
2016-7-19 17:14:48 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deploying web application directory /web/webapps
2016-7-19 17:14:48 org.apache.catalina.ha.session.DeltaManager startInternal
信息: Register manager www.magedu.com#/webapps to cluster element Engine with name Catalina
2016-7-19 17:14:48 org.apache.catalina.ha.session.DeltaManager startInternal
信息: Starting clustering manager at www.magedu.com#/webapps
2016-7-19 17:14:48 org.apache.catalina.ha.session.DeltaManager getAllClusterSessions
信息: Manager [www.magedu.com#/webapps], requesting session state from org.apache.catalina.tribes.membership.MemberImpl[tcp://{192, 168, 10, 8
}:4000,{192, 168, 10, 8},4000, alive=21301, securePort=-1, UDP Port=-1, id={-115 66 -107 71 -7 -62 71 -110 -117 45 -20 -110 -35 -57 91 103 },
 payload={}, command={}, domain={}, ]. This operation will timeout if no session state has been received within 60 seconds.
2016-7-19 17:14:48 org.apache.catalina.ha.session.DeltaManager waitForSendAllSessions
信息: Manager [www.magedu.com#/webapps]; session state send at 7/19/16 5:14 PM received in 102 ms.
2016-7-19 17:14:48 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deploying web application directory /usr/local/apache-tomcat-7.0.33/webapps/manager
2016-7-19 17:14:48 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deploying web application directory /usr/local/apache-tomcat-7.0.33/webapps/docs
2016-7-19 17:14:48 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deploying web application directory /usr/local/apache-tomcat-7.0.33/webapps/host-manager
2016-7-19 17:14:48 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deploying web application directory /usr/local/apache-tomcat-7.0.33/webapps/examples
2016-7-19 17:14:48 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deploying web application directory /usr/local/apache-tomcat-7.0.33/webapps/ROOT
2016-7-19 17:14:48 org.apache.catalina.ha.session.JvmRouteBinderValve startInternal
信息: JvmRouteBinderValve started
2016-7-19 17:14:48 org.apache.coyote.AbstractProtocol start
信息: Starting ProtocolHandler ["http-bio-8080"]
2016-7-19 17:14:48 org.apache.coyote.AbstractProtocol start
信息: Starting ProtocolHandler ["ajp-bio-8009"]
2016-7-19 17:14:48 org.apache.catalina.startup.Catalina start
信息: Server startup in 3224 ms

测试:通过Windows的ie浏览器访问172.16.100.106;

刷新页面,session id没有变化,实现session共享;

测试:通过Windows的ie浏览器访问http://172.16.100.106/balancer-manager;

TC2:

[root@node2 tomcat]# catalina.sh stop(停止catalina服务)
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/java/latest
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar

测试:通过Windows的ie浏览器访问http://172.16.100.106/balancer-manager;

[root@node2 tomcat]# catalina.sh start(启动catalina服务)
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/java/latest
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar

前端httpd服务器:
[root@Smoke extra]# vim ../httpd.conf(编辑httpd.conf配置文件)

#Include /etc/httpd/extra/httpd-proxy.conf
Include /etc/httpd/extra/httpd-jk.conf

测试:通过Windows的ie浏览器访问172.16.100.106,刷新还是TC1;

[root@Smoke extra]# vim httpd-jk.conf(编辑httpd-jk.conf配置文件)
LoadModule  jk_module  modules/mod_jk.so
JkWorkersFile  /etc/httpd/extra/workers.properties
JkLogFile  logs/mod_jk.log
JkLogLevel  debug
JkMount  /* lbcluster1
JkMount  /status/  stat1
[root@Smoke extra]# vim workers.properties(编辑workers.properties文件)

worker.list = lbcluster1,stat1
worker.TomcatA.port = 8009
worker.TomcatA.host = 192.168.10.8
worker.TomcatA.type = ajp13
worker.TomcatA.lbfactor = 1
worker.TomcatB.port = 8009
worker.TomcatB.host = 192.168.10.9
worker.TomcatB.type = ajp13
worker.TomcatB.lbfactor = 1
worker.lbcluster1.type = lb
worker.lbcluster1.balance_workers = TomcatA, TomcatB
worker.lbcluster1.sticky_session=0
worker.lbcluster1.method=R
worker.stat1.type = status

[root@Smoke extra]# service httpd restart(重启httpd服务)
停止 httpd:                                               [确定]
正在启动 httpd:                                           [确定]

测试:通过Windows的ie浏览器访问172.16.100.106;

刷新页面;

测试:通过Windows的ie浏览器访问172.16.100.106/status/;

TC2:

[root@node2 tomcat]# catalina.sh stop(停止catalina服务)
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/java/latest
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar

测试:通过Windows的ie浏览器访问172.16.100.106/status/;

测试:通过Windows的ie浏览器访问172.16.100.106,刷新页面,没有改变;

测试:通过Windows的ie浏览器访问172.16.100.106/status/;

[root@node2 tomcat]# netstat -tunlp(查看系统服务,-t代表tcp,-u代表udp,-n以数字显示,-l监听端口,-p显示服务名称)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
tcp        0      0 127.0.0.1:2208              0.0.0.0:*                   LISTEN      3420/./hpiod        
tcp        0      0 0.0.0.0:751                 0.0.0.0:*                   LISTEN      3113/rpc.statd      
tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN      3072/portmap        
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      3443/sshd           
tcp        0      0 127.0.0.1:631               0.0.0.0:*                   LISTEN      3457/cupsd          
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      3498/sendmail       
tcp        0      0 127.0.0.1:6010              0.0.0.0:*                   LISTEN      15885/sshd          
tcp        0      0 127.0.0.1:2207              0.0.0.0:*                   LISTEN      3425/python         
tcp        0      0 :::22                       :::*                        LISTEN      3443/sshd           
tcp        0      0 ::1:6010                    :::*                        LISTEN      15885/sshd          
udp        0      0 0.0.0.0:58022               0.0.0.0:*                               3649/avahi-daemon   
udp        0      0 0.0.0.0:5353                0.0.0.0:*                               3649/avahi-daemon   
udp        0      0 0.0.0.0:745                 0.0.0.0:*                               3113/rpc.statd      
udp        0      0 0.0.0.0:748                 0.0.0.0:*                               3113/rpc.statd      
udp        0      0 0.0.0.0:111                 0.0.0.0:*                               3072/portmap        
udp        0      0 0.0.0.0:631                 0.0.0.0:*                               3457/cupsd          
udp        0      0 :::34898                    :::*                                    3649/avahi-daemon   
udp        0      0 :::5353                     :::*                                    3649/avahi-daemon   
[root@node2 tomcat]# catalina.sh start(启动catalina服务)
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/java/latest
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar

测试:通过Windows的ie浏览器访问172.16.100.106,刷新页面

刷新页面;

测试:通过Windows的ie浏览器访问172.16.100.106/status/;

前端httpd服务器:

[root@Smoke extra]# cd(切换到用户家目录)
[root@Smoke ~]# service httpd stop(停止httpd服务)
停止 httpd:                                               [确定]
[root@Smoke nginx-1.4.1]# cd /etc/nginx/(切换到/etc/nginx目录)
[root@Smoke nginx]# vim nginx.conf(编辑nginx.conf配置文件)

    #gzip  on;
    upstream tomcatsrvs {
        server 192.168.10.8:8080;
        server 192.168.10.9:8080;
    }

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            proxy_pass http://tomcatsrvs;
        }

[root@Smoke nginx]# service nginx configtest(检查nginx配置文件语法)
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@Smoke nginx]# service nginx start(启动nginx服务)
正在启动 nginx:                                           [确定]

测试:通过Windows的ie浏览器访问172.16.100.106;

刷新页面;