apache+tomcat分布式集群搭建
今天搭建apche+tomcat分布式集群,遇到很多问题,在网上找到的很多都不成功,然后和同事一起研究了一下,最终搭建成功了。做个笔记,以备自己以后参考。
1,下载apache。在下载Apache(2.4版)的时候,要下载完整版,不然会缺失很多东西。参考博文:http://jingyan.baidu.com/article/29697b912f6539ab20de3cf8.html
下载mod_jk.so,地址:http://apache.opencas.org/tomcat/tomcat-8/v8.0.33/bin/
地址里面有压缩包,下载一个与你对应的,在压缩包里面有mod_jk.so文件,拷贝到apache下文件夹modules下面。(版本注意,如果以后提示mod_jk.so错误的话,就要换一个mod_jk.so文件)。
打开conf/httpd.conf里面找到
Define SRVROOT "\apache"
ServerRoot "${SRVROOT}"
把SRVEOOT后面的路径改成你自己的Apache安装路径。
在httpd.conf同级目录下创建一个属性文件workers.properties,在文件中添加一下信息:
worker.list=jetty_a
worker.jetty_a.port=8009
worker.jetty_a.host=127.0.0.1
worker.jetty_a.type=ajp13
worker.jetty_a.lbfactor=2 worker.list=jetty_b
worker.jetty_b.port=8010
worker.jetty_b.host=127.0.0.1
worker.jetty_b.type=ajp13
worker.jetty_b.lbfactor=1 worker.list=jettybalancer
worker.jettybalancer.type=lb
worker.jettybalancer.balance_workers= jetty_a, jetty_b
worker.loadbalancer.sticky_seesion=false
worker.loadbalancer.sticky_session_force=false
上面信息是我们将要配置tomcat服务器的信息,sjp端口号分别是8009/8010,IP为本地所以需要修改,如果不是本地的两个服务器,那就不用改了。注意上面的参数,重点修改的是
worker.jetty_a.port
worker.jetty_a.host
上面tomcat的参数要和下面的参数项对应。
在conf/httpd.conf文件最下面添加一下信息。
LoadModule jk_module modules/mod_jk.so
<IfModule jk_module>
JkWorkersFile "${SRVROOT}/conf/workers.properties"
JkLogFile "${SRVROOT}/logs/mod_jk.log"
JkLogLevel warn
</IfModule> <VirtualHost *:80>
<proxy balancer://cluster>
BalancerMember ajp://127.0.0.1:8009 route=tomcat_a
BalancerMember ajp://127.0.0.1:8010 route=tomcat_b
ProxySet lbmethod=bytraffic
</proxy>
ServerAdmin ******@qq.com
#指定服务器管理员的E-MAIL地址,服务器自动将错误报告给该地址
ServerName localhost
# web客户端搜索的主机名
ErrorLog "${SRVROOT}/logs/app1_error.log"
CustomLog "${SRVROOT}/logs/app1_access.log" common
ProxyPass / balancer://cluster/ stickysession=JSESSIONID
# balancer: 复制会话的方式,包括JSESSIONID或PHPSESSIONID nofailover:on 表示会话在worker出错或停掉时会中断,当后端服务器不支持会话复制时设为on ;
# lbmethod:选择负载的调度算法,默认byrequests表示轮询调度(就是1:1),bytraffic表示加权重的调度,需加loadfactor指定权重值。
ProxyPassReverse / balancer://cluster/ stickysession=JSESSIONID
#此指令使Apache调整HTTP重定向应答中Location, Content-Location, URI头里的URL。这样可以避免在Apache作为反向代理使用时,后端服务器的HTTP重定向造成的绕过反向代理的问题。
#The ProxyRequests directive should usually be set off when using ProxyPass.
ProxyRequests Off
# 不允许作为正向代理
ProxyPreserveHost On
# 当启用时,此选项将把传入请求的"Host:"行传递给被代理的主机,而不是传递在ProxyPass中指定的主机名。
</VirtualHost>
2,下载tomcat。在tomcat使用上,没有太多的限制,能用就行。我的是8.0.33。
3,进入apache安装路径下的bin,打开cmd。
运行 httpd -k install 是安装apache的。在运行的时候,会出现很多问题,就是在apache默认的环境下,很多*.so的文件被注释了的。所以你在安装的时候会报错,错误信息会告诉你错误在哪,所以很好识别。现在安装的时候只需要把报错的*.so打开注释就行了。
报错的时候是一个一个报错的,第一次安装报错后,进行修改,然后在bin下运行cmd:httpd -k uninstall 卸载了apache,重新安装一次,一直到没有报错为止。
安装成功后,到服务里面去重新启动apache。我这还是报错了,但是这个错误会到日志里面去查看错误信息,其实还是开启一个*.so。
我这里总共打开了下面几个:
mod_proxy , mod_proxy_balancer , lbmethod_****_module , slotmem_shm_module , mod_proxy_ajp
这一部操作比较多,但是总结一句话,可以多开,不能少开,如果感觉不知道是哪个,那就多开几个。
4,apache配置完了,现在开始配置tomcat服务器。
因为我们有两个tomcat服务器,一般都知道端口不能冲突,所以端口要修改一下,把其中一个的端口修改了就行,另外一个可以不用改,我是对其中一个tomcat的所有端口都+1。反正只要配置的参数都一致就行了。具体如下3个地方修改:
<Server port="8006" shutdown="SHUTDOWN"> <Connector port="8088" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8444" /> <Connector port="8010" protocol="AJP/1.3" redirectPort="8444" />
修改完上面的端口后,还要配置集群信息。在tomcat里面被注释的Cluster标签下面添加如下信息:
<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.0.0.4"
port="45564" frequency="500"
dropTime="3000"/>
<Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
<Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
</Sender>
<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
address="auto" port="4000" autoBind="100"
selectorTimeout="5000" maxThreads="6"/>
<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"/>
<!--<ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>-->
<ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
</Cluster>
部署完上面的,基本上就可以了,服务器集群。然后我们在需要集群的项目中声明一下本项目集群就行。webapp/META-INF/context.xml添加如下信息:
<?xml version="1.0" encoding="UTF-8"?>
<Context distributable="true"
className="org.apache.catalina.ha.context.ReplicatedContext"/>
到这,服务器和项目的配置基本完成了。我们现在把项目放到启动两个刚刚配置好的服务器下,然后访问项目。在项目中做一个简单的输出用来查看访问的哪个服务器,两个tomcat服务器中能看到各自的访问日志。
apache+tomcat分布式集群搭建的更多相关文章
- Tomcat:基于Apache+Tomcat的集群搭建
根据Tomcat的官方文档说明可以知道,使用Tomcat配置集群需要与其它Web Server配合使用才可以完成,典型的有Apache和IIS. 这里就使用Apache+Tomcat方式来完成基于To ...
- Nginx之搭建反向代理实现tomcat分布式集群
参考博文: Nginx反向代理实现Tomcat分布式集群 1. jdk 安装 jdk 下载网址: http://www.oracle.com/technetwork/java/javase/downl ...
- Hadoop上路-01_Hadoop2.3.0的分布式集群搭建
一.配置虚拟机软件 下载地址:https://www.virtualbox.org/wiki/downloads 1.虚拟机软件设定 1)进入全集设定 2)常规设定 2.Linux安装配置 1)名称类 ...
- Hadoop分布式集群搭建
layout: "post" title: "Hadoop分布式集群搭建" date: "2017-08-17 10:23" catalog ...
- hbase分布式集群搭建
hbase和hadoop一样也分为单机版.伪分布式版和完全分布式集群版本,这篇文件介绍如何搭建完全分布式集群环境搭建. hbase依赖于hadoop环境,搭建habase之前首先需要搭建好hadoop ...
- 分布式实时日志系统(四) 环境搭建之centos 6.4下hbase 1.0.1 分布式集群搭建
一.hbase简介 HBase是一个开源的非关系型分布式数据库(NoSQL),它参考了谷歌的BigTable建模,实现的编程语言为 Java.它是Apache软件基金会的Hadoop项目的一部分,运行 ...
- 在 Linux 多节点安装配置 Apache Zookeeper 分布式集群
规划: 三台物理服务器就形成了(法定人数).对于高可用性集群,您可以使用高于3的任何奇数.例如,如果设置5台服务器,则集群可以处理两个故障节点等. 物理服务器需要开启的端口 2888 , 3888 和 ...
- kafka系列二:多节点分布式集群搭建
上一篇分享了单节点伪分布式集群搭建方法,本篇来分享一下多节点分布式集群搭建方法.多节点分布式集群结构如下图所示: 为了方便查阅,本篇将和上一篇一样从零开始一步一步进行集群搭建. 一.安装Jdk 具体安 ...
- Hadoop完全分布式集群搭建
Hadoop的运行模式 Hadoop一般有三种运行模式,分别是: 单机模式(Standalone Mode),默认情况下,Hadoop即处于该模式,使用本地文件系统,而不是分布式文件系统.,用于开发和 ...
随机推荐
- STL 库中的陷阱----一个难以察觉的 bug
请找出下面程序的 bug? int maxProfit2(vector<int> &prices) { int local[3] = {0}; int global[3] = {0 ...
- 关于asp的运行环境配置
xp系统的配置方法http://jingyan.baidu.com/article/4f7d571289ac441a201927da.html win7系统的配置方法http://jingyan.ba ...
- 12-16php测试题
2. 以下哪个SQL语句是正确的( d )A:insert into users ('p001','张三','男'); B:create table (Code int primary key); C ...
- Java数据结构和算法之栈与队列
二.栈与队列 1.栈的定义 栈(Stack)是限制仅在表的一端进行插入和删除运算的线性表. (1)通常称插入.删除的这一端为栈顶(Top),另一端称为栈底(Bottom). (2)当表中没有元素时称为 ...
- bootstrap-10
实现原理: 通过定义容器大小,平分12份(也有分为24份或32份,但12份是最常见的),在调整内外边距,最后结合媒体查询,就制作除了强大的响应式网格系统. 工作原理: 1.数据行(.row)必须包含在 ...
- 1. webservice在输入命令的时候wsimport的时候会出现如下错误: wsimport不是内部或者外部命令。 2. javac不是内部或者外部命令 3 java 就可以显示配置成功。
问题: webservice在输入命令的时候wsimport的时候会出现如下错误: wsimport不是内部或者外部命令. javac不是内部或者外部命令 3 java 就可以显示配置成功. 网上搜了 ...
- HDU 2577(DP)
题意:要求一个字符串输入,按键盘的最少次数.有Caps Lock和Shift两种转换大小写输入的方式 思路:用dpa与dpb数组分别记录Caps Lock的开关状态,dpa表示不开,dpb表示开 代码 ...
- POJ 1094 (TopoSort)
http://poj.org/problem?id=1094 题意:该题题意明确,就是给定一组字母的大小关系判断他们是否能组成唯一的拓扑序列.是典型的拓扑排序,但输出格式上确有三种形式: 1.该字母序 ...
- 【python】类中@property使用
在绑定属性时,如果我们直接把属性暴露出去,虽然写起来很简单,但是,没办法检查参数,导致可以把成绩随便改: s = Student() s.score = 9999 这显然不合逻辑.为了限制score的 ...
- (C# Binary Tree) 基本概念和算法
A binary tree is defined as a tree where each node can have no more than two children. Building a Bi ...