Nginx+Tomcat 集群部署

1.Nginx + Tomcat 集群部署 简单配置

  1 #user  nobody;
  2 worker_processes  4;#工作进程的个数
  3
  4 #error_log  logs/error.log;
  5 #error_log  logs/error.log  notice;
  6 #error_log  logs/error.log  info;
  7
  8 #pid        logs/nginx.pid;
  9
 10
 11 events {
 12     worker_connections  1024;  #单个进程连接数
 13 }
 14
 15
 16 http {
 17     include       mime.types;
 18     default_type  application/octet-stream;
 19
 20     #log_format  main  ‘$remote_addr - $remote_user [$time_local] "$request" ‘
 21     #                  ‘$status $body_bytes_sent "$http_referer" ‘
 22     #                  ‘"$http_user_agent" "$http_x_forwarded_for"‘;
 23
 24     #access_log  logs/access.log  main;
 25
 26     sendfile        on;
 27     #tcp_nopush     on;
 28
 29     #keepalive_timeout  0;
 30     keepalive_timeout  65;
 31
 32     #gzip  on;
 33     #配置反向代理配置
 34     gzip on;
 35     upstream netitcast.com{
 36         # 定下请求ip_hash;
 37         ip_hash;
 38         server 127.0.0.1:8181 weight=1;#服务器配置 代理分配  weight:分配权重 down:不参与负载均衡
 39         server 192.168.0.105:8181 weight=1;#
 40     }
 41
 42     server {
 43         listen       8888;
 44         server_name  localhost;
 45
 46         #charset koi8-r;
 47
 48         #access_log  logs/host.access.log  main;
 49
 50         location / {
 51             root   html;
 52             index  index.html index.htm;
 53             # 配置
 54             proxy_pass http://netitcast.com;
 55         }
 56
 57         #error_page  404              /404.html;
 58
 59         # redirect server error pages to the static page /50x.html
 60         #
 61         error_page   500 502 503 504  /50x.html;
 62         location = /50x.html {
 63             root   html;
 64         }
 65
 66         # proxy the PHP scripts to Apache listening on 127.0.0.1:80
 67         #
 68         #location ~ \.php$ {
 69         #    proxy_pass   http://127.0.0.1;
 70         #}
 71
 72         # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
 73         #
 74         #location ~ \.php$ {
 75         #    root           html;
 76         #    fastcgi_pass   127.0.0.1:9000;
 77         #    fastcgi_index  index.php;
 78         #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
 79         #    include        fastcgi_params;
 80         #}
 81
 82         # deny access to .htaccess files, if Apache‘s document root
 83         # concurs with nginx‘s one
 84         #
 85         #location ~ /\.ht {
 86         #    deny  all;
 87         #}
 88     }
 89
 90
 91     # another virtual host using mix of IP-, name-, and port-based configuration
 92     #
 93     #server {
 94     #    listen       8000;
 95     #    listen       somename:8080;
 96     #    server_name  somename  alias  another.alias;
 97
 98     #    location / {
 99     #        root   html;
100     #        index  index.html index.htm;
101     #    }
102     #}
103
104
105     # HTTPS server
106     #
107     #server {
108     #    listen       443 ssl;
109     #    server_name  localhost;
110
111     #    ssl_certificate      cert.pem;
112     #    ssl_certificate_key  cert.key;
113
114     #    ssl_session_cache    shared:SSL:1m;
115     #    ssl_session_timeout  5m;
116
117     #    ssl_ciphers  HIGH:!aNULL:!MD5;
118     #    ssl_prefer_server_ciphers  on;
119
120     #    location / {
121     #        root   html;
122     #        index  index.html index.htm;
123     #    }
124     #}
125
126 }

2.关于Session 的问题

  2.1Tomcat 提供了Cluster 的组件实现session 复制 ,Clurster 的配置

    <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
             channelSendOptions="8">
      <!--
       复制方式:
        org.apache.catalina.ha.session.DeltaManager:复制所有的session 到所有的节点(节点太多,耗费资源)
        org.apache.catalina.ha.session.BackupManager:    

        expireSessionsOnShutdown:一个程序被关闭时候,是否要销毁所有session
        notifyListenersOnReplication:session复制和移动的时候通知
      -->
      <Manager className="org.apache.catalina.ha.session.DeltaManager"
               expireSessionsOnShutdown="false"
               notifyListenersOnReplication="true"/>

      <Channel className="org.apache.catalina.tribes.group.GroupChannel">
        <Membership className="org.apache.catalina.tribes.membership.McastService"
                    address="228.0.0.4"
                    port="45564"
                    frequency="500"
                    dropTime="3000"/>
        <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
                  address="auto"
                  port="4002"
                  autoBind="100"
                  selectorTimeout="5000"
                  maxThreads="6"/>

        <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
          <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
        </Sender>
        <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
        <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
      </Channel>

      <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
             filter=""/>
      <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>

      <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
                tempDir="/tmp/war-temp/"
                deployDir="/tmp/war-deploy/"
                watchDir="/tmp/war-listen/"
                watchEnabled="false"/>

      <ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>
      <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
    </Cluster>

注意:使用Cluster的组件实现Session复制的时候,一定要在程序中web.xml加上这样一句告诉tomcat这个程序是分布式

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    id="WebApp_ID" version="2.5">
  <display-name>Test</display-name>
   <!--
        分布式
  -->
  <distributable/>
</web-app>

测试Session复制和Nginx集群是否成功页面

 1 <%@ page contentType="text/html; charset=GBK" %>
 2 <%@ page import="java.util.*" %>
 3 <html><head><title>Cluster App Test</title></head>
 4 <body>
 5 Server Info:
 6 <%
 7 out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"<br>");%>
 8 <%
 9   out.println("<br> ID " + session.getId()+"<br>");
10   // 如果有新的 Session 属性设置
11   String dataName = request.getParameter("dataName");
12   if (dataName != null && dataName.length() > 0) {
13      String dataValue = request.getParameter("dataValue");
14      session.setAttribute(dataName, dataValue);
15   }
16   out.println("<b>Session 列表</b><br>");
17   System.out.println("============================");
18   Enumeration e = session.getAttributeNames();
19   while (e.hasMoreElements()) {
20      String name = (String)e.nextElement();
21      String value = session.getAttribute(name).toString();
22      out.println( name + " = " + value+"<br>");
23          System.out.println( name + " = " + value);
24    }
25 %>
26   <form action="index.jsp" method="POST">
27     名称:<input type=text size=20 name="dataName">
28      <br>
29     值:<input type=text size=20 name="dataValue">
30      <br>
31     <input type=submit>
32    </form>
33 </body>
34 </html>

到了这里我有两个疑问没有解决,

1.使用Cluster虽然Session复制成功了,但是在网页上使用iframe 框架时候会出现失效

2.文件上传的问题

时间: 2024-10-05 23:49:55

Nginx+Tomcat 集群部署的相关文章

Nginx+Tomcat集群部署

为了获取更好的性能,我们常常需要将tomcat进行集群部署.下文通过nginx转发实现tomcat集群,并通过nginx-upstream-jvm-route插件保证session的粘滞. 应用场景环境: server1 服务器上安装了 nginx + tomcat01 server2 服务器上只安装了 tomcat02 server1 IP 地址: 192.168.1.88 server2 IP 地址: 192.168.1.89 安装步骤: 1)在server1 上安装配置 nginx + n

nginx+tomcat集群配置(1)---根目录设定和多后端分发配置

前言: 对于javaer而言, nginx+tomcat集群配置, 已然成了web应用部署的主流. 大公司如此, 小公司亦然. 对于个人开发者而言, 资源有限, 往往多个web应用混部于一台服务器(云主机), 如何隔离访问这些服务资源? 彼此又不影响呢? nginx来为你排忧解难, ^_^. 本文将介绍tomcat的简单配置和部署, 以及nginx作为反向代理, 如何分流. 基础架构: 不成文的约定: 1). 一个tomcat容器部署一个webapp应用实例 2). url根目录访问webapp

nginx+tomcat集群配置(4)--rewrite规则和多应用根目录设定思路

前言: nginx中有一块很重要的概念, 就是rewrite规则. 它会对URL进行修改, 然后进行内部的重定向. rewrite授予了nginx更多的自由, 使得后级服务的接入更加地方便. 本文将简单讲述nginx的rewrite规则和原理, 同时讲解下如何借助rewrite实现单tomcat实例/多Web App服务 对应的多域名根目录访问. 案列目标: 首先来谈一下之前对于多Web App服务对应多域名根目录访问的方案. 注: 一个域名对应一个tomcat实例, 一个tomcat实例只包含

使用Tomcat-redis-session-manager来实现Tomcat集群部署中的Session共享

一.工作中因为要使用到Tomcat集群部署,此时就涉及到了Session共享问题,主要有三种解决方案: 1.使用数据库来存储Session 2.使用Cookie来存储Session 3.使用Redis来存储Sesssion 4.使用Tomcat的session复制 5.使用Memcached来存储Session 二.本文中主要讲一下第3种方案,也就是使用Redis来存储Session,Github中已经有该开源组件(Tomcat-redis-session-manager),下面讲一下配置的步骤

实践出真知——一文教你搭建Nginx+Tomcat集群,实现负载均衡及动静分离

实践出真知--一文教你搭建Nginx+Tomcat集群,实现负载均衡及动静分离 前言 ? 想必大家对于Nginx和Tomcat都非常熟悉了,Nginx的应用非常广泛,不仅是对web静态资源非常友好,而且也是非常实用的反向代理和负载均衡软件.结合后端Tomcat的服务,从而搭建Nginx+Tomcat集群. ? 对于直接想要实践的朋友而言可以获取本文的链接中的软件包后直接看第三备份的内容. 一.集群搭建结构及拓扑 1.1集群架构图示 Nginx+Tomcat集群的结构示意图如下: 1.2系统环境与

100513、nginx+tomcat集群+session共享(linux)

第一步:linux中多个tomcat安装和jdk安装(略) 第二步:nginx安装,linux中安装nginx和windows上有点不同也容易出错,需要编译,这里做介绍 一.安装依赖 gcc openssl-fips-2.0.2.tar.gz zlib-1.2.7.tar.gz pcre-8.21.tar.gz 下载linux版本的安装包,如果不下载安装包,可以在线安装命令: yum install gcc-c++ yum install -y pcre  pcre-devel yum inst

FineReport关于tomcat集群部署的方案

多台服务器集群后,配置权限.数据连接.模板.定时调度等,只能每台服务器一个个配置,不会自动同步到所有服务器. 针对上述情况,在FineReport中提供新集群部署插件,将xml配置文件.finedb/logdb数据(定时任务.报表目录管理.批量导入.统计信息)的修改都对主机生效.其他辅机的信息读取也都从主机读取,保证了数据同步. 实现了灾备,即主机当即后,次主机会上位接替主机的工作,保证系统正常运作. 同时还增加了集群灾备之文件同步,会将主机的finedb.xml.模板.jar包.插件等等备份到

Tomcat部署问题,Tomcat集群部署问题。

1.服务器崩溃,指的是Tomcat程序崩溃,还是服务器系统崩溃? 答:都有可能. 所以一台服务器上部署多个Tomcat可以防止程序崩溃问题.但不能避免服务器崩溃,要避免服务器崩溃,就要采用服务器集群. 2.那么多台Tomcat,也就是集群部署时.那怎么升级程序呢?如果升级了,升级过程中就不能访问网站了啊?怎么解决? 答:可以采取部分升级策略啊,先升级一部分,再升级另一部分. 或者采取夜间升级.比如凌晨4点 3.临时访问量增加时,可以通过添加Tomcat服务器来提高并发量,活动取消时,再撤去一些T

nginx+tomcat集群负载均衡(实现session复制)

转自:http://talangniao.iteye.com/blog/341512 架构描述 前端一台nginx服务器做负载均衡器,后端放N台tomcat组成集群处理服务,通过nginx转发到后面(注:没做动静分离,静态动态全部都转给tomcat) 优点:实现了可弹性化的架构,在压力增大的时候可以临时添加tomcat服务器添加到这个架构里面去 一,配置nginx 1,  下载包 Wget http://sysoev.ru/nginx/nginx-0.6.32.tar.gz ftp://ftp.