linux下一个apache+tomcat负载均衡和集群

本文涉及的产品
应用型负载均衡 ALB,每月750个小时 15LCU
传统型负载均衡 CLB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
简介:

先说一下我的环境

一个ubuntu虚拟机,

一个apache2.2示例

两tomcat1.7示例


1.安装apacheserver

sudo apt-get install apache2
假设要重新启动的话,执行命令:

sudo /etc/init.d/apache2 restart

ubuntu下的apache会默认创建路径/var/www,apache默认载入的时候,就是载入的这个路径以下的

2.安装两个tomcat实例

去官网下载一个

然后在本地在cp一下,

此时文件夹结构为:

/home/hehe/my/soft/tomcat1,

/home/hehe/my/soft/tomcat2

3.安装mod_jk

mod_jk实质上是Apache与Tomcat的连接器,并藉此附带提供集群和负载均衡的功能。

地址为http://archive.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/linux/jk-1.2.31/x86_64/,注意要于你安装的apache的版本号相应。

4.配置apache

    ubuntu默认会将apache的安装文件放在/etc/apache2以下

进入这个文件夹之后,新建一个httpd.conf文件

放心apache启动时,会载入这个文件的

然后编译这个文件。加上这么句话

ServerName localhost:80
    include mod_jk.conf
         

然后我们在当前路径下新建一个mod_jk.conf文件

这里先要将mod_jk-1.2.31-httpd-2.2.x.so放在当前路径下

#load module mod_jk-1.2.31-httpd-2.2.3.so is for Apache 2.2.x.  
LoadModule jk_module /usr/lib/apache2/modules/mod_jk-1.2.31-httpd-2.2.x.so

#这个是用来配置负载的
JkWorkersFile workers.properties
#这个是打印日志
JkLogLevel debug
#这个是日志的名称
JkLogFile mod_jk.log
#打印的级别
JkLogLevel warn

所以在当前路径下咱们还得新建一个 mod_jk.log,文件。这里面会记录日志

接下来配置workers.properties文件

在当前路径下新建一个workers.properties文件

#负载均衡器
worker.list=LB_worker,worker_1,worker_2,jkstatus  

#第一个tomcat的配置
worker.worker_1.host=localhost #tomcat在哪个机器上面,若是别的机器。须要写上别的机器的ip地址  
worker.worker_1.port=8009      #端口,等会在tomcat里面配置的时候要一一相应
worker.worker_1.type=ajp13     
worker.worker_1.lbfactor=1     #载入因子

#第二个tomcat的配置
worker.worker_2.host=localhost  
worker.worker_2.port=9009  
worker.worker_2.type=ajp13  
worker.worker_2.lbfactor=1  

#类型是一个负载均衡器
worker.LB_worker.type=lb
#重试三次
worker.LB_worker.retries=3
#负载给tomcat1和tomcat2
worker.LB_worker.balance_workers=worker_1,worker_2
#这是说session的粘性,就是说同一个session是否提交给同一个tomcat。由于等会儿,集群的时候要用到一个session提交给两台机器,所以设置为false
worker.LB_worker.sticky_session=false  
worker.LB_worker.sticky_session_force=false
#jk的状态  
worker.jkstatus.type=status
5.配置请求交给负载均衡器

在/etc/apache2/sites-available下有个default文件,

在这个文件的最后一句话</VirtualHost>之前加上这么一段

JkMount /*.jsp LB_worker
JkMount /jkstatus jkstatus
然后就交给了LB_worker

6.接下来配置tomcat1

改一下conf以下的server.xml文件,改port,和上面的相应

   <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

然后找到这句话,改成这样,注意worker_1和workers.properties相应

<Engine name="Catalina" defaultHost="localhost" jvmRoute="worker_1">

若是集群的话,还要改一句话。把这句话的前后的凝视符号给去掉,放开

<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>

接下来配置tomcat2

先把以下这句话给改了,port号改为8006

<Server port="8006" shutdown="SHUTDOWN">

然后改以下这句

    <Connector port="9082" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="9443" />

改一下conf以下的server.xml文件,改port。和上面的相应

   <Connector port="9009" protocol="AJP/1.3" redirectPort="9443" />

然后找到这句话,改成这样。注意worker_2和workers.properties相应

<Engine name="Catalina" defaultHost="localhost" jvmRoute="worker_2">

若是集群的话,还要改一句话,把这句话的前后的凝视符号给去掉,放开

<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>

7.新建一个项目mytest,里面有一个叫wel.jsp的文件,

这个jsp的内容是:

<%@ page language="java" contentType="text/html; charset=GB18030"
    pageEncoding="GB18030"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>Insert title here</title>
</head>
<body>
<%
   System.out.println("this is tomcat server nod 2");
%>
<%
int i=0;
    while(i<3000){i++;
    }
    out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"<br>this is tomcat server nod 2");
%>
</body>
</html>
然后将这个项目放在tomcat2的webapp以下

同一时候也放在tomcat1的文件夹下

注意。以下这句改成这样,2改为1

   System.out.println("this is tomcat server nod 1");


    out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"<br>this is tomcat server nod 1");

8.重新启动一个apache,tomcat1,tomcat2

然后在浏览器里面訪问

http://127.0.0.1/mytest/wel.jsp

不断的刷新页面。你会发现其在node1,和node2之间不断换。说明请求有时候交给了1,有时候交给了tomcat2,实现了负载均衡的功能


以下在来实现tomcat1。和tomcat2的集群功能

所谓集群就是。一个client的相应的session在两个tomcat中有一模一样的相应的session

在mytest里面在新建一个wel2.jsp文件

里面的内容为:

<%@ page contentType="text/html; charset=utf-8" %>
<%@ page import="java.util.*" %>
<html><head><title>Cluster App Test</title></head>
<body>
Server Info:
<%
out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"<br>");%>
<%
  out.println("<br> ID " + session.getId()+"<br>");
  // 在session里面设置属性
  String dataName = request.getParameter("attributeName");
  if (dataName != null && dataName.length() > 0) {
     String dataValue = request.getParameter("attributeValue");
     session.setAttribute(dataName, dataValue);
  }
  out.print("<b>打印Session内容:>");
  Enumeration e = session.getAttributeNames();
  while (e.hasMoreElements()) {
     String name = (String)e.nextElement();
     String value = session.getAttribute(name).toString();
     out.println( name + " = " + value+"<br>");
         System.out.println( name + " = " + value);
   }
%>
  <form action="wel2.jsp" method="POST">
    属性名:<input type=text size=20 name="attributeName">
     <br>
    值:<input type=text size=20 name="attributeValue">
     <br>
    <input type=submit>
   </form>
</body>
   </form>
</body>
</html>
两个tomcat里面都有一个这种文件

然后两个tomcat的web.xml以下加上以下这句话

<distributable/>,两个session之间能相互复制

重新启动

然后訪问http://10.211.55.3/mytest/wel2.jsp


又一次输入这个地址



你会发现确实交给了两个server,并且session里面的值一模一样!

集群完毕。




版权声明:本文博客原创文章,博客,未经同意,不得转载。




本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/4662420.html,如需转载请自行联系原作者


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
相关文章
|
4月前
|
负载均衡 算法 关系型数据库
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
|
4月前
|
负载均衡 前端开发 应用服务中间件
Tomcat的负载均衡和动静分离(与nginx联动)
总的来说,负载均衡和动静分离是提高Web应用性能的两个重要手段。通过合理的配置和使用,我们可以让Web应用更好地服务于用户。
147 21
|
4月前
|
负载均衡 Java 应用服务中间件
Tomcat与Nginx的负载均衡与动静分离技巧
总的来说,Tomcat和Nginx各有各的优点,在负载均衡和动静分离这两方面它们都有很好的应用。灵活使用这两个工具能够让Web应用具有更好的扩展性和用户体验。
124 14
|
4月前
|
负载均衡 前端开发 JavaScript
LVS-DR模式、keepalived、Nginx与Tomcat合作,打造动静分离,高效负载均衡与高可用性
为了采用这样的架构,你需要对LVS-DR、Keepalived、Nginx与Tomcat有一定的理解和掌握,同时也需要投入一些时间去研究和配置,但是一旦你把它运行起来,你将会发现,这一切都是值得的。
168 11
|
5月前
|
负载均衡 算法 关系型数据库
大数据新视界--大数据大厂之MySQL数据库课程设计:MySQL集群架构负载均衡故障排除与解决方案
本文深入探讨 MySQL 集群架构负载均衡的常见故障及排除方法。涵盖请求分配不均、节点无法响应、负载均衡器故障等现象,介绍多种负载均衡算法及故障排除步骤,包括检查负载均衡器状态、调整算法、诊断修复节点故障等。还阐述了预防措施与确保系统稳定性的方法,如定期监控维护、备份恢复策略、团队协作与知识管理等。为确保 MySQL 数据库系统高可用性提供全面指导。
|
10月前
|
消息中间件 存储 监控
构建高可用性Apache Kafka集群:从理论到实践
【10月更文挑战第24天】随着大数据时代的到来,数据传输与处理的需求日益增长。Apache Kafka作为一个高性能的消息队列服务,因其出色的吞吐量、可扩展性和容错能力而受到广泛欢迎。然而,在构建大规模生产环境下的Kafka集群时,保证其高可用性是至关重要的。本文将从个人实践经验出发,详细介绍如何构建一个高可用性的Kafka集群,包括集群规划、节点配置以及故障恢复机制等方面。
307 4
|
11月前
|
存储 分布式计算 druid
大数据-152 Apache Druid 集群模式 配置启动【下篇】 超详细!(一)
大数据-152 Apache Druid 集群模式 配置启动【下篇】 超详细!(一)
138 1
大数据-152 Apache Druid 集群模式 配置启动【下篇】 超详细!(一)
|
11月前
|
分布式计算 大数据 分布式数据库
大数据-158 Apache Kylin 安装配置详解 集群模式启动(一)
大数据-158 Apache Kylin 安装配置详解 集群模式启动(一)
205 5
|
11月前
|
资源调度 大数据 分布式数据库
大数据-158 Apache Kylin 安装配置详解 集群模式启动(二)
大数据-158 Apache Kylin 安装配置详解 集群模式启动(二)
172 2
|
11月前
apache+tomcat配置多站点集群的方法
apache+tomcat配置多站点集群的方法
121 4

推荐镜像

更多