linux下一个apache+tomcat负载均衡和集群
先说一下我的环境
一个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里面的值一模一样!
集群完毕。
版权声明:本文博客原创文章,博客,未经同意,不得转载。
linux下一个apache+tomcat负载均衡和集群的更多相关文章
- apache + tomcat 负载均衡分布式集群配置
Tomcat集群配置学习篇-----分布式应用 现目前基于javaWeb开发的应用系统已经比比皆是,尤其是电子商务网站,要想网站发展壮大,那么必然就得能够承受住庞大的网站访问量:大家知道如果服务器访问 ...
- 基于Apache的Tomcat负载均衡和集群(2)
反向代理负载均衡 (Apache+JK+Tomcat) 使用代理服务器可以将请求转发给内部的Web服务器,让代理服务器将请求均匀地转发给多台内部Web服务器之一上,从而达到负载均衡的目的.这种代理方式 ...
- apache的tomcat负载均衡和集群配置 "
略看了一下,感觉太复杂,要配置的东西太多,因此在这里写出一种更简洁的方法. 要集群tomcat主要是解决SESSION共享的问题,因此我利用memcached来保存session,多台TOMCAT服务 ...
- 基于nginx的tomcat负载均衡和集群
要集群tomcat主要是解决SESSION共享的问题,因此我利用memcached来保存session,多台TOMCAT服务器即可共享SESSION了. 你可以自己写tomcat的扩展来保存SESSI ...
- 基于apache的tomcat负载均衡和集群配置
最近不是很忙,用零碎时间做点小小的实验. 以前公司采用F5负载均衡交换机,F5将请求转发给多台服务器,每台服务器有多个webserver实例,每个webserver分布在多台服务器,交叉式的分布集群. ...
- Tomcat负载均衡和集群环境的搭建
实现此集群的方法参考了网上的很多文章,但由于很多文章都表明是原创的,故无法知道整个操作流程的真正作者是谁.下面就是我用我们真实的项目去实现这个过程.同时修复这过程中一些问题.以下的所有步骤均为亲自测试 ...
- Apache、Tomcat负载均衡与集群
一. 环境准备 1.软件下载 a) apache_2.0.55-win32-x86-no_ssl.msi: b) apache-tomcat-5.5.17.rar c) mod_jk-apache-2 ...
- 使用apache和nginx代理实现tomcat负载均衡及集群配置详解
实验环境: 1.nginx的代理功能 nginx proxy: eth0: 192.168.8.48 vmnet2 eth1: 192.168.10.10 tomcat server1: vmnet2 ...
- 基于apache的tomcat负载均衡和集群配置session共享
接上面的话题接着继续完善.为什么没接到上篇呢?原因很简单太长的文章不爱看!就像有人写了上千行的方法一样,不是逼得没办法谁爱看谁看,反正我不看. 期间我没有一次配置成功,从失败的开始说起, 1.准备ja ...
随机推荐
- Bestcoder Round#45
1001 给定数n,要我们求该数的二进制中有多少组1, 相邻的1称为1组, 直接位运算摸你即可 #include <stdio.h> #include <string.h> # ...
- AC automation 模板
/* 1.对n个字符串构造tire树 insertWord(node *root, char *word); 2.bfs构造fail指针 makeFail(node *root); 3.基于以上两点的 ...
- NYOJ202 红黑树 【预购】
红黑树 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描写叙述 什么是红黑树呢?顾名思义,跟枣树类似.红黑树是一种叶子是黑色果子是红色的树. .. 当然,这个是我说的. .. ...
- 鸟书shell 学习笔记(一) shell专注于概念和命令
变量 variableName=value 等号左右不能有空格 变量内容有空格须要用"或者'括起来,可是 v="hello $name" $保持原有功能,单引號则不行 ...
- HPUX平台经常使用命令列举
原创作品,出自 "深蓝的blog" 博客,欢迎转载,转载时请务必注明出处,否则追究版权法律责任. 深蓝的blog:http://blog.csdn.net/huangyanlong ...
- 人们的Live Meeting系列 (floyd)
人活着系列之开会 Time Limit: 1000MS Memory limit: 65536K 题目描写叙述 人活着假设是为了事业.从打工的到老板的,个个都在拼搏,奋斗了多年最终有了非凡成就.有了一 ...
- 【HDU】5256 系列转换(上涨时间最长的序列修饰)
假设a[i]和a[j]我想的一样,满足条件的需要是 a[j] - a[i] > j - i 也就是说,a[i] - i < a[j] - j 例1 4 2 不满意,所以1和2必须有必要之间 ...
- 数据结构读书笔记(二)(C语言)
(一)循环链表 存储类型 typedef struct LNode { ElemType data; struct LNode *next; }; typedef struct LNode *Link ...
- java实现大数相加问题
闲来没事.写了个acm中常常遇到的大数加减问题的java 解决代码,我想说.用java的BigInteger 非常easy. 大爱java!! 比如: 实现多组输入的大数加减问题: import ja ...
- HDU-4689 Derangement
太洗脑了: 题目意思:初始队列是1,2, 3.......n :在打乱这个队列切保证每个数字都不在原来的位置上的情况下给出一个具有+,- 的队列: 被打乱的队列 和 原来队列 对应位置的大小的关系是那 ...