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即处于该模式,使用本地文件系统,而不是分布式文件系统.,用于开发和 ...
随机推荐
- BZOJ 4034 BIT & Dfs序
调了恒久突然发现输出优化忘记带负号了.. 就是差分树状数组维护Dfs序即可. #include <iostream> #include <cstring> #include & ...
- 从零开始学习Node.js例子零 永远的Hello World
index.js var http = require("http"); http.createServer(function(request, response) { respo ...
- 如何使用git 跟进项目进程
首先,git能够记录版本信息,方便大家在任何时刻能够取回之前的项目版本,其次可以记录分支信息,方便进行分支作业. Step1:cd到你的项目根目录下,从团队github 项目clone到本地. 命令如 ...
- Polymer.js
Polymer 1.0 教程 安装 bower install --save Polymer/polymer
- Day16_集合第二天
1.LinkedList类(掌握) 1.特点 底层数据结构是链表,查询慢,增删快 线程不安全,效率高. LinkedList 成员方法 void addFirst(Object o) 添加 void ...
- 网络数据包收发流程(二):不配置NAPI的情况
一.no NAPI 数据结构不配置NAPI的时候,网络设备不使用自己的napi_struct结构,所有网络设备驱动都使用同一个napi_struct,即cpu私有变量__get_cpu_var(sof ...
- LintCode Search Insert Position
找出指定target的位置(没有此数时为按顺序应当位置). public class Solution { /** * param A : an integer sorted array * para ...
- C#中动态读写App.config配置文件
转自:http://blog.csdn.net/taoyinzhou/article/details/1906996 app.config 修改后,如果使用cofnigurationManager立即 ...
- Cacti-安装和使用详解
Cacti是一套基于PHP,MySQL,SNMP及RRDTool开发的网络流量监测图形分析工具.Cacti是通过 snmp get来获取数据,使用 RRDtool绘画图形,而且你完全可以不需要了解RR ...
- lua学习记录
1.八种数据类型:number,string,boolean,nil,function,table,协程,自定义类型 空字符串和数字0是真,false和nil为假2.lua是动态语言,每个变量携带自己 ...