nginx+tomcat+memcached搭建服务器集群及负载均衡

  在实际项目中,由于用户的访问量很大的原因,往往需要同时开启多个服务器才能满足实际需求。但是同时开启多个服务又该怎么管理他们呢?怎样实现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共享。

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

时间: 2024-10-26 22:44:00

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

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

长话短说,我们用Nginx来搭建一个简单的集群,实现Web应用的负载均衡,架构图如下: 两台Web服务器,一台静态资源服务器,因为是演示,我们以网站形式部署在本机IIS中 一台Nginx代理服务器,安装到本机的Linux虚拟机中,参考 CentOS下Nginx安装与配置 网站部署 新建三个文件夹,用于网站部署 在IIS中新建三个站点,分别指向以上三个目录,两台WEB端口是9527,9528,静态资源站点端口9529 新建两个HTML网页 index.html,内容分别是 This is loca

Nginx+Tomcat+Memcached+kryo序列化集群Session共享

架构(一共使用3台主机,其中nginx主机上运行2个memcached实例,端口分别是11211.11212) 环境配置说明: 软件:Centos6.7.tomcat8.0.memcached1.4.4.nginx1.4.7.jdk-8u65-linux-x64. 实现msm+kryo必须的包,一共9个: (注意:不同版本的tomcat,必须下载对应的memcached-session-manager包) spymemcached-2.11.4 reflectasm-1.01 msm-kryo-

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

在nginx根目录下的conf文件下找到nginx.conf,并编辑 在server{}前配置服务器ip和端口号 如: upstream local_tomcat { local_tomcat为访问路径,在下面配置服务器ip及端口号,也可以分配权重(weight==?)        server 127.0.0.1:8080 ;#权重        server 127.0.0.1:8081 ;#权重    } server {        listen       80;    #端口  

nginx+apache+php+mysql服务器集群搭建

nginx+apache+php+mysql服务器集群搭建 由于需要搭建了一个基本的服务器集群.具体的配置方案先不说了,到有时间的时候再介绍.下面介绍下整个方案的优点. 我总共准备了四台阿里云的主机,架设分别是A,B1,B2,C,A在集群的最前面,B1和B2在A的后面,C在最后面.A主要用的nginx,用nginx做反向代理的功能实在是强大.nginx把来自80的http请求都转发到B1和B2上,B1和B2主要是两台apache,用于php解析.B1和B2来连接C上的mysql.A上的nginx

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

参考网址:https://blog.csdn.net/zhanghan18333611647/article/details/50811980 [前言] 在<架构之路:nginx与IIS服务器搭建集群实现负载均衡(二)>中提到有好多有趣的地方,接下来就为大家一块儿讲讲在深入研究过程中遇到那些有趣的事情. ·实战之行--发现问题 ·探索之旅--寻出问题原因 ·解决之道--解决问题 [实战之行] 在<架构之路:nginx与IIS服务器搭建集群实现负载均衡(二)>中做了小Demo,当时做

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

[前言] 在<架构之路:nginx与IIS服务器搭建集群实现负载均衡(一)>中小编简单的讲解了Nginx的原理!俗话说:光说不练假把式.接下来,小编就和大家一起来做个小Demo来体会一下Nginx的神奇之处. [准备工作] ·安装一款文本编辑器(这里以Notepad++为例) ·下载Nginx(这里以Nginx-1.4.7为例,其他版本操作相同) ·建两个简单网页:在文件夹test1新建一个html页内容为--我是Test1,在文件夹test2新建一个html页内容为--我是Test2) ·将

用apache和tomcat搭建集群,实现负载均衡

型的企业应用每天都需要承受巨大的访问量,在着巨大访问量的背后有数台服务器支撑着,如果一台服务器崩溃了,那么其他服务器可以使企业应用继续运行,用户对服务器的运作是透明化的,如何实现这种透明化呢?由如下问题需要解决. 一.Session的复制 二.如何将请求发送到正常的服务器 针对以上问题,可以使用群集和负载均衡来解决,整体架构如下:  中间由一台服务器做负载均衡(Load Balancer),它将所有请求,根据一定的负载均衡规则发送给指定的群集服务器(Cluster),群集服务器拥有着相同的状态和

Nginx实现tomcat集群进行负载均衡

一.背景 随着业务量和用户数量的激增,单一的tomcat部署应用已经无法满足性能需求,而且对于每次发布项目期间服务不可用的问题也凸显,既然出现了这个问题,那么我们本文就借助nginx来完美的解决这个问题. 二.基本概念 1.说明:关于Nginx的概念和介绍以及Centos7下安装步骤,请移步:Centos7安装Nginx实战 2.正向代理和反向代理 假设我们给定客户端A.代理服务器B.以及最终服务器C 正向代理:代理服务器B来代替客户端A来访问最终服务器C并将最终结果转发给客户端A,站在客户端A

nginx反向代理tomcat集群达到负载均衡,同时使用proxy_cache做web缓存

Nginx最早是作为一款优秀的反向代理软件,以高并发下的卓越性能被越来越多的用户所用户,国内最早研究nginx的是张宴,该大牛的博客地址:http://zyan.cc/ .但是随着需求的发展,nginx的功能已经不再单单是反向代理,现在已经更倾向作为web容器. Nginx从0.7.48版本开始,支持了类似Squid的缓存功能.Nginx的Web缓存服务主要由proxy_cache相关指令集和fastcgi_cache相关指令集构成,前者用于反向代理时,对后端内容源服务器进行缓存,后者主要用于对