精华内容
下载资源
问答
  • 防伪码:失去只是一种姿势,得到并不等同于幸福项目需求:1、nginx...2、nginx容器做为前端服务器可以直接响应用户的静态页面请求,jsp动态页面请求交给tomcat容器处理(静动分离)3、通过session复制共享:session r...

    防伪码:失去只是一种姿势,得到并不等同于幸福

    项目需求:

    1、nginx容器作为整个架构中前端服务器监听80端口接收用户的jsp页面请求,并将用户的jsp请求分发给tomcat web容器,tomcat容器需要连接mysql数据库容器。

    2、nginx容器做为前端服务器可以直接响应用户的静态页面请求,jsp动态页面请求交给tomcat容器处理(静动分离)

    3、通过session复制共享:session replication,实现tomcat服务器之间同步session,使session保持一致。

    注:http://yw666.blog.51cto.com/11977292/1888747,session复制共享在前文详细讲解过,此处不再赘述。

    如图所示:

    wKioL1h-OJfAu8VMAAB_uUH6wOI048.jpg-wh_50

    制作nginx镜像

    from docker.io/centos:centos6
    add nginx-1.6.0 /nginx-1.6.0
    run yum -y install gcc pcre pcre-devel zlib-devel make
    run useradd nginx -s /sbin/nologin
    run cd /nginx-1.6.0 && ./configure --prefix=/nginx --user=nginx --group=nginx && make &&
    make install
    run echo "daemon off;" >> /nginx/conf/nginx.conf
    run echo 'ip1=$(cat /etc/hosts | grep tomcat1 | awk '"'{print "'$1'"}'"')' >>
    /7.sh
    run  echo 'ip=$(cat /etc/hosts | grep tomcat2 | awk '"'{print "'$1'"}'"')' >>
    /7.sh
    run echo "sed -i -e '33 i"'\u'"pstream backend {' -e '33 i"'\s'"erver ""'"'$ip'"'"":8080
    weight=1;' -e '33 i"'\s'"erver ""'"'$ip1'"'"":8080 weight=1;}' -e '46 i"'\p'"roxy_pass http://backend;' /nginx/conf/nginx.conf" >> /7.sh
    run echo "/nginx/sbin/nginx" >> /7.sh
    cmd source /7.sh


    wKiom1h-OY7yNK8YAAF4VZEcVE0315.jpg-wh_50

    用docker build 生成nginx镜像

    wKiom1h-OZvDJKTqAAAZAZzJvS8974.png-wh_50

    制作tomcat镜像

    from docker.io/centos:centos6
    add apache-tomcat-7.0.54 /apache-tomcat-7.0.54
    add jdk1.7.0_65 /jdk1.7.0_65
    add 123.sh /123.sh
    add profile /profile
    run mv /jdk1.7.0_65 /java
    run mv /apache-tomcat-7.0.54 /tomcat7
    add server.xml /tomcat7/conf/server.xml
    add context.xml /tomcat7/conf/context.xml
    run cp -rf /profile /etc/profile
    run echo 'ip1=$(ifconfig | grep Bcast | awk '"'{print "'$2'"}'"' | awk -F : '"'{print
    "'$2'"}')" >>  /8.sh
    run echo 'ip2=$(cat /etc/hosts | grep mysql | awk '"'{print "'$1'"}'"')' >> /8.sh
    run echo "sed -i '118 "'i\a'"ddress="'"'"'"'$ip1'"'"'"'"'""
    /tomcat7/conf/server.xml" >> /8.sh
    run echo "sed -i '23 i"'\u'"rl="'"'jdbc:mysql://"'"'$ip2'"'":3306/javatest'"'"/>'
    /tomcat7/conf/context.xml" >> /8.sh
    add mysql-connector-java-5.1.22-bin.jar /tomcat7/lib/mysql-connector-java-5.1.22-bin.jar
    add 456.sh /456.sh


    cmd source /456.sh


    wKioL1h-OcnieC5dAAHGbrA5YUU278.jpg-wh_50

    编写tomcat守护进程脚本

    wKioL1h-OeHhAvRfAAAWPHqmKIk047.png-wh_50

    wKiom1h-Oe-j3MroAAA7WIeyFuo319.png-wh_50

    program="/tomcat7/bin/startup.sh"
       progress="tomcat"
     
       while true;
       do
               sleep 10
               progremflag=`ps -ef |grep $progress|wc -l`
              echo $progremflag
              if [ $progremflag -le 10 ];then
                      $program >/dev/null 2>&1 &
              fi
      done


    编写cmd启动时要执行的脚本

    wKioL1h-OgPjKNK3AAAkG3cVox4293.png-wh_50

    用docker build 生成tomcat镜像

    wKiom1h-Ozezrp8DAABcBYmj6Bs397.png-wh_50

    制作mysql镜像

    from docker.io/centos:centos6
    add cmake-2.8.12 /cmake-2.8.12
    add  mysql-5.5.38 /mysql-5.5.38
    run yum -y install ncurses-devel gcc gcc-c++
    run cd /cmake-2.8.12 && ./configure && gmake && gmake install
    run cd /mysql-5.5.38 && cmake -DCMAKE_INSTALL_PREFIX=/mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci
    -DWITH_EXTRA_CHARSETS=all -SYSCONFDIR=/etc && make && make install
    run rm -rf /etc/my.cnf
    run cp /mysql-5.5.38/support-files/my-medium.cnf /etc/my.cnf
    run cp /mysql-5.5.38/support-files/mysql.server /mysqld
    run chmod 777 /mysqld
    run groupadd mysql
    run useradd -M -s /sbin/nologin mysql -g mysql
    run chown -R mysql:mysql /mysql
    run /mysql/scripts/mysql_install_db --user=mysql --basedir=/mysql/ --datadir=/mysql/data/
    run ./mysqld start &&  cd /mysql/bin && echo "grant all privileges on *.* to 'root'@'%.%.%.%'
    identified by '123456';" | ./mysql -u root && echo "create database javatest;" | ./mysql -u root && echo "create table javatest.yw(id int);" | ./mysql -u root
    cmd cd /mysql/bin && ./mysqld_safe


    wKiom1h-O2zyPPUbAAH-3BVBF1U305.jpg-wh_50

    用docker build 生成mysql镜像

    wKiom1h-O4TARq1oAAAZK0dogZA600.png-wh_50

    至此,镜像都已经做好。

    下面开始启动容器

    先启动mysql

    wKioL1h-O7HzeJQZAAAq1aoQx7c627.png-wh_50

    启动tomcat连接mysql

    wKiom1h-O8SCmkL7AABNtuQRTSU564.png-wh_50

    再启动nginx连接两台tomcat

    wKioL1h-O9HCLDHOAACgeEEsB7E797.jpg-wh_50

    Docker ps 查看容器启动状态

    wKiom1h-O-CBKn7AAABlXpUHSXM889.png-wh_50

    开始测试

    wKiom1h-PIGxbKL1AAELbpq6syI380.jpg-wh_50

    wKiom1h-PAjTL2qmAAEQvOB9vOM770.jpg-wh_50

    验证tomcat连接mysql

    wKioL1h-PGXgooUhAAGOXaEcANQ337.jpg-wh_50

    wKioL1h-PDDh8cj9AAAmWtVmroQ508.png-wh_50

    谢谢观看,真心的希望能帮到您!

     

    展开全文
  • 目录 1、下周安装Redis 2、配置两个Tomcat7 ...session复制/共享 在 访问系统的会话过程中,用户登录系统后,不管访问系统的任何资源地址都不需要重复登录,这里面servlet容易保存了该用户的会话(session)。 如果两个

    作者:许瑜钊

    目录

    1、下周安装Redis

    2、配置两个Tomcat7

    3、下载,拷贝tomcat需要的jar

    4、tomcat7配置 

    5、测试程序

    6、配置nginx,设置权重负载均衡


    session复制/共享
    在 访问系统的会话过程中,用户登录系统后,不管访问系统的任何资源地址都不需要重复登录,这里面servlet容易保存了该用户的会话(session)。 如果两个tomcat(A、B)提供集群服务时候,用户在A-tomcat上登录,接下来的请求web服务器根据策略分发到B-tomcat,因为B- tomcat没有保存用户的会话(session)信息,不知道其登录,会跳转到登录界面。
    这时候我们需要让B-tomcat也保存有A-tomcat的会话,我们可以使用tomcat的session复制实现或者通过其他手段让session共享。

    1.https://redis.io/下载安装redis

    2.在本机上配置两个Tomcat,分别为tomcat7-8081、tomcat7-8082。

    编制两个index.jsp页面,分别放入tomcat7-8081\webapps\ROOT、tomcat7-8082\webapps\ROOT目录下,index.jsp页面内容如下:

    复制代码
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!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=ISO-8859-1">
    <title>获取session id</title>
    </head>
    <body>
        Session Id : <%= request.getSession().getId() %>
    </body>
    </html>
    复制代码

    tomcat7-8081访问地址:http://localhost:8081,浏览显示内容:Session Id : A86BC413D12339380DD7B0079C50D9EB
    tomcat7-8082访问地址:http://localhost:8082,浏览显示内容:Session Id : A86BC413D12339380DD7B0079C50D9EB

    备注:在同一台服务器上配置多个Tomcat教程



    3、拷贝tomcat需要的jar
    将如下几个jar拷贝到${TOMCAT_HOME}/lib下

    tomcat-redis-session-manager-VERSION.jar 
    jedis-2.5.2.jar 
    commons-pool2-2.2.jar

    备注:jar已上传到博客园中,有需要的点击下载

    4、配置tomcat 
    编辑${TOMCAT_HOME}/conf/context.xml,在context中加入

    <Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />
    <Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"
           host="localhost"
           port="6379"
           database="0"
           maxInactiveInterval="60" />

    其中host和port为redis的ip和端口

    至此配置完成,tomcat会使用redis来托管session。

    5、测试
    分别启动2个Tomcat,在终端看到了如下信息,表明redis的session manager初始化成功。

    复制代码
    ...
    十月 15, 2015 4:52:39 下午 com.radiadesign.catalina.session.RedisSessionManager startInternal
    信息: Attached to RedisSessionHandlerValve
    十月 15, 2015 4:52:39 下午 com.radiadesign.catalina.session.RedisSessionManager initializeSerializer
    信息: Attempting to use serializer :com.radiadesign.catalina.session.JavaSerializer
    十月 15, 2015 4:52:39 下午 com.radiadesign.catalina.session.RedisSessionManager startInternal
    信息: Will expire sessions after 1800 seconds
    十月 15, 2015 4:52:39 下午 org.apache.catalina.startup.HostConfig deployDirectory
    信息: Deployment of web application directory E:\WorkFolder\Temp\Redis-Session\apache-tomcat1-8080\webapps\manag
    十月 15, 2015 4:52:39 下午 org.apache.catalina.startup.HostConfig deployDirectory
    信息: Deploying web application directory E:\WorkFolder\Temp\Redis-Session\apache-tomcat1-8080\webapps\ROOT
    十月 15, 2015 4:52:39 下午 org.apache.catalina.startup.TldConfig execute
    信息: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a co
    十月 15, 2015 4:52:39 下午 com.radiadesign.catalina.session.RedisSessionManager startInternal
    信息: Attached to RedisSessionHandlerValve
    十月 15, 2015 4:52:39 下午 com.radiadesign.catalina.session.RedisSessionManager initializeSerializer
    信息: Attempting to use serializer :com.radiadesign.catalina.session.JavaSerializer
    十月 15, 2015 4:52:39 下午 com.radiadesign.catalina.session.RedisSessionManager startInternal
    信息: Will expire sessions after 1800 seconds
    ...
    复制代码

    打开浏览器,输入http://localhost:8081回车,
    打开浏览器,输入http://localhost:8082回车



    获取的SESSIONID是同一个,说明成功了,其中D5E4019A04709CD68F94378211DA1B60就是SESSIONID

    启动redis自身的客户端:redis-cli.exe -h 127.0.0.1 -p 6379
    执行"keys *",会看到SESSIONID:D5E4019A04709CD68F94378211DA1B60;
    执行"get D5E4019A04709CD68F94378211DA1B60",得到SESSIONID的值。


    经测试,只要redis不重启,用户session就不会丢失。虽然session保存到了redis中,但是如果redis挂掉,session也会丢失。为了解决此问题,可对redis进行集群。
    注意:放到redis中的对象必须为可序列化对象。因此,在编程过程中,放置的session对象必须实现serialiable接口。

    对于一些大型的web2.0的网站,在正式部署时一般是部署在不同故障域的多台应用服务器上,以j2ee应用为例,一般都会部署在tomcat下。假如部署了10台tomcat服务器,那这10台tomcat可能是部署在不同的机器上,然后将应用程序copy到这10台tomcat下,然后启动所有tomcat。一般来说这样做的目的是为了达到负载均衡以及避免单点故障,另外也考虑到国内网络环境的原因,避免跨网络运营商访问而导致访问速度低下的问题,当然不要忘了坐镇这10台tomcat前端的还有我们的反向代理服务器。比如nginx,这个就是另一个话题了



    6、配置nginx,设置权重负载均衡

    安装下载好nginx

    服务器准备好了,我们要在server外部定义个服务器集群,即用到了上文中提到的upstream 标签。服务器集群名字取为test。




    同时我们需要再修改下server,将定向的路径转到问你服务器集群上。


    6、配置nginx,设置权重负载均衡
    展开全文
  • 主要介绍了Tomcat实现session共享,其实就是session 会话复制的相关方法,需要的朋友可以参考下
  • 实现过程第1步修改tomcat的server.xml文件,在 节点下,添加以下内容:port="45564"frequency="500" dropTime="3000" />autoBind="100"selectorTimeout="5000" maxThreads="6" />...

    实现过程

    第1步

    修改tomcat的server.xml文件,在 节点下,添加以下内容:

                        port="45564"frequency="500" dropTime="3000" />

                      autoBind="100"selectorTimeout="5000" maxThreads="6" />

                  deployDir="/tmp/war-deploy/"watchDir="/tmp/war-listen/" watchEnabled="false" />

    1234567891011121314151617181920

    1949c564dd6abf8006dd294afd2b3f77.png

    第2步

    在项目的web.xml中添加如下节点:

    优缺点

    优点

    Java代码上不需要做任何修改

    缺点

    依赖应用服务器容器,这里是Tomcat,其他的容器是使用不了的;

    适合小集群,不适合大集群,因为Session的复制是 all toall的,每个Tomcat都会存储其他的Session,会造成很大的资源浪费;

    在高并发的情况下延迟较为严重且占用网络资源。

    展开全文
  • Tomcat集群共享Session

    2018-07-05 14:37:23
    配置Tomcat的session共享可以有三种解决方案:第一种是以负载均衡服务器本身提供的session...但是针对于tomcat这种方式存在很大的缺陷,主要因为是依靠广播方式来实现的session复制,会浪费很多带宽导致整个网络反映...

    配置Tomcatsession共享可以有三种解决方案:

    第一种是以负载均衡服务器本身提供的session共享策略,每种服务器的配置是不一样的,并且nginx本身是没有的


    第二种是利用web容器本身的session共享策略来配置共享。针对于weblogic这种方式还是靠谱的。但是针对于tomcat这种方式存在很大的缺陷,主要因为是依靠广播方式来实现的session复制,会浪费很多带宽导致整个网络反映缓慢。官网也建议这种方式最好不要超过4台tomcat,具体的内容可参考/webapps/docs/cluster-howto.html里面有详细的说明。

    下面是具体的配置过程:

    步骤一:修改server.xml文件,最简单的集群配置只需要将节点中注释掉的下面这句取消注释即可:
    Xml代码:
        <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>  
    使用这样方法配置的集群会将Session同步到所在网段上的所有配置了集群属性的实例上(此处讲所在网段可能不准确,是使用Membership 的address和port来区分的。tomcat集群的实例如果在Membership配置中有相同的address和port值的tomcat被分到同一个集群里边。他们的session是相互共享的,同一个session的集群被称为一个cluster。可以配置多个cluster,但是cluster和cluster之间的session是不共享的)。也就是说如果该广播地址下的所有Tomcat实例都会共享Session,那么假如有几个互不相关的集群,就可能造成Session复制浪费,所以为了避免浪费就需要对节点多做点设置了,如下:
    Xml代码
        <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster">    
            <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"/>    
            </Channel>    
        </Cluster>  
    加了一个Channel,里面包了个Membership,咱们要关注的就是membership的port属性和address属性,不同的集群设置不同的port值或address值,从目前的使用来看,基本上是隔离开了。
    
    步骤二:修改项目的web.xml文件(tomcat的conf目录下的web.xml文件):
    web.xml文件的修改很简单:只需要在节点中添加这个节点<distributable/>就可以了。
    OK,有了这二步就实现了Tomcat的集群和Session的共享了。
    
    


    第三种是Tomcat集群+redis的Session共享配置方法.


    展开全文
  • tomcat集群共享session

    2017-10-13 13:35:23
    本文转载自csdn博客用户fengwind1 tomcat集群的主要方法有三种: 1、采用粘性会话,即某个ip只会访问集群中的某一台机器,这样就可以简单的解决session共享的问题;...3、采用session复制技术,tomcat本身已支持
  • tomcat session共享

    2016-04-15 11:21:25
    session共享有两种方式: 1、session共享,多个服务器session拷贝保存,一台宕机不会影响用户的登录状态; 2、请求精确集中定位,即当前用户的请求都集中定位到一台... session replication:会话复制,即上述的...
  • 本配置在tomcat7上验证通过。通过此方法配置的集群,session信息将会被自动复制到各个节点。 1、配置Server.xml 在Server.xml中,找到被注释节点,修改为如下: Cluster className="org.apache.catalina.ha....
  • tomcat session共享负载

    2018-07-31 14:12:23
    之前配置了很多次,主要是jar包的版本不对,导致了一些冲突,tomcat7的lib下面的jar我全部复制了下来,直接替换即可   替换完毕后,可以直接在context.xml文件中配置  &lt;Manager className="de....
  • 一、前言,目前解决session共享方案有很多,包括使用redis、cookie、jvm_route、以及nginx的第三方插件等,但最好的方案我推荐使用reids,这里我就使用tomcat复制写一个。 二、在需要复制的主机上的tomcat的...
  • nginx+tomcat 安装配置这有详细介绍 我的tomcat配置中 , 这行报错 直接注释掉 , 目标完成 OK
  • 1、为什么会提出这个问题?使用Nginx+Tomcat进行负载均衡时,希望使用轮询方式进行负载。但是如果使用轮询方式的话,可能会访问不同的...2、方案1:使用Tomcat内置的Session复制方案具体配置如下:&lt;!-- 第1步...
  • Tomcat集群Session共享

    2020-08-26 15:19:36
    Tomcat集群解决Session共享的方案: 1. 基于Cookie+Redis+Filter解决方案实现过程优缺点踩坑 2. Tomcat内置的Session复制方案实现过程优缺点 3. 使用Session粘滞方案实现形式优缺点 4. 基于Session持久化方案 5. ...
  • tomcat7session共享依赖

    2019-05-08 11:09:26
    tomcat 7 session共享 依赖包 以及操作步骤 1.将jar包复制tomcat lib 文件夹下 2.覆盖tomcat conf 目录下 context.xml文件 3.启动tomcat
  • tomcat,redis下载忽略。 一、从github上下载源码,...将源码复制到开发工具,打包成jar.注意tomcat版本,此处用tomcat 7.0.72,maven编译环境同样为1.7. 二、准备两个tomcat, 版本为上述7.0.72。 并修改...
  • ip1安装tomcat1,端口8005,8081,8009、nginx,提供nginx外网端口80,ip2安装tomcat2,端口8006,8082,8010。 1、安装apach tomcat。 2、安装ng,下载解压安装到ip1,根据需要修改配置文件nginx.conf: ...
  • Tomcat 配置包共享

    2016-07-20 13:32:58
    Tomcat 配置包共享1.在 ${ TOMCAT_HOME } 目录下面新建目录:shared/lib2.把jar包复制到 ${ TOMCAT_HOME }/shared/lib 下面3.修改tomcat配置文件将多应用之间的相同的jar分离出来,放置${ TOMCAT_HOME }/shared/lib...
  • Tomcat的Session共享

    2019-03-24 21:08:03
    1、为什么会提出这个问题? 使用Nginx+Tomcat进行负载均衡时,希望使用轮询方式进行负载。但是如果使用轮询方式的话,可能会访问不同的Tomcat,...2、方案1:使用Tomcat内置的Session复制方案 具体配置如下: &l...
  • tomcat共享jar包

    2018-05-17 15:28:31
    1.tomcat 目录新建 extra-lib 文件夹2.修改tomcat/conf/catalina.properties文件的 common.loader 属性,追加 "...3.将项目依赖的包复制到extra-lib文件夹中4.修改maven依赖包作用范围,&lt;sco...
  • 源文档链接: http://tomcat.apache.org/tomcat-9.0-doc/cluster-howto.html 对于高访问量、高并发量的网站或web应用来说...集群之后比如我们有N个Tomcat,用户在访问我们的网站时有可能第一次请求分发到tomcat...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 410
精华内容 164
热门标签
关键字:

tomcat复制共享