集群环境,一个apache+三台tomcat上实现负载均衡
程序员文章站
2022-03-07 15:15:12
...
安装软件版本,文本后面有软件以及配置文件下载地址
集群环境,一个apache负载均衡到三台tomcat上
apr-1.4.8.tar.gz
apr-util-1.5.1.tar.gz
jdk1.8.0_131.tar.gz
mod_jk-1.2.31-httpd-2.2.x.so
pcre-8.42.tar.gz
httpd-2.2.25.tar.gz
apache-tomcat-7.0.94.tar.gz
准备工作,在自己的linux(Centos7.4)环境上,新建一个目录,把上面的软件都上传到自己的目录,
然后全部解压tar.gz文件,tomcat解压备份三份,分别命名Tomcat71,Tomcat72,Tomcat73
第一步: 配置JDK的环境变量
# vi /etc/profile
#添加内容
#java environment
export JAVA_HOME=/home/software/jdk1.8.0_131/
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
#生效环境变量
# source /etc/profile
#检查是否生效 java,javac,java -version
第二步:修改tomcat的配置文件
由于本地安装在一台物理机器中,所以需要修改很多个位置,详情看修改位置备注信息server.xml。,三台tomcat都需要去修改下面的位置
修改内容如下: 具体修改内容,可以看三个tomcat的配置文件
<?xml version='1.0' encoding='utf-8'?>
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<!-- Note: A "Server" is not itself a "Container", so you may not
define subcomponents such as "Valves" at this level.
Documentation at /docs/config/server.html
-->
<!--修改位置一: Server port="8005" 在一台机器中,每个tomcat的端口要不同,如果在不同的物理机器中,那么不需要修改-->
<Server port="8005" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.startup.VersionLoggerListener" />
<!-- Security listener. Documentation at /docs/config/listeners.html
<Listener className="org.apache.catalina.security.SecurityListener" />
-->
<!--APR library loader. Documentation at /docs/apr.html -->
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
<!--Initialize Jasper prior to webapps are loaded. Documentation at /docs/jasper-howto.html -->
<Listener className="org.apache.catalina.core.JasperListener" />
<!-- Prevent memory leaks due to use of particular java/javax APIs-->
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
<!-- Global JNDI resources
Documentation at /docs/jndi-resources-howto.html
-->
<GlobalNamingResources>
<!-- Editable user database that can also be used by
UserDatabaseRealm to authenticate users
-->
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />
</GlobalNamingResources>
<!-- A "Service" is a collection of one or more "Connectors" that share
a single "Container" Note: A "Service" is not itself a "Container",
so you may not define subcomponents such as "Valves" at this level.
Documentation at /docs/config/service.html
-->
<Service name="Catalina">
<!--The connectors can use a shared executor, you can define one or more named thread pools-->
<!--
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
maxThreads="150" minSpareThreads="4"/>
-->
<!-- A "Connector" represents an endpoint by which requests are received
and responses are returned. Documentation at :
Java HTTP Connector: /docs/config/http.html (blocking & non-blocking)
Java AJP Connector: /docs/config/ajp.html
APR (HTTP/AJP) Connector: /docs/apr.html
Define a non-SSL HTTP/1.1 Connector on port 8080
-->
<!--修改位置二: Connector port="8080" 在一台机器中,每个tomcat的端口要不同,如果在不同的物理机器中,那么不需要修改也可以-->
<!--修改位置三: redirectPort="8443" 在一台机器中,每个tomcat的端口要不同,如果在不同的物理机器中,那么不需要修改也可以-->
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<!-- A "Connector" using the shared thread pool-->
<!--
<Connector executor="tomcatThreadPool"
port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
-->
<!-- Define a SSL HTTP/1.1 Connector on port 8443
This connector uses the BIO implementation that requires the JSSE
style configuration. When using the APR/native implementation, the
OpenSSL style configuration is required as described in the APR/native
documentation -->
<!--
<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" />
-->
<!-- Define an AJP 1.3 Connector on port 8009 -->
<!--修改位置四: Connector port="8009" 在一台机器中,每个tomcat的端口要不同,如果在不同的物理机器中,那么不需要修改也可以-->
<!--修改位置五: redirectPort="8443" 在一台机器中,每个tomcat的端口要不同,这个值跟上面修改位置三值一样,如果在不同的物理机器中,那么不需要修改也可以-->
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
<!-- An Engine represents the entry point (within Catalina) that processes
every request. The Engine implementation for Tomcat stand alone
analyzes the HTTP headers included with the request, and passes them
on to the appropriate Host (virtual host).
Documentation at /docs/config/engine.html -->
<!-- You should set jvmRoute to support load-balancing via AJP ie :
<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">
-->
<!--修改位置六: jvmRoute="Tomcat71" jvmRoute修改为自己定义的值,后续集群配置需要-->
<Engine name="Catalina" defaultHost="localhost" jvmRoute="Tomcat71">
<!--For clustering, please take a look at documentation at:
/docs/cluster-howto.html (simple how to)
/docs/config/cluster.html (reference documentation) -->
<!--修改位置七 打开这个,用于session共享-->
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
<!-- Use the LockOutRealm to prevent attempts to guess user passwords
via a brute-force attack -->
<Realm className="org.apache.catalina.realm.LockOutRealm">
<!-- This Realm uses the UserDatabase configured in the global JNDI
resources under the key "UserDatabase". Any edits
that are performed against this UserDatabase are immediately
available for use by the Realm. -->
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm>
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<!-- SingleSignOn valve, share authentication between web applications
Documentation at: /docs/config/valve.html -->
<!--
<Valve className="org.apache.catalina.authenticator.SingleSignOn" />
-->
<!-- Access log processes all example.
Documentation at: /docs/config/valve.html
Note: The pattern used is equivalent to using pattern="common" -->
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
</Engine>
</Service>
</Server>
第三步:安装apache
Apache至少需要apr、apr-util、pcre组件的支持。
1.查询是否安装了apache服务器httpd
[root@localhost src]# rpm -qa|grep httpd
httpd-2.4.6-45.el7.centos.x86_64
httpd-tools-2.4.6-45.el7.centos.x86_64
2.卸载系统自动装的apache服务器httpd
[root@localhost src]# httpd -k stop #停止httpd服务器
[root@localhost src]# yum remove httpd #卸载httpd服务器
3,检查系统是否安装了GCC
[root@localhost src]# gcc
bash: gcc: 未找到命令... #出现未找到命令提示,说明没有安装GCC
4,安装GCC和gcc-c++
[root@localhost src]# yum -y install gcc
[root@localhost pcre-8.40]# yum -y install gcc-c++
5 编译安装apr-1.4.8
#改变目录到apr-apr-1.4.8
[root@localhost local]# cd apr-1.4.8
#指定apr的安装目录为/usr/local/apr 配置
[root@localhost apr-1.4.8]# ./configure -prefix=/usr/local/apr
#编译安装
[root@localhost apr-1.4.8]# make && make install
6,编译安装 apr-uril-1.5.2
#改变目录到apr-util-1.5.2/
[root@localhost local]# cd apr-util-1.5.2/
#指定apr-util的安装路径,指定apr-util所对应的apr
[root@localhost apr-util-1.5.2]# ./configure -prefix=/usr/local/apr-util -with-apr=/usr/local/apr
#编译安装
[root@localhost apr-util-1.5.2]# make && make install
7, 编译安装pcre
#卸载系统自带的pcre
[root@localhost apr-util-1.5.2]# rpm -qa pcre
pcre-8.32-15.el7_2.1.x86_64
#改变目录到pcre-8.42/
[root@localhost local]# cd pcre-8.42/
#指定prce的安装路径,指定apr-util所对应的apr
[root@localhost pcre-8.42]# ./configure -prefix=/usr/local/pcre
#编译安装(make是编译 make install是安装)
[root@localhost pcre-8.42]# make && make install
8, 编译安装apache
编译和安装apache分为动态、静态两种方式。动态编译是指在以后的使用中随时调整配置文件就可以加载模块;静态则相反,在编译时就决定了相应的模块。
#改变目录到httpd-2.2.25/
[root@localhost local]# cd httpd-2.2.25/
#配置
[root@localhost httpd-2.2.25]# ./configure -prefix=/usr/local/apache -sysconfdir=/etc/httpd -enable-so -enable-rewrite -with-apr=/usr/local/apr -with-apr-util=/usr/local/apr-util -with-pcre=/usr/local/pcre
#编译安装
[root@localhost httpd-2.2.25]#make && make install
第四步:配置apache
到apache的目录,本文安装的目录为 /usr/local/apache/
修改httpd.conf,修改内容为:ServerName localhost:80
第五步:配置集群,
1,新建文件,mod_jk.conf,uriworkermap.properties,workers.properties
内容分别为为:
mod_jk.conf的内容:
#mod_jk.so文件的位置
LoadModule jk_module modules/mod_jk.so
#配置文件的位置
JkWorkersFile conf/workers.properties
#配置文件的位置
JkMountFile conf/uriworkermap.properties
#集群日志文件的位置
JkLogFile /usr/local/apache/logs/mod_jk.log
#日志打印级别
JkLogLevel warn
#日志后期后缀格式
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
uriworkermap.properties的内容:
/admin/*=wlb
/manager/*=wlb
/jsp-examples/*=wlb
/servlets-examples/*=wlb
/examples/*=wlb
/*.jsp=wlb
/*=wlb
!/servlets-examples/*.jpeg=wlb
/jkmanager=jkstatus
!/*.gif=wlb
!/*.jpg=wlb
!/*.png=wlb
!/*.css=wlb
!/*.js=wlb
!/*.htm=wlb
!/*.html=wlb
workers.properties的内容:
#集群列表
worker.list=wlb,jkstatus
# Define preferred failover node for tomcat71
#修改为自己的tomcat的server.xml的端口名字以及 jvmRoute="Tomcat71" 的名字
worker.Tomcat71.port=8009
#一台机器,IP为localhost,不同物理机器,修改为对应的ip
worker.Tomcat71.host=localhost
worker.Tomcat71.type=ajp13
#负载因子
worker.Tomcat71.lbfactor=1
#worker.tomcat1.redirect=tomcat72
#修改为自己的tomcat的server.xml的端口名字以及 jvmRoute="Tomcat71" 的名字
worker.Tomcat72.port=8010
worker.Tomcat72.host=localhost
worker.Tomcat72.type=ajp13
worker.Tomcat72.lbfactor=1
#worker.tomcat1.redirect=tomcat73
#修改为自己的tomcat的server.xml的端口名字以及 jvmRoute="Tomcat71" 的名字
worker.Tomcat73.port=8011
#一台机器,IP为localhost,不同物理机器,修改为对应的ip
worker.Tomcat73.host=localhost
worker.Tomcat73.type=ajp13
worker.Tomcat73.lbfactor=1
#负载因子
worker.wlb.type=lb
worker.wlb.balance_workers=Tomcat71,Tomcat72,Tomcat73
worker.jkstatus.type=status
2,把分享的mod_jk.so文件放在/usr/local/apache/modules/ 目录下
3,修改httpd.conf文件,添加内容:
Include conf/mod_jk.conf 把集群的配置文件放在apache中
第六步:测试
把新建的test项目放在三台tomcat中,然后启动tomcat71,tomcat72,tomcat73
查看是否启动成功:
[root@localhost bin]# ps -ef|grep tomcat
root 5003 1 5 11:23 pts/1 00:00:31 /home/leifengchuan/software/jdk1.8.0_131//bin/java -Djava.util.logging.config.file=/home/leifengchuan/software/Tomcat71/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Dignore.endorsed.dirs= -classpath /home/leifengchuan/software/Tomcat71/bin/bootstrap.jar:/home/leifengchuan/software/Tomcat71/bin/tomcat-juli.jar -Dcatalina.base=/home/leifengchuan/software/Tomcat71 -Dcatalina.home=/home/leifengchuan/software/Tomcat71 -Djava.io.tmpdir=/home/leifengchuan/software/Tomcat71/temp org.apache.catalina.startup.Bootstrap start
root 5022 1 4 11:24 pts/1 00:00:26 /home/leifengchuan/software/jdk1.8.0_131//bin/java -Djava.util.logging.config.file=/home/leifengchuan/software/Tomcat72/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Dignore.endorsed.dirs= -classpath /home/leifengchuan/software/Tomcat72/bin/bootstrap.jar:/home/leifengchuan/software/Tomcat72/bin/tomcat-juli.jar -Dcatalina.base=/home/leifengchuan/software/Tomcat72 -Dcatalina.home=/home/leifengchuan/software/Tomcat72 -Djava.io.tmpdir=/home/leifengchuan/software/Tomcat72/temp org.apache.catalina.startup.Bootstrap start
root 5041 1 4 11:24 pts/1 00:00:22 /home/leifengchuan/software/jdk1.8.0_131//bin/java -Djava.util.logging.config.file=/home/leifengchuan/software/Tomcat73/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Dignore.endorsed.dirs= -classpath /home/leifengchuan/software/Tomcat73/bin/bootstrap.jar:/home/leifengchuan/software/Tomcat73/bin/tomcat-juli.jar -Dcatalina.base=/home/leifengchuan/software/Tomcat73 -Dcatalina.home=/home/leifengchuan/software/Tomcat73 -Djava.io.tmpdir=/home/leifengchuan/software/Tomcat73/temp org.apache.catalina.startup.Bootstrap start
root 5415 4306 0 11:33 pts/1 00:00:00 grep --color=auto tomcat
说明三台tomcat启动
启动apache, ./usr/local/apache/bin/apachectl start
出现:
[root@localhost bin]# ps -ef|grep httpd
root 5276 1 0 11:28 ? 00:00:00 /usr/local/apache/bin/httpd -k start
daemon 5277 5276 0 11:28 ? 00:00:00 /usr/local/apache/bin/httpd -k start
daemon 5278 5276 0 11:28 ? 00:00:00 /usr/local/apache/bin/httpd -k start
daemon 5279 5276 0 11:28 ? 00:00:00 /usr/local/apache/bin/httpd -k start
daemon 5280 5276 0 11:28 ? 00:00:00 /usr/local/apache/bin/httpd -k start
daemon 5281 5276 0 11:28 ? 00:00:00 /usr/local/apache/bin/httpd -k start
root 5321 4306 0 11:29 pts/1 00:00:00 grep --color=auto httpd
说明apache起来了,分别用三个浏览器去访问
http://ip/test/test.jsp 可以看到每个浏览器访问的是不同的tomcat,实现负载均衡,每个浏览器,每次请求,session一致
链接:https://pan.baidu.com/s/11zMz5To_eN2mVGkYBDXHtw
提取码:xgza
集群环境,一个apache负载均衡到三台tomcat上
apr-1.4.8.tar.gz
apr-util-1.5.1.tar.gz
jdk1.8.0_131.tar.gz
mod_jk-1.2.31-httpd-2.2.x.so
pcre-8.42.tar.gz
httpd-2.2.25.tar.gz
apache-tomcat-7.0.94.tar.gz
准备工作,在自己的linux(Centos7.4)环境上,新建一个目录,把上面的软件都上传到自己的目录,
然后全部解压tar.gz文件,tomcat解压备份三份,分别命名Tomcat71,Tomcat72,Tomcat73
第一步: 配置JDK的环境变量
# vi /etc/profile
#添加内容
#java environment
export JAVA_HOME=/home/software/jdk1.8.0_131/
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
#生效环境变量
# source /etc/profile
#检查是否生效 java,javac,java -version
第二步:修改tomcat的配置文件
由于本地安装在一台物理机器中,所以需要修改很多个位置,详情看修改位置备注信息server.xml。,三台tomcat都需要去修改下面的位置
修改内容如下: 具体修改内容,可以看三个tomcat的配置文件
<?xml version='1.0' encoding='utf-8'?>
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<!-- Note: A "Server" is not itself a "Container", so you may not
define subcomponents such as "Valves" at this level.
Documentation at /docs/config/server.html
-->
<!--修改位置一: Server port="8005" 在一台机器中,每个tomcat的端口要不同,如果在不同的物理机器中,那么不需要修改-->
<Server port="8005" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.startup.VersionLoggerListener" />
<!-- Security listener. Documentation at /docs/config/listeners.html
<Listener className="org.apache.catalina.security.SecurityListener" />
-->
<!--APR library loader. Documentation at /docs/apr.html -->
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
<!--Initialize Jasper prior to webapps are loaded. Documentation at /docs/jasper-howto.html -->
<Listener className="org.apache.catalina.core.JasperListener" />
<!-- Prevent memory leaks due to use of particular java/javax APIs-->
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
<!-- Global JNDI resources
Documentation at /docs/jndi-resources-howto.html
-->
<GlobalNamingResources>
<!-- Editable user database that can also be used by
UserDatabaseRealm to authenticate users
-->
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />
</GlobalNamingResources>
<!-- A "Service" is a collection of one or more "Connectors" that share
a single "Container" Note: A "Service" is not itself a "Container",
so you may not define subcomponents such as "Valves" at this level.
Documentation at /docs/config/service.html
-->
<Service name="Catalina">
<!--The connectors can use a shared executor, you can define one or more named thread pools-->
<!--
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
maxThreads="150" minSpareThreads="4"/>
-->
<!-- A "Connector" represents an endpoint by which requests are received
and responses are returned. Documentation at :
Java HTTP Connector: /docs/config/http.html (blocking & non-blocking)
Java AJP Connector: /docs/config/ajp.html
APR (HTTP/AJP) Connector: /docs/apr.html
Define a non-SSL HTTP/1.1 Connector on port 8080
-->
<!--修改位置二: Connector port="8080" 在一台机器中,每个tomcat的端口要不同,如果在不同的物理机器中,那么不需要修改也可以-->
<!--修改位置三: redirectPort="8443" 在一台机器中,每个tomcat的端口要不同,如果在不同的物理机器中,那么不需要修改也可以-->
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<!-- A "Connector" using the shared thread pool-->
<!--
<Connector executor="tomcatThreadPool"
port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
-->
<!-- Define a SSL HTTP/1.1 Connector on port 8443
This connector uses the BIO implementation that requires the JSSE
style configuration. When using the APR/native implementation, the
OpenSSL style configuration is required as described in the APR/native
documentation -->
<!--
<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" />
-->
<!-- Define an AJP 1.3 Connector on port 8009 -->
<!--修改位置四: Connector port="8009" 在一台机器中,每个tomcat的端口要不同,如果在不同的物理机器中,那么不需要修改也可以-->
<!--修改位置五: redirectPort="8443" 在一台机器中,每个tomcat的端口要不同,这个值跟上面修改位置三值一样,如果在不同的物理机器中,那么不需要修改也可以-->
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
<!-- An Engine represents the entry point (within Catalina) that processes
every request. The Engine implementation for Tomcat stand alone
analyzes the HTTP headers included with the request, and passes them
on to the appropriate Host (virtual host).
Documentation at /docs/config/engine.html -->
<!-- You should set jvmRoute to support load-balancing via AJP ie :
<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">
-->
<!--修改位置六: jvmRoute="Tomcat71" jvmRoute修改为自己定义的值,后续集群配置需要-->
<Engine name="Catalina" defaultHost="localhost" jvmRoute="Tomcat71">
<!--For clustering, please take a look at documentation at:
/docs/cluster-howto.html (simple how to)
/docs/config/cluster.html (reference documentation) -->
<!--修改位置七 打开这个,用于session共享-->
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
<!-- Use the LockOutRealm to prevent attempts to guess user passwords
via a brute-force attack -->
<Realm className="org.apache.catalina.realm.LockOutRealm">
<!-- This Realm uses the UserDatabase configured in the global JNDI
resources under the key "UserDatabase". Any edits
that are performed against this UserDatabase are immediately
available for use by the Realm. -->
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm>
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<!-- SingleSignOn valve, share authentication between web applications
Documentation at: /docs/config/valve.html -->
<!--
<Valve className="org.apache.catalina.authenticator.SingleSignOn" />
-->
<!-- Access log processes all example.
Documentation at: /docs/config/valve.html
Note: The pattern used is equivalent to using pattern="common" -->
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
</Engine>
</Service>
</Server>
第三步:安装apache
Apache至少需要apr、apr-util、pcre组件的支持。
1.查询是否安装了apache服务器httpd
[root@localhost src]# rpm -qa|grep httpd
httpd-2.4.6-45.el7.centos.x86_64
httpd-tools-2.4.6-45.el7.centos.x86_64
2.卸载系统自动装的apache服务器httpd
[root@localhost src]# httpd -k stop #停止httpd服务器
[root@localhost src]# yum remove httpd #卸载httpd服务器
3,检查系统是否安装了GCC
[root@localhost src]# gcc
bash: gcc: 未找到命令... #出现未找到命令提示,说明没有安装GCC
4,安装GCC和gcc-c++
[root@localhost src]# yum -y install gcc
[root@localhost pcre-8.40]# yum -y install gcc-c++
5 编译安装apr-1.4.8
#改变目录到apr-apr-1.4.8
[root@localhost local]# cd apr-1.4.8
#指定apr的安装目录为/usr/local/apr 配置
[root@localhost apr-1.4.8]# ./configure -prefix=/usr/local/apr
#编译安装
[root@localhost apr-1.4.8]# make && make install
6,编译安装 apr-uril-1.5.2
#改变目录到apr-util-1.5.2/
[root@localhost local]# cd apr-util-1.5.2/
#指定apr-util的安装路径,指定apr-util所对应的apr
[root@localhost apr-util-1.5.2]# ./configure -prefix=/usr/local/apr-util -with-apr=/usr/local/apr
#编译安装
[root@localhost apr-util-1.5.2]# make && make install
7, 编译安装pcre
#卸载系统自带的pcre
[root@localhost apr-util-1.5.2]# rpm -qa pcre
pcre-8.32-15.el7_2.1.x86_64
#改变目录到pcre-8.42/
[root@localhost local]# cd pcre-8.42/
#指定prce的安装路径,指定apr-util所对应的apr
[root@localhost pcre-8.42]# ./configure -prefix=/usr/local/pcre
#编译安装(make是编译 make install是安装)
[root@localhost pcre-8.42]# make && make install
8, 编译安装apache
编译和安装apache分为动态、静态两种方式。动态编译是指在以后的使用中随时调整配置文件就可以加载模块;静态则相反,在编译时就决定了相应的模块。
#改变目录到httpd-2.2.25/
[root@localhost local]# cd httpd-2.2.25/
#配置
[root@localhost httpd-2.2.25]# ./configure -prefix=/usr/local/apache -sysconfdir=/etc/httpd -enable-so -enable-rewrite -with-apr=/usr/local/apr -with-apr-util=/usr/local/apr-util -with-pcre=/usr/local/pcre
#编译安装
[root@localhost httpd-2.2.25]#make && make install
第四步:配置apache
到apache的目录,本文安装的目录为 /usr/local/apache/
修改httpd.conf,修改内容为:ServerName localhost:80
第五步:配置集群,
1,新建文件,mod_jk.conf,uriworkermap.properties,workers.properties
内容分别为为:
mod_jk.conf的内容:
#mod_jk.so文件的位置
LoadModule jk_module modules/mod_jk.so
#配置文件的位置
JkWorkersFile conf/workers.properties
#配置文件的位置
JkMountFile conf/uriworkermap.properties
#集群日志文件的位置
JkLogFile /usr/local/apache/logs/mod_jk.log
#日志打印级别
JkLogLevel warn
#日志后期后缀格式
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
uriworkermap.properties的内容:
/admin/*=wlb
/manager/*=wlb
/jsp-examples/*=wlb
/servlets-examples/*=wlb
/examples/*=wlb
/*.jsp=wlb
/*=wlb
!/servlets-examples/*.jpeg=wlb
/jkmanager=jkstatus
!/*.gif=wlb
!/*.jpg=wlb
!/*.png=wlb
!/*.css=wlb
!/*.js=wlb
!/*.htm=wlb
!/*.html=wlb
workers.properties的内容:
#集群列表
worker.list=wlb,jkstatus
# Define preferred failover node for tomcat71
#修改为自己的tomcat的server.xml的端口名字以及 jvmRoute="Tomcat71" 的名字
worker.Tomcat71.port=8009
#一台机器,IP为localhost,不同物理机器,修改为对应的ip
worker.Tomcat71.host=localhost
worker.Tomcat71.type=ajp13
#负载因子
worker.Tomcat71.lbfactor=1
#worker.tomcat1.redirect=tomcat72
#修改为自己的tomcat的server.xml的端口名字以及 jvmRoute="Tomcat71" 的名字
worker.Tomcat72.port=8010
worker.Tomcat72.host=localhost
worker.Tomcat72.type=ajp13
worker.Tomcat72.lbfactor=1
#worker.tomcat1.redirect=tomcat73
#修改为自己的tomcat的server.xml的端口名字以及 jvmRoute="Tomcat71" 的名字
worker.Tomcat73.port=8011
#一台机器,IP为localhost,不同物理机器,修改为对应的ip
worker.Tomcat73.host=localhost
worker.Tomcat73.type=ajp13
worker.Tomcat73.lbfactor=1
#负载因子
worker.wlb.type=lb
worker.wlb.balance_workers=Tomcat71,Tomcat72,Tomcat73
worker.jkstatus.type=status
2,把分享的mod_jk.so文件放在/usr/local/apache/modules/ 目录下
3,修改httpd.conf文件,添加内容:
Include conf/mod_jk.conf 把集群的配置文件放在apache中
第六步:测试
把新建的test项目放在三台tomcat中,然后启动tomcat71,tomcat72,tomcat73
查看是否启动成功:
[root@localhost bin]# ps -ef|grep tomcat
root 5003 1 5 11:23 pts/1 00:00:31 /home/leifengchuan/software/jdk1.8.0_131//bin/java -Djava.util.logging.config.file=/home/leifengchuan/software/Tomcat71/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Dignore.endorsed.dirs= -classpath /home/leifengchuan/software/Tomcat71/bin/bootstrap.jar:/home/leifengchuan/software/Tomcat71/bin/tomcat-juli.jar -Dcatalina.base=/home/leifengchuan/software/Tomcat71 -Dcatalina.home=/home/leifengchuan/software/Tomcat71 -Djava.io.tmpdir=/home/leifengchuan/software/Tomcat71/temp org.apache.catalina.startup.Bootstrap start
root 5022 1 4 11:24 pts/1 00:00:26 /home/leifengchuan/software/jdk1.8.0_131//bin/java -Djava.util.logging.config.file=/home/leifengchuan/software/Tomcat72/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Dignore.endorsed.dirs= -classpath /home/leifengchuan/software/Tomcat72/bin/bootstrap.jar:/home/leifengchuan/software/Tomcat72/bin/tomcat-juli.jar -Dcatalina.base=/home/leifengchuan/software/Tomcat72 -Dcatalina.home=/home/leifengchuan/software/Tomcat72 -Djava.io.tmpdir=/home/leifengchuan/software/Tomcat72/temp org.apache.catalina.startup.Bootstrap start
root 5041 1 4 11:24 pts/1 00:00:22 /home/leifengchuan/software/jdk1.8.0_131//bin/java -Djava.util.logging.config.file=/home/leifengchuan/software/Tomcat73/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Dignore.endorsed.dirs= -classpath /home/leifengchuan/software/Tomcat73/bin/bootstrap.jar:/home/leifengchuan/software/Tomcat73/bin/tomcat-juli.jar -Dcatalina.base=/home/leifengchuan/software/Tomcat73 -Dcatalina.home=/home/leifengchuan/software/Tomcat73 -Djava.io.tmpdir=/home/leifengchuan/software/Tomcat73/temp org.apache.catalina.startup.Bootstrap start
root 5415 4306 0 11:33 pts/1 00:00:00 grep --color=auto tomcat
说明三台tomcat启动
启动apache, ./usr/local/apache/bin/apachectl start
出现:
[root@localhost bin]# ps -ef|grep httpd
root 5276 1 0 11:28 ? 00:00:00 /usr/local/apache/bin/httpd -k start
daemon 5277 5276 0 11:28 ? 00:00:00 /usr/local/apache/bin/httpd -k start
daemon 5278 5276 0 11:28 ? 00:00:00 /usr/local/apache/bin/httpd -k start
daemon 5279 5276 0 11:28 ? 00:00:00 /usr/local/apache/bin/httpd -k start
daemon 5280 5276 0 11:28 ? 00:00:00 /usr/local/apache/bin/httpd -k start
daemon 5281 5276 0 11:28 ? 00:00:00 /usr/local/apache/bin/httpd -k start
root 5321 4306 0 11:29 pts/1 00:00:00 grep --color=auto httpd
说明apache起来了,分别用三个浏览器去访问
http://ip/test/test.jsp 可以看到每个浏览器访问的是不同的tomcat,实现负载均衡,每个浏览器,每次请求,session一致
链接:https://pan.baidu.com/s/11zMz5To_eN2mVGkYBDXHtw
提取码:xgza