• 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共享。

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

  • 相关阅读:
    zabbix实现原理及架构详解
    用Python玩转微信(一)
    你真的用好了Python的random模块吗?
    Authentication of Django
    Django admin 权威指南(一)
    常用查找数据结构及算法(Python实现)
    基于python的七种经典排序算法
    Django 1.10 中文文档------3.2.2 查询操作making queries
    “全能”选手—Django 1.10文档中文版Part4
    Django 1.10 中文文档------3.2.1 模型Models
  • 原文地址:https://www.cnblogs.com/mouseIT/p/4176238.html
Copyright © 2020-2023  润新知