在实际项目中,由于用户的访问量很大的原因,往往需要同时开启多个服务器才能满足实际需求。但是同时开启多个服务又该怎么管理他们呢?怎样实现session共享呢?下面就来讲一讲如何使用tomcat+nginx搭建服务器集群以及如何实现session共享。

环境:

apache-tomcat-6.0.29+apache-tomcat-6.0.29+jdk1.6+win7(由于自己只是做了一个demo,j就没有用到服务器系统了)

1.首先我们准备两个tomcat(tomcat1,tomcat2),并将端口修改为不一样。我的tomcat1是8089,tomcat2是9089。修改端口的位置在tomcat文件的conf->server.xml文件的位置:

2.为了后面区分我们到底访问的是哪个tomcat,所以这里我们修改一下tomcat首页的信息,在tomcat1文件夹下webapps->ROOT->index.html,在最前面我加上了<span style="color:red">this is tomcat          one</span>,同样在tomcat2下添加<span style="color:red">this is tomcat two</span>。

3.接下来我们开始准备nginx。nginx也是一个服务器,这里我们主要是用来做代理和负载均衡的。当我们下载完nginx直接解压就可以用。要运行nginx可以直接点击nginx.exe,也可以使用命令的模式:start nginx启动nginx,nginx -s stop停止nginx。

4.启动nginx后,我们在浏览器输入127.0.0.1,出现如下界面就代表nginx已近启动了:

5.接下来我们来配置nginx来做代理服务器和负载均衡:

打开nginx文件下的conf->nginx.conf文件,在hettp中添加

upstream 127.0.0.1{//这个127.0.0.1可以随便取个名字
server 127.0.0.1:8088 weight=1; #服务器A
server 127.0.0.1:9088 weight=1; #服务器B
}

在server中的location添加:

 proxy_pass  http://127.0.0.1;  #访问js,图片等需要做代理

其他的现在不用配置,配置完了如下:

说明:

  1)server后的ip即使tomcat的ip,weight表示权重,weight越大,对应服务器被访问的概率越大,若是相等,几个服务器轮流被访问;

2)proxy_pass  后的http必须加上;

这是我们启动tomcat1,tomcat2,nginx,在浏览器中输入127.0.0.1,然后刷新,这时我们会看到tomcat1和tomcat2的页面交替显示,这就表示nginx已经负载了两个tomcat,可以将请求转发到不同的tomcat。

6.下面我们就来解决session的问题了

这里需要将以下jar包放到tomcat的lib文件里面

这些jar包我已上传,下载地址:http://files.cnblogs.com/mouseIT/nginx%2Cmemcached%EF%BC%8Ctomcat%E9%9B%86%E7%BE%A4%E7%9A%84jar%E5%8C%85.rar

然后在tomcat的context.xml中添加以下数据:

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:127.0.0.1:11211"
sticky="false"
sessionBackupAsync="false"
lockingMode="auto"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.JavaSerializationTranscoderFactory"
/>

如下:

为了实现session共享,这里我们还需要使用的memcached。

将下下来的memcached直接解压,点击memcached.exe。这是只有一个窗口,什么都看不见,回车后输入命令stats,看见如下表示正常:

为了测试,我们建一个web项目,记得要在web.xml的web-app中添加<distributable/> 这样服务器才知道这是分布式的。

同时我们建立默认的登陆页面,内容如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.util.*" %>
<!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=UTF-8">
<title>Insert title here</title>
</head>
<body>
this is tomcat one
Server Info:
<%
String path = request.getContextPath();
out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"<br>");%>
<%
out.println("<br> ID " + session.getId()+"<br>");
// 如果有新的 Session 属性设置
String dataName = request.getParameter("dataName");
if (dataName != null && dataName.length() > 0) {
String dataValue = request.getParameter("dataValue");
session.setAttribute(dataName, dataValue);
}
out.println("<b>Session 列表</b><br>");
System.out.println("============================");
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="<%=path%>/login.jsp" method="POST">
名称:<input type="text" size=20 name="dataName">
<br>
值:<input type="text" size=20 name="dataValue">
<br>
<input type="submit">
</form>
</body>
</html>

这个是在网上收的,具体的原理我就不再阐述了。

然后我们依次启动memcached->tomcat->nginx。注意一定要最先启动memcached,不然启动tomcat时会出错。

然后我们访问127.0.0.1/tomcat下的web项目名

进入主页面后,我们输入名称和值,然后点击提交(这时注意tomcat的窗口),我输入的是abc,123,点击提交后,tomcat1出现如下:

然后我们刷新浏览器,观察tomcat2的窗口,也会出现上面的数据:

这就表示tomcat2获得了session的数据,tomcat1,tomcat2实现了session共享。

今天总结的这些只是一个简单的应用,还有很多的细节没有说。这些也是我才学会的。以后还有什么好的东西会继续和大家分享,大家共同探讨!

nginx+tomcat+memcached搭建服务器集群及负载均衡的更多相关文章

  1. 10分钟学会windows中iis搭建服务器集群实现负载均衡和nginx代理转发

    前言 我们之前聊过 10分钟搭建服务器集群--Windows7系统中nginx与IIS服务器搭建集群实现负载均衡:https://www.cnblogs.com/xiongze520/p/103087 ...

  2. Tomcat服务器集群与负载均衡实现

    一.前言 在单一的服务器上执行WEB应用程序有一些重大的问题,当网站成功建成并开始接受大量请求时,单一服务器终究无法满足需要处理的负荷量,所以就有点显得有 点力不从心了.另外一个常见的问题是会产生单点 ...

  3. 用Nginx搭建IIS集群实现负载均衡

    长话短说,我们用Nginx来搭建一个简单的集群,实现Web应用的负载均衡,架构图如下: 两台Web服务器,一台静态资源服务器,因为是演示,我们以网站形式部署在本机IIS中 一台Nginx代理服务器,安 ...

  4. nginx的配置服务器集群,负载均衡

    在server{}前配置服务器ip和端口号 如: upstream local_tomcat { local_tomcat为访问路径,在下面配置服务器ip及端口号,也可以分配权重(weight==?) ...

  5. Windows7系统中nginx与IIS服务器搭建集群实现负载均衡

    10分钟搭建服务器集群——Windows7系统中nginx与IIS服务器搭建集群实现负载均衡   分布式,集群,云计算机.大数据.负载均衡.高并发······当耳边响起这些词时,做为一个菜鸟程序猿无疑 ...

  6. 10分钟搭建服务器集群——Windows7系统中nginx与IIS服务器搭建集群实现负载均衡

    分布式,集群,云计算机.大数据.负载均衡.高并发······当耳边响起这些词时,做为一个菜鸟程序猿无疑心中会激动一番(或许这是判断是否是一个标准阿猿的标准吧)! 首先自己从宏观把控一下,通过上网科普自 ...

  7. 搭建服务器集群——Windows7系统中nginx与IIS服务器搭建集群实现负载均衡

    转载:https://www.cnblogs.com/xiongze520/p/10308720.html 分布式,集群,云计算机.大数据.负载均衡.高并发······当耳边响起这些词时,做为一个菜鸟 ...

  8. 架构之路:nginx与IIS服务器搭建集群实现负载均衡(二)

    [前言] 在<架构之路:nginx与IIS服务器搭建集群实现负载均衡(一)>中小编简单的讲解了Nginx的原理!俗话说:光说不练假把式.接下来,小编就和大家一起来做个小Demo来体会一下N ...

  9. 架构之路:nginx与IIS服务器搭建集群实现负载均衡(三)

    参考网址:https://blog.csdn.net/zhanghan18333611647/article/details/50811980 [前言] 在<架构之路:nginx与IIS服务器搭 ...

随机推荐

  1. 水仙花 AC 杭电

    水仙花数 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  2. STM32学习笔记——新建工程模板步骤(向原子哥学习)

    1.  在创建工程之前,先在电脑的某个目录下面建立一个文件夹,我们先把它命名为Template,后面建立的工程可以放在这个文件夹下.在 Template 工程目录下面,新建 3 个文件夹USER , ...

  3. 转:Zend Framework 2.0 分析

    文章来自于:http://bbs.phpchina.com/thread-268362-1-1.html ZF2已经发布,与ZF1相比,MVC这一模块内部的实现机制可谓大相径庭,许多用过ZF1的PHP ...

  4. 获取上海地区AQI质量数据Python脚本

    一个获取上海地区AQI质量的Python脚本 https://github.com/yanyueoo7/Raspberrypi/blob/master/GetPmData_Shanghai.py #! ...

  5. 你以为PHP那么好自定义升级?

    X,PHP如果只是安装操作系统之后,YUM INSTALL之后就可以使用最好啦. 但如果YUM安装的官方PHP版本太低怎么办? 据我所知,现在也只是到PHP5.3.3版本,如果APP应用需要PHP5. ...

  6. 用Visual Studio创建gtest动态链接库工程

    Step1 创建名为gtest的Win32 Project Step2 在Application Settings中的Application type下选择DLL Step3 把gtest-all.c ...

  7. linux之sed用法【转载】

    sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换.删除.新增.选取等特定工作,下面先了解一下sed的用法sed命令行格式为:         sed ...

  8. Repo安装遇到问题

    问题一: “The program 'repo' is currently not installed. You can install it by typing: sudo apt-get inst ...

  9. iOS进阶读物

    不知不觉作为 iOS 开发也有两年多的时间了,记得当初看到 OC 的语法时,愣是被吓了回去,隔了好久才重新耐下心去啃一啃.啃了一阵,觉得大概有了点概念,看到 Cocoa 那么多的 Class,又懵了, ...

  10. label标签的属性

    //label标签的属性 - (void)viewDidLoad { //初始化一个label1标签对象,初始化有很多方法,最原始的就是init,此处用带有frame的方法 UILabel *labe ...