apache+tomcat集群环境搭建

1. 什么是集群
        简单理解就是:将项目同时部署在多台服务器上(tomcat)运行,通过一个web服务器(Apache/nginx)进行请求分发和负载均衡,将同时访问的多个请求按照权重通过分发到各个应用服务器上,从而大大减轻了单个服务器的压力,同时也实现了高并发。若某个应用服务器宕机了,也不会导致项目无法进行运行。
        生活场景理解集群:一家饭店生意平平淡淡,最初只请了一个服务员。后面客人多了,一个服务员忙不过来,于是又请了二个服务员。那这三个服务员的关系就集群。
服务端集群:
a.水平集群 :将服务器安装在 各个不同的计算机上 (失败迁移)
b.垂直集群 :将多个服务器,安装在同一个计算机上 (负载均衡)
2. 搭建集群
这里搭建集群的环境是windows10系统、Apache2.4.43、Tomcat7.0.92
将Apache(一个)和Tomcat(多个)放置同个目录,方便配置。
Apache用来接收请求并分发给tomcat,以下示例为二个tomcat

  • 工具准备
    解压后直接使用
    Apache下载
    tomcat下载
  • 修改配置
    修改Apache中conf/httpd.conf文件
    Define SRVROOT 修改为Apache解压后的根路劲(G:/cluster/Apache24)
  • 注册服务
    将Apache配置环境变量Path中:配置Apache的bin路劲下(G:\cluster\Apache24\bin)
    用管理员身份运行cmd
    加入windows服务:httpd -k install
    如果安装后显示Errorsreported here must be corrected before the service can be started.表示安装成功,如果该句后面有错误信息,表示服务安装失败。输入service可以查看服务中多了一个Apache2.4
    启动服务: net start Apache2.4
    删除服务: sc delete 服务名
    停止服务: httpd –k stop
    启动服务后,访问http://localhost/,网页可以正常打开即可
  • 修改tomcat配置
    修改各个tomcat中conf/server.xml文件

    • 修改端口号:Server端口、http端口、ajp端口,保证多个tomcat端口不冲突
    • 放开注释:
      <Cluster className=“org.apache.catalina.ha.tcp.SimpleTcpCluster”/>
    • 配置Tomcat引擎:jvmRoute=“服务名”
<Server port="1005" shutdown="SHUTDOWN"><Listener className="org.apache.catalina.startup.VersionLoggerListener" /><Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" /><Listener className="org.apache.catalina.core.JasperListener" /><Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" /><Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /><Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" /><GlobalNamingResources><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><Service name="Catalina"><Connector port="1080" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" /><Connector port="1009" protocol="AJP/1.3" redirectPort="8443" /><Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat-a"><Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/><Realm className="org.apache.catalina.realm.LockOutRealm"><Realm className="org.apache.catalina.realm.UserDatabaseRealm"resourceName="UserDatabase"/></Realm><Host name="localhost"  appBase="webapps"unpackWARs="true" autoDeploy="true"><Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"prefix="localhost_access_log." suffix=".txt"pattern="%h %l %u %t &quot;%r&quot; %s %b" /></Host></Engine></Service>
</Server>
  • 配置mod_jk.so
    mod_jk.so下载该链接中的httpd.zip
    下载后放入/Apache24/modules/mod_jk.so
  • 配置workers.poperties文件
    在Apache24的conf/下创建workers.poperties文件,并配置该文件
worker.list=controller,tomcata,tomcatb,tomcatc
#tomcata配置
worker.tomcata.port=1009
worker.tomcata.host=localhost
worker.tomcata.type=ajp13
#负载均衡的权重
worker.tomcata.lbfactor=1#tomcatb配置
worker.tomcatb.port=2009
worker.tomcatb.host=localhost
worker.tomcatb.type=ajp13
#负载均衡的权重
worker.tomcatb.lbfactor=2#controller配置
worker.controller.type=lb
worker.controller.balanced_workers=tomcata,tomcatb
worker.controller.sticky_session=false

参数说明:

属性 简介
worker.list 定义worker对象列表,每个worder对象都应该在后文中分别配置。例如,如果定义了worker.list=A,B,那么就需要配置worker.A.xx=xx worker.B.xx=xx
type 协议类型,本书使用的mod_jk1.2.4共支持以下4个类型:ajp12、ajp13、jni、lb。其中,lb表示一个负载平衡worker,可用于设置参与负载平衡的Tomcat服务器,例如:worker.controller.type=lbworker.controller.balanced_workers=Tomcat1,Tomcat2表示集群中的负载均衡是由Tomcat1和Tomcat2协同实现。
port 服务器协议的端口号,此配置需要和type属性结合使用。例如,如果type=ajp13,此port的值就是Tomcat服务器中ajp13协议的端口号。
host 服务器的IP地址。
lbfactor 服务器权重。某一服务器的权重越大,分配到该服务器的请求就越多。例如,如果配置的是worker.Tomcat1.lbfactor=1,worker.Tomcat2.lbfactor=2,那么集群在处理请求时,会按照“Tomat1处理请求–Tomcat2处理请求-- Tomcat2处理请求”的顺序,循环执行。
sticky_session 会话保持,一般设置为false。如果设置为true,则表示同一用户的同一session 始终和一个 Tomcat 节点交互,即多个Tomcat之间无法共享session。
  • 配置mod_jk.conf文件
    在Apache24的conf/下创建mod_jk.conf文件,并配置该文件
#加载mod_jk_so
loadModule jk_module    modules/mod_jk.so
#加载workers.properties
JKWorkersFile conf/workers.properties
#需要拦截的内容  /* 表示所有请求
JkMount /* controller
  • 配置httpd.conf文件
    打开Apache24的conf/httpd.conf将mod_jk.conf引进去,在httpd.conf最下面通过下面语句引入
#加载mod_jk.conf文件,该文件在启动apache时自动加载
Include conf/mod_jk.conf

3.测试
测试失败迁移 负载均衡 session共享
创建web项目,在项目的web.xml中添加<distributable/>编辑index.jsp
将该web项目分别放入每个tomcat/webapps下
分别启动Apache、tomcata、tomcatb

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html><head><title>tomcata</title></head><body>sessionID:<%out.print(session.getId());       %></body>
</html>

负载均衡 session共享测试结果如下即完成:

sessionID: 3D99E071146FAC17F266DAAFFA46009F.tomcat-a // 第一次
sessionID: 3D99E071146FAC17F266DAAFFA46009F.tomcat-b    // 第二次
sessionID: 3D99E071146FAC17F266DAAFFA46009F.tomcat-b    // 第三次
sessionID: 3D99E071146FAC17F266DAAFFA46009F.tomcat-a    // 第四次
sessionID: 3D99E071146FAC17F266DAAFFA46009F.tomcat-b    // 第五次
sessionID: 3D99E071146FAC17F266DAAFFA46009F.tomcat-b    // 第六次

接着关闭一个tomcatb服务,测试失败迁移,显示结果如下即完成:

sessionID: 3D99E071146FAC17F266DAAFFA46009F.tomcat-a // 第一次
sessionID: 3D99E071146FAC17F266DAAFFA46009F.tomcat-a    // 第二次
sessionID: 3D99E071146FAC17F266DAAFFA46009F.tomcat-a    // 第三次

4.问题整理
a.安装时报错:
问题:Could not reliably determine the server’s fully qualified domain name, using xxxx:xxxx:xxxx:ffff:68e3:fdd1.
Set the ‘ServerName’ directive globally to suppress this message
解决:在httpd.conf文件加上这句ServerName localhost:80,再重新执行命令httpd.exe -k install -n apache
b.执行安装时若存在端口号被占用可修改:Listen 80 (80修改为新的端口)
查看端口号:netstat –ano
c.apache启动报错,按照以下顺序依次排查:
httpd.conf->mod_jk.conf->mod_jk.so,workers.properties

apache+tomcat集群环境搭建相关推荐

  1. Nginx+Tomcat集群环境搭建

    Tomcat集群能带来什么? 提高服务的性能.并发能力.以及高可用性 提高项目架构的横向扩展能力 提高服务的性能 实际公司线上生产环境都会选择一台机器部署一个tomcat,多台机器完成集群,毕竟一台机 ...

  2. Apache Zookeeper 集群环境搭建

    Zookeeper 是 一个分布式.开放源码的分布式应用程序协调服务,是Google Chubby的一个开源实现,大多数的分布式应用都需要Zookeeper的支持,这篇文章先简单的和大家分享如何搭建一 ...

  3. 学习笔记之-Kubernetes(K8S)介绍,集群环境搭建,Pod详解,Pod控制器详解,Service详解,数据存储,安全认证,DashBoard

    笔记来源于观看黑马程序员Kubernetes(K8S)教程 第一章 kubernetes介绍 应用部署方式演变 在部署应用程序的方式上,主要经历了三个时代: 传统部署:互联网早期,会直接将应用程序部署 ...

  4. Kafka:ZK+Kafka+Spark Streaming集群环境搭建(九)安装kafka_2.11-1.1.0

    如何搭建配置centos虚拟机请参考<Kafka:ZK+Kafka+Spark Streaming集群环境搭建(一)VMW安装四台CentOS,并实现本机与它们能交互,虚拟机内部实现可以上网.& ...

  5. Kafka:ZK+Kafka+Spark Streaming集群环境搭建(二十一)NIFI1.7.1安装

    一.nifi基本配置 1. 修改各节点主机名,修改/etc/hosts文件内容. 192.168.0.120master192.168.0.121slave1192.168.0.122 slave2 ...

  6. Hadoop 2.x 完全分布式HA集群环境搭建

    Hadoop 2.x 完全分布式HA集群环境搭建 目录 Hadoop 2.0 环境搭建 前提:环境准备 第一步:修改hadoop-env.sh配置文件,配置好JAVA_HOME环境变量 第二步:修改h ...

  7. 大数据 -- Hadoop集群环境搭建

    首先我们来认识一下HDFS, HDFS(Hadoop Distributed File System )Hadoop分布式文件系统.它其实是将一个大文件分成若干块保存在不同服务器的多个节点中.通过联网 ...

  8. 高吞吐消息中间件Kafka集群环境搭建(3台kafka,3台zookeeper)

    高吞吐消息中间件Kafka集群环境搭建(3台kafka,3台zookeeper) 一.集群搭建要求 1.搭建设计 2.分配六台Linux,用于安装拥有三个节点的Kafka集群和三个节点的Zookeep ...

  9. 大数据第一天 Hadoop01-入门集群环境搭建

    Hadoop01-入门&集群环境搭建 今日内容 ​ Hadoop的介绍 ​ 集群环境搭建准备工作 ​ Linux命令和Shell脚本增强 ​ 集群环境搭建 大数据概述 ​ 大数据: 就是对海量 ...

最新文章

  1. 站着说话不腰疼!这种技术水平,你能做到?
  2. RabbitMQ 快速入门
  3. 【Python基础】Python 10 个习惯用法,看看你都知道不?
  4. c++ 无法读取内存_Linux内存机制以及手动释放swap和buffer和cache
  5. Netty实战 IM即时通讯系统(六)实战: 客户端和服务端双向通信
  6. HDU3509(构造矩阵)
  7. 如何提升springboot服务吞吐量
  8. textview 结束后释放_等待按键释放,你的代码如何写?
  9. Linux脏牛漏洞提权复现
  10. Elon Musk发起投票,超7成参与者认为狗狗币是地球未来货币
  11. json html双引号,当gethtml方法返回json时,json中的字符串如果存在双引号,会破坏json的格式, 如:quot;...
  12. DOS那一代的程序员现在都干嘛呢
  13. spotfire中文使用教程含演示数据以及二次开发思路整理
  14. 关于163邮箱,上传附件,本地验证文件大小的问题。
  15. [1125]AES加密报错:Illegal key size or default parameters
  16. Mysql查询某个月的每一天的数据
  17. 计算机蜂鸣无法开机,计算机开机后会时常出现3声蜂鸣是什么原因
  18. 18.MYSQL数据库(1)
  19. c#创建word表格 将表格所有内容居中
  20. 美团CodeM2018资格赛赛题官方版本详解(二)——可乐

热门文章

  1. 【高效学习】状态不好怎么学习?如何培养长期自主学习能力?
  2. 基于Matlab的PUMA 560运动学与轨迹规划仿真
  3. 【PAT乙级】1014 福尔摩斯的约会
  4. win10 误删账户仍出现此账户登录但密码错误
  5. 将VMware平台虚拟机瞬时恢复并在线迁移至深信服Sangfor平台
  6. Windows Java JavaFX IntelliJ IDEA 开发环境搭建 创建工程 编译运行 打包分发 自定义运行时
  7. python excel数据处理 空格替换_Python/Excel/SPSS/SQL数据处理方法比较之5 - 空格清理...
  8. OPPOR9SKT_官方线刷包_救砖包_解账户锁
  9. 专访iRobot创始人Colin Angle:自动集尘系统会成为扫地机器人的标配吗?
  10. Photoshop基础操作