共计 7775 个字符,预计需要花费 20 分钟才能阅读完成。
之前写了一篇文章 Apache 服务器的安装及相关问题处理方案 http://www.linuxidc.com/Linux/2015-07/120149.htm,本文就是为了补充当时的那篇文章而写。现在再次想尝试一下怎么在 Linux 下搭建 Apache+Tomcat 负载均衡集群,但是发现自己记得不是很清楚了,然后就写下了这篇文章。
负载均衡集群配置(1):Tomcat 的配置
修改“tomcat/conf/server.xml”文件
编辑 server.xml 文件,找到“<Connector>
”元素节点,在 server.xml 文件里面未注释掉的有两个 <Connector>
元素节点。找到第二个也就是上面一行注释为
<!-- Definean AJP 1.3 Connector on port 8009 -->
的节点。将其修改为
———————————–需要操作的代码———————————————-
<!-- Define an AJP 1.3 Connector on port 8009 --> | |
<Connector port="8009" protocolhandlerclassname="org.apache.jk.server.jkcoyotehandler" protocol="AJP/1.3" redirectPort="8443" /> |
注意: 如果是在一台 PC 上同时运行多个 tomcat,须将每个 tomcat 对的 server.xml 文件里面的“<Connector>
”元素节点里面的 port(端口号)设置为不同的值。这里不同上面只改第二个,而是两个“<Connector>
”元素节点都须要修改。
负载均衡集群配置(2):
接下来继续修改这个文件,找到“<Connector>
”元素节点下面的注释如下
<!-- 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"> | |
--> |
里面有
<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">
将其注释打开。这里进行 tomcat 的命名,即修改 jvmRoute 的值为 tomcat 实例名,不同的 tomcat 设置不同的值(这里不管是否是同一 PC 都须不同)。比如我的修改为 tomcat1 和 tomcat2
———————————–需要操作的代码———————————————-
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1" >
负载均衡集群配置(3):
接下来还是操作 tomcat 的 server.xml 文件,在 <Engine>
或<Host>
元素节点下添加以下内容
———————————–需要操作的代码———————————————-
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"> | |
<Manager className="org.apache.catalina.ha.session.BackupManager" | |
expireSessionsOnShutdown="false" | |
notifyListenersOnReplication="true" | |
mapSendOptions="6"/> | |
<!-- | |
<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.0.1.99" | |
port="45564" | |
frequency="500" | |
dropTime="3000"/> | |
<Receiver | |
className="org.apache.catalina.tribes.transport.nio.NioReceiver" | |
address="192.168.11.128" port="4002" | |
autoBind="100" | |
selectorTimeout="100" | |
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=""/> | |
<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> |
上述添加的代码的用处请继续看第 4 步。
负载均衡集群配置(4):
这里还是继续操作 tomcat 的 server.xml 文件
找到刚刚添加的一长串代码中的 <Cluster>
元素节点,下面开始修改,代码意义见其中的注释解释
———————————–需要操作的代码———————————————-
<Membership | |
className="org.apache.catalina.tribes.membership.McastService" | |
address="228.0.1.99" | |
port="45564" | |
frequency="500" | |
dropTime="3000"/> | |
<!-- 解释上一句代码. | |
如果主机有 vpn- 虚拟专用��络,需要要 bind 下,即添加 bind="127.0.0.1" 在 Membership 元素节点里面作为属性。如果没有的话可以不用加 bind,否则会导致 session 无法复制. | |
address 的值表示广播地址,同一组 tomcat 搭建的集群配置须一样。port 端口号,同一组 tomcat 搭建的集群配置须一样。--> | |
<Receiver | |
className="org.apache.catalina.tribes.transport.nio.NioReceiver" | |
address="192.168.11.128" | |
port="4002" | |
autoBind="100" | |
selectorTimeout="100" | |
maxThreads="6"/> | |
<!-- 解释上一句代码. | |
address 的值表示本机 IP 地址,须设置为本机 IP 地址。port 端口号(tomcat 默认可以检测到 4000~4100 之间的端口)。如果是在同一台 PC 上配置负载均衡则需要修改,使用不同的端口号,否则会因为端口冲突而失效。--> |
负载均衡集群配置(5):项目部署文件的配置
修改待发布项目的 web.xml
找到项目的 web.xml 文件,打开修改,在 <web-app>
元素节点结束标签上面一行添加
———————————–需要操作的代码———————————————-
<distributable/>
从而确保 session 能够复制。
负载均衡集群配置(6):Apache 的配置
接下来进行 Apache 配置文件的修改,找到 Apache 安装文件夹下面的 conf 文件夹里面的 httpd.conf 文件打开并进行修改,在最后面加上一下内容
———————————–需要操作的代码———————————————-
# 加载 mod_jk Module | |
LoadModule jk_module modules/mod_jk.so | |
<Ifmodule mod_jk.c> | |
# 指定 workers.properties 文件路径 | |
JkWorkersFile /usr/local/apache2/conf/workers.properties | |
# 指定 jk logs 文件存放位置 | |
JkLogFile /usr/local/apache2/logs/mod_jk.log | |
#Set the jk log level [debug/error/info] | |
JkLogLevel info | |
#Select the log format | |
JkLogStampFormat "[%a %b %d%H:%M:%S %Y]" | |
#JkOptions indicate to send SSL KEYSIZE, | |
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories | |
#JkRequestLogFormat set the requestformat | |
JkRequestLogFormat "%w %V %T %q %U%R" | |
#JkShmFile to put logs | |
JkShmFile /usr/local/apache2/logs/mod_jk.shm | |
</IfModule> | |
#指定哪些请求交给 tomcat 处理,哪些请求交给 apache 处理 | |
#注意:"loadbalancer" 为在 workers.propertise 里指定的负载分配控制器 | |
JkMount /*.jsp loadbalancer | |
# 所有的 jsp 都交给 tomcat 处理 |
负载均衡集群配置(7):
在上一步中添加的 httpd.conf 文件的最后添加的配置中的 workers.properties 文件是不存在的,需要我们在指定的位置创建一个,查看上一步可以发现文件在 /usr/local/apache2/conf/ 路径下面创建。
workers.properties 文件用于对负载均衡的负载器 worker(即 tomcat)进行具体的登记,此处的 2 个 tomcat 就作为 2 个 worker 被登记在这个文件中。
workers.properties 具体配置如下:
———————————–需要操作的代码———————————————-
#workers.properties | |
# | |
# in unix, weuse forward slashes: | |
ps=/ | |
# workers 列表 | |
worker.list=tomcat1,tomcat2,tomcat3,loadbalancer,status | |
#-------------------------------------------------------------------- | |
# 第一个 tomcat | |
#-------------------------------------------------------------------- | |
worker.tomcat1.port=8009 # 对应 tomcat 的 server.xml 中配置的 ajp13 端口号 | |
worker.tomcat1.host=127.0.0.1 #tomcat1 的主机地址,如不为本机,请填写 IP 地址 | |
worker.tomcat1.type=ajp13 # 定向包协议 | |
worker.tomcat1.lbfactor=1 #server 的负载分配权重,值越高,分得的请求越多 | |
# 以下为非必要配置,这部分配置 tomcat2 的配置同 tomcat1 | |
#worker.tomcat1.cachesize=1000 #配置 tomcat 的 jk 连接缓存大小 (非必要) | |
#worker.tomcat1.cachesize_timeout=600 # (非必要) | |
#worker.tomcat1.reclycle_timeout=300 # (非必要) | |
#worker.tomcat1.socket_keepalive=1 #防止防火墙切断未激活的网络连接(非必要) | |
#worker.tomcat1.socket_timeout=300 #(非必要) | |
#worker.tomcat1.local_worker=1 # (非必要) | |
#worker.tomcat1.retries=3 # (非必要) | |
#---------------------------------------------------------------------- | |
# 第二个 tomcat | |
#---------------------------------------------------------------------- | |
worker.tomcat2.port=8809 | |
worker.tomcat2.host=127.0.0.1 #tomcat2 的主机 IP 地址 | |
worker.tomcat2.type=ajp13 | |
worker.tomcat2.lbfactor=1 | |
#--------------------------------------------------------------------- | |
# 第三个 tomcat,使用其他 ip 对应的 tomcat | |
#--------------------------------------------------------------------- | |
worker.tomcat3.port=8009 | |
worker.tomcat3.host=192.168.11.128 | |
worker.tomcat3.type=ajp13 | |
worker.tomcat3.lbfactor=1 | |
#---------------------------------------------------------------------- | |
# load balancerworker - 负载均衡控制器 | |
# -------------------------------------------------------------------- | |
worker.loadbalancer.type=lb | |
worker.loadbalancer.balanced_workers=tomcat1,tomcat2,tomcat3 | |
# 指定分担请求的 tomcat | |
worker.loadbalancer.sticky_session=1 # 设置为粘性 session | |
worker.loadbalancer.sticky_session_force=0 # 设置当多次请求未响应,请求将转发 | |
worker.status.type=status | |
# | |
# end workers.properties |
负载均衡集群配置(8):
修改 Apache 安装陌路下的 conf 文件夹里的 httpd.conf 文件。
打开 httpd.conf 文件并修改。找到 DocumentRoot 和 Directory 并修改,将文件访问路径定位到 tomcat 的 webapps 文件夹,即待发布项目的存放位置
———————————–需要操作的代码———————————————-
# | |
# DocumentRoot: The directory out of which you will serve your | |
# documents. By default, all requests are taken from this directory, but | |
# symbolic links and aliases may be used to point to other locations. | |
# | |
DocumentRoot "/usr/local/tomcat1/webapps" | |
<Directory "/usr/local/tomcat1/webapps"> | |
Require all granted | |
Orderallow,deny | |
Allow from all | |
</Directory> |
到此配置基本完成。
下面就该进行测试了
更多相关参考:
Linux 下 Apache 与 Tomcat 的完全分布式集群配置(负载均衡)http://www.linuxidc.com/Linux/2013-08/89072.htm
Linux 下 Apache 与多个 Tomcat 集群负载均衡 http://www.linuxidc.com/Linux/2012-01/51731.htm
Nginx Tomcat 集群负载均衡解决笔记 http://www.linuxidc.com/Linux/2013-07/86827.htm
实例详解 Tomcat 组件安装 +Nginx 反向代理 Tomcat+Apache 使用 mod_jk 和 mod_proxy 反向代理和负载均衡 http://www.linuxidc.com/Linux/2013-06/85290.htm
CentOS 6.3 利用 Apache 来做集群实现负载均衡 http://www.linuxidc.com/Linux/2013-03/81623.htm
Apache 的详细介绍:请点这里
Apache 的下载地址:请点这里
本文永久更新链接地址:http://www.linuxidc.com/Linux/2015-07/120151.htm
