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;

刷新页面;

浙公网安备 33010602011771号