zoukankan      html  css  js  c++  java
  • Nginx+Tomcat+Memcached 集群

    写过一篇 Apache Httpd+Tomcat 的集群,

    现在来看看Nginx+Tomcat+Memcached是怎么集群的。

    先看看用的版本和工具:

    Nginx: nginx-1.8.1

    Tomcat: apache-tomcat-8.0.32

    Memcached: memcached-win32-1.4.4-14

    (我都是用的Windows下的版本,Linux下是一样的,而且Memcached在Linux的版本更好)

    关于Memcached可以参考我的这一篇: http://www.cnblogs.com/icenter/p/5331357.html

    关于集群想多说两句就是关于网络和网络安全,大家一定也要多懂一些,虽然一般的自己搭建集群涉及不到,但实际公司企业用的话对安全和网络的要求很高的。

    集群搭建并不难,难的是在这上边的业务和事务的处理。有很多相关的分布式的协议可以多查查。好了废话不多说,直接看搭建过程:

    1,首先启动Memcached

    关于Memcached的,安装,启动,配置及使用和常用命令,参考: http://www.cnblogs.com/icenter/p/5331357.html

    这篇文章不在赘述,首先保证Memcached起来。

    2,配置tomcat

    这次要往tomcat的lib目录中多放进几个包去

    javolution-5.4.3.1.jar
    memcached-session-manager-1.9.2.jar
    memcached-session-manager-tc8-1.9.2.jar
    msm-javolution-serializer-1.9.2.jar
    msm-kryo-serializer-1.9.2.jar
    msm-serializer-benchmark-1.9.2.jar
    spymemcached-2.12.0.jar

    然后配置 tomcat中的 server.xml 和 上一篇 Apache Httpd + tomcat 类似,

    要注意的几个点:

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

    shutdown server port

    <Connector port="8082" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />

    connector HTTP/1.1 server port

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

    connector AJP/1.3 server port

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

    Engine 中 jvmRoute 

    这次使用 Memcached 内存数据的做Session的统一管理,和上次 httpd +tomcat 那个简单的 SimpleTcpCluster 不同。

    这次需要把项目映射到tomcat中, 使用Context 让tomcat 加载项目, 然后在 Context中加入 <Manager.... /> 来管理Session

    截图如下:

    主要的Code部分

    <Context docBase="D:Nginx_Tomcatapache-tomcat-8.0.32-1webappsview" path="/view" reloadable="false" >

    <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
    memcachedNodes="n1:localhost:11211"
    requestUriIgnorePattern=".*.(png|gif|jpg|css|js)$"
    sessionBackupAsync="false"
    sessionBackupTimeout="100"
    sticky="false"
    transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"
    copyCollectionsForSerialization="false"/>

    </Context>

    memcachedNodes="n1:localhost:11211"   这里如果Memcached也是多个的话,使用逗号分隔,memcachedNodes="n1:localhost:11211,n2:192.168.0.100:11211"

    参数的格式:名字:ip:port 

    到此Tomcat 配置完毕,这时可以启动Tomcat了。

    多注意一下log情况,看看有没有报错,如果没有报错,恭喜你,Tomcat的集群已经初步显形,可以重新整理一下,重启Memcached,tomcat看看自己的初步成果了。如果失败了多看看log,看看是什么错误在具体分析。

    这个时候其实已经能够完成 tomcat 的Session 复制功能了, 你往tomcat1 中添加一个session, tomcat2, tomcat3 中都会有。

    并且,如果Memcached没死,没有重启的话, 即便是某一个tomcat重启了,session也不会丢失。强大吧。

    但是这时候还没有统一的入口的,你必须一个ip:port,一个ip:port的输入才能访问每个tomcat,没有负载均衡,没有load balance。

    那么我们的大哥Nginx该上场了:

    3,配置Nginx

    关于Nginx的理解和配置及学习了,这里我们就不学习源码了,有兴趣,有时间的同学,可以下来仔细研究。

    我们这里讲集群和负载均衡,我们只讲一下Nginx来实现我们需求的最简单配置:

    找到你的Nginx的安装目录,找到conf下的nginx.conf文件,

    修改这个文件, 我们加入一组我们的 tomcatservers, 然后让 nginx 来代理这一组server就OK了。

    下边来看截图:

    看一下主要的Code改动:

    upstream tomcat_servers {
    server localhost:8081 weight=1;
    server localhost:8082 weight=1;
    server localhost:8083 weight=1;
    }

    #weight 权重,和上把 httpd+tomcat 那个 lbfactor一模一样, 分值越大,说明我们认为这个机器越好,我们给他跟大的责任,分的请求理论上越多。

    location / {
    root html;
    index index.html index.htm;
    proxy_pass http://tomcat_servers;
    }

    其他的的参数暂时没有涉及到的,这里也不提了, 有兴趣的同学自己查查吧,什么ip_hash之类。

    时间篇幅有限,我们这里不详细讲Nginx了,有时间单篇在详讲Nginx。

    那么配置如果没错的话,你现在就可以启动Nginx了,没有报错吧, OK,你现在就有了统一的访问入口了, 负载均衡,Session,复制都有了。

    到这里文章应该结束了。

    但是我们应该思考的更多,比如在集群中,自动发现node离线,上线,等等,等等。

    学无止境。

  • 相关阅读:
    当一个模块没有默认导出
    <<平仓>>
    模态对话框
    PlanB S2F 模型
    <<深入React技术栈>> CSS Modules
    状态提升
    ol.proj.transform 坐标系转换
    HTMLVideoElement.srcObject MediaStream MediaSource Blob File
    毛玻璃特效 backdrop-filter
    Filter
  • 原文地址:https://www.cnblogs.com/icenter/p/5332528.html
Copyright © 2011-2022 走看看