【黑马程序员】Nginx+tomcat集群并实现session共享(广播机制、redis两种方式)

合集下载

nginx集群tomcat,session共享问题

nginx集群tomcat,session共享问题

nginx集群tomcat,session共享问题场景:通过负载均衡之后,⽤户第⼀次请求的tomcat和第⼆次请求的tomcat基本不是同⼀个,但是你在第⼀次请求放在session中的值只有⼀个tomcat才,第⼆个请求的那个tomcat⾥⾯是没有的。

这样就出现了⽤户不停登⼊的情况。

⽅法⼀:复制session信息原理:讲道理,这个⽅法⽐较蠢,就是有⼏个tomcat,就复制⼏个session,只要有⼀个tomcat中的session发⽣变化,其他tomcat中的session跟着复制变化,保证所有⽤户的session在所有的tomcat中都存在⽽且相同。

这样⼀来⽆论⽤户的请求被分配到哪个tomcat都是⽆所谓的,因为所有的tomcat中都有他们存放的session。

打个⽐⽅:如果tomcat相当于饭店,会话相当于筷⼦的话,如果每次吃饭都要⽤⾃⼰的筷⼦,那是不是要把每个饭店都放⼀双⾃⼰的筷⼦。

这就是这个⽅法的原理。

实现:1、修改sever.xml⽂件:将Cluster的注释去掉2、打开⾃⼰项⽬的web.xml(不是tomcat/conf/web.xml),增加distributable。

优点:实现简单,没有什么花⾥胡哨的操作。

如果集群的tomcat不多,⽽且⽤户没有那么多的时候可以选择这种⽅式。

缺点:只要Session数据有变化,就需要将数据同步到所有其他机器上,机器越多,同步带来的⽹络带宽开销就越⼤;当⽤户很多时,每台机器⽤于保存Session数据的内容占⽤会很严重。

⽅法⼆:ip绑定原理:说⽩了就是上篇中说到的负载均衡算法的ip绑定,就是你第⼀次访问哪个tomcat,之后所有的请求都会被分配到那个tomcat上。

打个⽐⽅:如果tomcat相当于饭店,会话相当于筷⼦的话,要保证每次吃饭都⽤⾃⼰的筷⼦的话,我就把筷⼦存在某⼀家饭店,并且每次都去这家店吃饭。

优点:实现也⽐较简单,需要修改⼀下nginx的配置⽂件即可。

【IT专家】Tomcat集群和Session共享的配置方法

【IT专家】Tomcat集群和Session共享的配置方法

本文由我司收集整编,推荐下载,如有疑问,请与我司联系Tomcat集群和Session共享的配置方法2016/07/24 0 Tomcat集群配置其实很简单,在Tomcat自带的文档中有详细的说明( /docs/cluster-howto.html ),只不过是英语的,对我这样的人来说很难懂 。

 下面根据说下怎么配置吧: 第一步、准备工作: 准备几份Tomcat程序,比如分别叫tomcat1、tomcat2、... 如果各Tomcat程序放在不同的机器上,那么就不会有端口的冲突; 如果是放在同一台机器上的话,那就简单改几个端口,防止端口占用造成的冲突。

打开conf文件夹中的server.xml文件,需要修改的端口有: :这里的port要改改 :这里的port也要改改 :这里的port也要改改 至于修改成什么样子,看你自己了,只要不出现端口冲突就可以了,要保证各个Tomcat实例间没有端口冲突 第二步、配置Tomcat的集群设置: 还是修改server.xml文件,最简单的集群配置只需要将节点中注释掉的下面这句取消注释即可: Xml代码 ClusterclassName= org.apache.catalina.ha.tcp.SimpleTcpCluster / 使用这样方法配置的集群会将Session同步到所在网段上的所有配置了集群属性的实例上(此处讲所在网段可能不准确,因为用的228.0.0.4地址进行的广播,我不清楚这是个什么性质的广播地址 )。

也就是说如果该广播地址下的所有Tomcat实例都会共享Session,那么假如有几个互不相关的集群,就可能造成Session复制浪费,因此为了避免浪费就需要对节点多做点设置了,如下:。

集群配置步骤二:共享Session Tomcat配置方法

集群配置步骤二:共享Session Tomcat配置方法

多个Tomcat之间实现Session共享第一步:准备一个最简单的web项目(在IDE中创建部署,拷贝出来即可),并修改index.jsp的内容如下:<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getS erverPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><base href="<%=basePath%>"><title>My JSP 'index.jsp' starting page</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0"><meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">--></head><body>SessionID:<%=session.getId()%><BR>SessionIP:<%=request.getServerName()%><BR>SessionPort:<%=request.getServerPort()%><%out.println("This is Tomcat Server 11111");%></body></html>第二步:利用tomcat自带的集群配置,可以在tomcat官方文档中的cluster-howto.html中看到相关注意事项,其中有一条需要注意一下:Make sure your web.xml has the <distributable/> element很明显是说web项目的web.xml文件中需要有<distributable/>这个元素,所以在web项目中的web.xml加入这个标签。

基于nginx tomcat redis分布式web应用的session共享配置

基于nginx tomcat redis分布式web应用的session共享配置

基于nginx tomcat redis分布式web应用的session共享配置一、前言nginx作为目前最流行的开源反向代理HTTP Server,用于实现资源缓存、web server负载均衡等功能,由于其轻量级、高性能、高可靠等特点在互联网项目中有着非常普遍的应用,相关概念网上有丰富的介绍。

分布式web server 集群部署后需要实现session共享,针对tomcat 服务器的实现方案多种多样,比如tomcat cluster session 广播、nginx IP hash策略、nginx sticky module等方案,本文主要介绍了使用redis服务器进行session 统一存储管理的共享方案。

相关应用结构参照下图:二、环境配置测试环境基于Linux CentOS 6.5,请先安装tomcat、redis、nginx相关环境,不作详细描述,本文测试配置如下:三、构建tomcat-redis-session-manager-master1、由于源码构建基于gradle,请先配置gradle环境。

2、从github获取tomcat-redis-session-manager-master 源码,地址如下:https:///jcoleman/tomcat-redis-session-manager3、找到源码中的 build.gradle 文件,由于作者使用了第三方仓库(sonatype),需要注册帐号,太麻烦,注释后直接使用maven中央仓库,同时注释签名相关脚本并增加依赖包的输出脚本copyJars(dist目录),修改后的 build.gradle文件如下:View Code4、执行gradle命令构建源码,编译输出tomcat-redis-session-manager-master 及依赖jar包gradle build -x test copyJars所有输出列表文件如下:四、tomcat 配置安装配置两台tomcat web服务器,分别修改Connector 端口号为8080和9090,并确保都能正常工作,当然如果分布在不同的主机则可以使用相同端口号。

nginx+tomcat负载均衡,实现session同步会话

nginx+tomcat负载均衡,实现session同步会话

linux+nginx+tomcat负载均衡,实现session同步一、Nginx简介Nginx ("engine x") 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP 代理服务器。

Nginx 是由Igor Sysoev 为俄罗斯访问量第二的Rambler.ru 站点开发的,它已经在该站点运行超过四年多了。

Igor 将源代码以类BSD许可证的形式发布。

自Nginx 发布四年来,Nginx 已经因为它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名了。

目前国内各大门户网站已经部署了Nginx,如新浪、网易、腾讯等;国内几个重要的视频分享网站也部署了Nginx,如六房间、酷6等。

新近发现Nginx 技术在国内日趋火热,越来越多的网站开始部署Nginx。

软件及环境:虚拟机(IP:172.16.16.174)上安装redhat enterprise server linux5.5 OS在虚拟机上安装nginx、Tomcat1和Tomcat2二、JDK的安装1、jdk-7-linux-i586.tar.gz解压#tar zxvf jdk-7-linux-i586.tar.gz#mkdir /usr/java#mv jdk1.7.0 /usr/java2、设置环境变量#vi /etc/profileexport JAVA_HOME=/usr/local/jdk1.7.0export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jarexport PATH=$JAVA_HOME/bin:$PATH保存退出:wq!3、使环境变量生效#source /etc/profile4、测试JDK#java –version三、TOMCAT的安装1、tomcat安装目录将TOMCAT安装在/usr/local/tomcat62、设置环境变量#vi /etc/profileexport TOMCAT_HOME=/usr/local/tomcat6export CATALINA_HOME=/usr/local/tomcat6export CATALINA_BASE=/usr/local/tomcat6保存退出:wq!3、使环境变量生效#source /etc/profile4、修改TOMCA T配置文件server.xml修改TOMCAT配置文件/usr/local/tomcat6/conf/server.xml 将以下内容<Host name="localhost" appBase="webapps".../>修改为<Host name="localhost" appBase="/usr/local/www/web" .../>5、启动TOMCA T/usr/local/tomcat6/bin/startup.sh6、关闭TOMCA T/usr/local/tomcat6/bin/shutdown.sh四、同一linux系统下安装多个TOMCAT1、tomcat安装目录将TOMCAT安装在/usr/local/tomcat6_22、设置环境变量#vi /etc/profileexport TOMCAT_2_HOME=/usr/local/tomcat6_2export CATALINA_2_HOME=/usr/local/tomcat6_2export CATALINA_2_BASE=/usr/local/tomcat6_2保存退出:wq!3、使环境变量生效#source /etc/profile4、修改TOMCA T配置文件server.xml修改TOMCAT配置文件/usr/local/tomcat6_2/conf/server.xml将以下内容<Server port="8005" shutdown="SHUTDOWN">...<Connector port="8080" protocol="HTTP/1.1" ...<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /><Host name="localhost" appBase="webapps".../>修改为<Server port="9005" shutdown="SHUTDOWN">...<Connector port="9090" protocol="HTTP/1.1" ...<Connector port="9009" protocol="AJP/1.3" redirectPort="8443" /><Host name="localhost" appBase="/usr/local/www/web".../>5、修改TOMCA T配置启动文件startup.sh修改TOMCA T配置启动文件/usr/local/tomcat6_2/bin/startup.sh 在exec上添加以下内容export JAVA_HOME=/usr/java/jdk1.7.0export CLASSPATH=$JAVA_HOME/libexport PATH=$JAVA_HOME/binexport CATALINA_HOME=$CATALINA_2_HOMEexport CATALINA_BASE=$CATALINA_2_BASE6、修改TOMCA T配置启动文件shutdown.sh修改TOMCAT配置启动文件/usr/local/tomcat6_2/bin/shutdown.sh 在exec上添加以下内容export JAVA_HOME=/usr/java/jdk1.7.0export CLASSPATH=$JAVA_HOME/libexport PATH=$JAVA_HOME/binexport CATALINA_HOME=$CATALINA_2_HOMEexport CATALINA_BASE=$CATALINA_2_BASE7、启动TOMCA T/usr/local/tomcat6_2/bin/startup.sh8、关闭TOMCA T/usr/local/tomcat6_2/bin/shutdown.sh五、Nginx 0.8.46的安装1、安装Nginx所需的pcre库tar zxvf pcre-8.10.tar.gzcd pcre-8.10/./configuremake && make installcd ../安装pcre成功后,继续安装nginx2、安装Nginx1、上传nginx-0.7.63.tar.gz 至/usr/local2、执行如下命令解压nginx:tar zxvf nginx-0.8.46.tar.gzcd nginx-0.8.46/1.#cd /usr/local2.#tar zxvf nginx-0.7.63.tar.gz3、编译安装nginx1.#cd nginx-0.7.632.#./configure --user=wcity --group=wcity--prefix=/usr/local/nginx--with-http_stub_status_module --with-http_ssl_module (user改为你安装的用户、group改为你安装的组)#启动server 状态页和https模块make && make installcd ../3、创建Nginx日志目录mkdir -p /data/logschmod +w /data/logschown -R wcity:wcity /data/logs4、创建并修改Nginx配置文件nginx.conf①、在/usr/local//nginx/conf/目录中创建nginx.conf文件:vi /usr/local/nginx/conf/nginx.conf修改nginx.conf配置文件如下:user wcity wcity;worker_processes 4;worker_rlimit_nofile 65535;error_log /usr/local/nginx/logs/error.log crit;pid /usr/local/nginx/nginx.pid;events {use epoll;worker_connections 65535;}http {include mime.types;default_type application/octet-stream;server_names_hash_bucket_size 128;client_header_buffer_size 32k;large_client_header_buffers 4 32k;client_max_body_size 8m;sendfile on;tcp_nopush on;keepalive_timeout 60;tcp_nodelay on;fastcgi_connect_timeout 300;fastcgi_send_timeout 300;fastcgi_read_timeout 300;fastcgi_buffer_size 64k;fastcgi_buffers 4 64k;fastcgi_busy_buffers_size 128k;fastcgi_temp_file_write_size 128k;fastcgi_intercept_errors on;gzip on;gzip_min_length 1k;gzip_buffers 4 16k;gzip_http_version 1.0;gzip_comp_level 2;gzip_types text/plain application/x-javascript text/css application/xml;gzip_vary on;upstream http://10.46.51.159 {server 10.46.51.159:8080 weight=5;server 10.46.51.159:8081 weight=5;}location ~ \.(jsp|jspx|do|htm)?$ {proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_pass http:// 10.46.51.159; #转向tomcat处理}location ~ (/dwr/)? {proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_pass http:// 10.46.51.159; #转向tomcat处理}5、检查配置文件nginx.conf是否正确修改/usr/local/nginx/conf/nginx.conf配置文件后,请执行以下命令检查配置文件是否正确:1.#/usr/local/nginx/sbin/nginx -t如果屏幕显示以下两行信息,说明配置文件正确:the configuration file /usr/local/nginx/conf/nginx.conf syntax is okthe configuration file /usr/local/nginx/conf/nginx.conf was tested successfully如果提示unknown host,则可在服务器上执行:ping 如果也是同样提示unknown host则有两种可能:a、服务器没有设置DNS服务器地址,查看/etc/resolv.conf下是否设置,若无则加上b、防火墙拦截6、启动nginx的命令1.#/usr/local/nginx/sbin/nginx这时,输入以下命令查看Nginx 主进程号:1.ps -ef | grep "nginx: master process" | grep -v "grep" | awk -F ' ' '{print $2}'7、停止nginx的命令1.#/usr/local/nginx/sbin/nginx -s stop8、在不停止Nginx服务的情况下平滑变更Nginx配置a、修改/usr/local/nginx/conf/nginx.conf配置文件后,请执行以下命令检查配置文件是否正确:1./usr/local/nginx/sbin/nginx -t如果屏幕显示以下两行信息,说明配置文件正确:1.the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok2.the configuration file /usr/local/nginx/conf/nginx.conf was tested successfullyb、这时,输入以下命令查看Nginx 主进程号:1.ps -ef | grep "nginx: master process" | grep -v "grep" | awk -F ' ' '{print $2}'屏幕显示的即为Nginx 主进程号,例如:6302这时,执行以下命令即可使修改过的Nginx配置文件生效:1.kill -HUP 6302或者无需这么麻烦,找到Nginx 的Pid文件:1.kill -HUP `cat /usr/local/nginx/nginx.pid`9、nginx启动好后启动tomcat此时输入http://主机ip地址即可看到“My web!”10、配置开机自动启动Nginxvi /etc/rc.local在末尾增加以下内容:/usr/local//nginx/sbin/nginx六、Tomcat集群配置1、分别打开tomcat1和tomcat2下conf中server.xml<Server port="8005" shutdown="SHUTDOWN"><!-- Define a non-SSL HTTP/1.1 Connector on port 8080 --><Connector port="8080" maxHttpHeaderSize="8192"m axThreads="150" minSpareThreads="25" m axSpareThreads="75"enableLookups="false" redirectPort="8443" acceptCount="100"connectionTim eout="20000" disableUploadTimeout="true" /><!-- Define an AJP 1.3 Connector on port 8009 --><Connector port="8009" enableLookups="false" redirectPort="8443"protocol="AJP/1.3" />找到<Engine name="Catalina" defaultHost="localhost">Tomcat1下的修改为<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1"> Tomcat2下的修改为<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat2">2、修改tomcat1中的Cluster classNametomcat1找到<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>修改为<Cluster className="org.apache.catalina.ha.tcp.Sim pleTcpCluster"channelSendOptions="6"><Manager className="org.apache.catalina.ha.session.DeltaManager" expireSessionsOnShutdown="false"notifyListenersOnReplication="t rue"/><!--<Manager className="org.apache.catalina.ha.session.BackupManager" expireSessionsOnShutdown="false"notifyListenersOnReplication="t rue"m apSendOptions="6"/>--><Channel className="org.apache.catalina.tribes.group.GroupChannel"> <Membership className="org.apache.catalina.tribes.membership.M castService"address="228.0.0.5"bind="192.168.0.51"port="45564"frequency="500"dropTim e="3000"/><Receiver className="org.apache.catalina.tribes.transport.nio.NioR eceiver"address="192.168.0.51"autoBind="100"port="4001"selectorTim eout="100"m axThreads="6"/><Sender className="org.apache.catalina.tribes.transport.Replicatio nTransmitter"><Transport className="org.apache.catalina.tribes.transport.nio.P ooledParallelSender"/></Sender><Interceptor classNam e="org.apache.catalina.tribes.group.intercept ors.TcpFailureDetector"/><Interceptor classNam e="org.apache.catalina.tribes.group.intercept ors.MessageDispatch15Interceptor"/></Channel><Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter= ".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.ht m;.*\.ht m l;.*\.css;.*\.txt;"/><ClusterListener className="org.apache.catalina.ha.session.JvmRoute SessionIDBinderListener"/><ClusterListener className="org.apache.catalina.ha.session.ClusterSe ssionListener"/></Cluster>3、修改tomcat2中的Cluster classNametomcat2找到<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>修改为<Cluster className="org.apache.catalina.ha.tcp.Sim pleTcpCluster"channelSendOptions="6"><Manager className="org.apache.catalina.ha.session.DeltaManager"expireSessionsOnShutdown="false"notifyListenersOnReplication="t rue"/><!--<Manager className="org.apache.catalina.ha.session.BackupManager" expireSessionsOnShutdown="false"notifyListenersOnReplication="t rue"m apSendOptions="6"/>--><Channel className="org.apache.catalina.tribes.group.GroupChannel"> <Membership className="org.apache.catalina.tribes.membership.M castService"address="228.0.0.5"bind="192.168.0.50"port="45564"frequency="500"dropTim e="3000"/><Receiver className="org.apache.catalina.tribes.transport.nio.NioR eceiver"address="192.168.0.50"autoBind="100"port="4000"selectorTim eout="100"m axThreads="6"/><Sender className="org.apache.catalina.tribes.transport.Replicatio nTransmitter"><Transport className="org.apache.catalina.tribes.transport.nio.P ooledParallelSender"/></Sender><Interceptor classNam e="org.apache.catalina.tribes.group.intercept ors.TcpFailureDetector"/><Interceptor classNam e="org.apache.catalina.tribes.group.intercept ors.MessageDispatch15Interceptor"/></Channel><Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter= ".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.ht m;.*\.ht m l;.*\.css;.*\.txt;"/><ClusterListener className="org.apache.catalina.ha.session.JvmRoute SessionIDBinderListener"/><ClusterListener className="org.apache.catalina.ha.session.ClusterSe ssionListener"/></Cluster>还需要在程序的web.xml里面</web-app>前面加入以下这句话<distributable/>session同步到这里设置完毕。

Nginx+tomcat集群并实现session共享(广播机制、redis两种方式)

Nginx+tomcat集群并实现session共享(广播机制、redis两种方式)

Nginx+tomcat集群并实现session共享(广播机制、redis 两种方式)本帖最后由小蜀哥哥于 2017-9-5 12:51 编辑简介:随着互联网的飞速发展,互联网的用户也飞速增加。

随之而来就是如何解决大量用户访问导致高并发的问题,倘若用单机版的tomcat在理想状态下能够承受的并发访问量大概为150到200左右,为了解决高并发就需要引入负载均衡技术。

负载均衡就是一个web服务器解决不了的问题可以通过多个web服务器来平均分担压力来解决,并将发过来的请求被平均分配到多个后台web服务器来处理,这样压力就被分解开来。

如:将同一个系统部署到多台tomcat服务器,每个tomcat服务器都可以独立提供服务——tomcat集群,并且通过负载均衡技术反向代理tomcat集群,这样既可提供系统的访问压力。

负载均衡技术有两种方式实现:(1) 硬件负载均衡——如F5 (2)软件负载均衡——如Nginx、Apache等,但是硬件负载均衡的成本比较大,所以一般都采用软件负载均衡。

而很多大型网站如京东、淘宝都采用Nginx负载均衡解决高并发问题,所有我们这里也采用Nginx实现负载均衡,反向代理tomcat集群。

一.Nginx+tomcat广播机制实现session共享1. 环境准备2. Nginx安装与启动(1) 解压Nginx压缩包(2) 双击nginx.exe启动Nginx,在浏览器输入http://localhost展示如下页面即表示安装成功3. Tomcat集群(1) 解压apache-tomcat-7.0.69.zip成两个tomcat1、tomcat2(2) 修改tomcat1的配置文件conf/server.xml1). 修改server的port端口为180052). 修改Connector的port端口为180803). 修改<Connector port="18009"protocol="AJP/1.3" redirectPort="8443" />4). 修改Engine添加jvmRoute="tomcat"5). 在<Engine>下添加如下配置文件[XML] 纯文本查看 复制代码01 02 03 04 05 06 07 08 09 10 1<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="8"><ManagerclassName="org.apache.catalina.ha.session.DeltaManager"expireSessionsOnShutdown="false"notifyListenersOnReplication="true"/><ChannelclassName="org.apache.catalina.tribes.group.GroupChannel"> <MembershipclassName="org.apache.catalina.tribes.membership.McastService" address="228.0.0.4" port="45564" frequency="500" dropTime="3000"/><ReceiverclassName="org.apache.catalina.tribes.transport.nio.NioReceiver" address="localhost" port="14000" autoBind="100" selectorTimeout="5000" maxThreads="6"/> <SenderclassName="org.apache.catalina.tribes.transport.ReplicationTransmitt er"><Transport1 12 13 14 15 16 17 18 19 className="org.apache.catalina.tribes.transport.nio.PooledParallelSe nder"/></Sender><InterceptorclassName="org.apache.catalina.tribes.group.interceptors.TcpFailureD etector"/><InterceptorclassName="org.apache.catalina.tribes.group.interceptors.MessageDisp atch15Interceptor"/></Channel><ValveclassName="org.apache.catalina.ha.tcp.ReplicationValve" filter=""/> <ValveclassName="org.apache.catalina.ha.session.JvmRouteBinderValve"/> <ClusterListenerclassName="org.apache.catalina.ha.session.JvmRouteSessionIDBinderLis tener"/><ClusterListenerclassName="org.apache.catalina.ha.session.ClusterSessionListener"/> </Cluster>(3) tomcat2操作同上,修改位置参照tomcat1,修改tomcat2的配置文件conf/server.xml1). 修改server 的port 端口为28005同tomcat1修改server 的port 端口2). 修改Connector 的port 端口为28080同tomcat1修改Connector 的port3). 修改<Connector port="28009"protocol="AJP/1.3" redirectPort="8443" />同tomcat1修改操作4). 修改Engine 添加jvmRoute="tomcat"同tomcat1该操作5). 在<Engine>下添加如下配置文件同tomcat1的该操作(4) 修改Nginx 安装目录下conf/nginx.conf 文件4. 创建Web项目并测试广播机制的session共享(1) 创建一个Web项目,名称为TestJQ(2) 编辑index.jsp的内容如下(3) 在WEB-INF下的web.xml中加入<distributable/>(4) 将该web项目分部复制到tomcat1和tomcat2的webapps 目录下(5) 分别修改tomcat1和tomcat2下web项目的index.jsp内容如下(6) 启动tomcat1和tomcat2(7) 在Nginx安装目录下,进入cmd命令模式执行如下命令(8) 测试,在浏览器输入http://localhost/TestJQ。

nginx-redis-tomcat7集群session共享

nginx-redis-tomcat7集群session共享

nginx-redis-tomcat7集群session共享一: 安装介质准备:(1)tomcat7(2)Nginx 及相关组件:(3)Redis 相关组件及jar包(根据个人习惯,在linux的根目录下建了一个tmp文件夹,所需介质全部放到该文件夹下)先确保linux系统上已安装有gcc及相关编译组件。

二: 安装redis1):进入到tmp目录下,解压redis的相关文件进行安装,# tar zxvf redis-2.8.23.tar.gz# cd redis-2.8.23#make# make install安装完成后在redis 的src 目录下有redis-benchmark、redis-check-aof、redis-check-dump redis-cli、redis-server 等几个可执行文件,其中redis-server 是redis server 的启动服务,redis-cli 可进入redis 客户端;此外,在解压后的文件夹中还有redis的配置文件redis.conf 。

可以在usr下建一个redis 目录,将上述可执行文件拷贝到该文件夹下。

2):测试redis是否安装成功a-启动redis 服务#./redis-server ,启动成功后看到如下界面Redis 的默认端口是6379 ,b-启动redis client 端进行测试#./redis-cli 启动redis 的客户端服务,出现如下界面,我们可以利用redis设置一个简单缓存进行测试:c-上述现象都正常说明redis安装没有问题,上述方式启动时使用的是默认配置,我们可以修改redis的配置文件,按照我们的要求进行修改;这里从别的地方截个图供参考:上述只是配置的一部分,可根据自己的要求进行配置修改。

修改完成后让redis使用我们修改的配置文件#./redis-server redis.conf (根据自定义文件启动加载配置)三: 安装Nginx1)先安装nignx 运行时依赖的zlib 及pcre进入temp目录下,解压zlib 和pcre 并进行配置安装(1)安装zlib# tar zxvf zlib-1.2.8.tar.gz# cd zlib-1.2.8# ./configure --prefix=/usr/local/zlib (可以不配置目录,安装到默认目录下) #make && make install(2)安装pcre# tar zxvf pcre-8.32.tar.gz# cd pcre-8.32# ./configure --prefix=/usr/local/pcre (可以不配置目录,安装到默认目录下) #make && make install2)安装Nginx# tar zxvf nginx1.4.0.tar.gz# cd nginx1.4.0# mkdir /usr/nginx (在usr目录下创建nginx的安装目录)# ./configure --prefix=/usr/nginx#make && make install3)配置Nginx#cd /usr/nginx/conf#vi nginx.conf配置参考如下:(可实现session共享和负载的基本配置)#user nobody;worker_processes 1;#error_log logs/error.log;#error_log logs/error.log notice;#error_log logs/error.log info;#pid logs/nginx.pid;events {worker_connections 1024;}http {include mime.types;default_type application/octet-stream;#log_format main '$remote_addr - $remote_user[$time_local] "$request" ' # '$status $body_bytes_sent "$http_referer" '# '"$http_user_agent" "$http_x_forwarded_for"';#access_log logs/access.log main;sendfile on;#tcp_nopush on;#keepalive_timeout 0;keepalive_timeout 65;gzip on;#配置负载的三个tomcat服务器upstream {# 这里还可以根据服务器压力配置权重,(注意tomcat访问端口)server 127.0.0.1:8088;server 127.0.0.1:8087;}#server {listen 9999; #nginx监听端口server_name ; #nginx服务所在主机charset utf-8;#access_log logs/host.access.log main;#location / {root html;index index.html index.htm;proxy_pass ; #代理三个tomcat服务器集群地址proxy_set_header X-Real-IP $remote_addr;client_max_body_size 100m;}#error_page 404 /404.html;# redirect server error pages to the static page /50x.html#error_page 500 502 503 504 /50x.html;location = /50x.html {root html;}# proxy the PHP scripts to Apache listening on 127.0.0.1:80 ##location ~ \.php$ {# proxy_pass http://127.0.0.1;#}# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000##location ~ \.php$ {# root html;# fastcgi_pass 127.0.0.1:9000;# fastcgi_index index.php;# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;# include fastcgi_params;#}# deny access to .htaccess files, if Apache's document root # concurs with nginx's one##location ~ /\.ht {# deny all;#}}# another virtual host using mix of IP-, name-, and port-based configuration ##server {# listen 8000;# listen somename:8080;# server_name somename alias another.alias;# location / {# root html;# index index.html index.htm;# }#}# HTTPS server##server {# listen 443;# server_name localhost;# ssl on;# ssl_certificate cert.pem;# ssl_certificate_key cert.key;# ssl_session_timeout 5m;# ssl_protocols SSLv2 SSLv3 TLSv1;# ssl_ciphers HIGH:!aNULL:!MD5;# ssl_prefer_server_ciphers on;# location / {# root html;# index index.html index.htm;# }#}}四: 安装tomcat在usr 目录下准备两个tomcat,分别为redis-tomcat701,redis-tomcat702,并将test.jsp页面部署到webapp下。

Nginx+Tomcat+Redis实现负载均衡、资源分离、session共享

Nginx+Tomcat+Redis实现负载均衡、资源分离、session共享

Nginx+Tomcat+Redis实现负载均衡、资源分离、session共享CentOS安装Nginx/CentosServer/www/2013/0910/1593.htmlCentOS安装Tomcat/zhuying_linux/article/details/6583096CentOS安装Redis/zhuhongbao/archive/2013/06/04/3117997.html多个Tomcat负载均衡实例:可在服务器上复制出多个Tomcat分别修改Tomcat的http访问端口(默认为8080端口)Shutdown端口(默认为8005端口)JVM启动端口(默认为8009端口)1、Nginx实现多Tomcat负载均衡Tomcat服务192.168.1.177:8001192.168.1.177:8002192.168.1.177:8003Nginx配置upstream mytomcats {server 192.168.1.177:8001;server 192.168.1.177:8002;server 192.168.1.177:8003;}server {listen 80;server_name ;location ~* \.(jpg|gif|png|swf|flv|wma|wmv|asf|mp3|mmf|zip|rar)$ { root /web/www/html/;}location / {proxy_pass http://mytomcats;proxy_redirect off;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;client_max_body_size 10m;client_body_buffer_size 128k;proxy_connect_timeout 90;proxy_send_timeout 90;proxy_read_timeout 90;proxy_buffer_size 4k;proxy_buffers 4 32k;proxy_busy_buffers_size 64k;proxy_temp_file_write_size 64k;}}upstream指定负载均衡组,指定其Tomcat成员location ~* \.(jpg|gif|……实现了静态资源分离。

基于Nginx+Tomcat集群的Session共享

基于Nginx+Tomcat集群的Session共享

基于Nginx+Tomcat集群实现Session共享测试环境本文档测试环境是在Windows7环境下;Nginx1.5.3-forWindows;3个Tomcat7,部署在同一个Windows环境下。

Java环境:JDK1.7Nginx安装Nginx介绍Nginx(发音同engine x)是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。

其特点是占有内存少,并发能力强,事实上Nginx的并发能力确实在同类型的网页伺服器中表现较好。

Nginx官方网址为:/;Windows下安装Nginx的Windows版本下载地址为:/en/download.html。

本文档采用的1.5.3版本。

2、目录结构Nginx-|_ conf配置目录|_ contrib|_ docs 文档目录|_ logs 日志目录|_ temp 临时文件目录|_ html 静态页面目录|_ nginx.exe 主程序window下安装Nginx极其简单,解压缩到一个无空格的英文目录即可(个人习惯,担心中文出问题),双击nginx启动,这里我安装到:D:\Server目录,下面涉及到的Tomcat也安装在此目录。

Linux下安装Nginx的Linux版本下载地址为:/en/linux_packages.html#stable。

Tomcat安装Tomcat的安装大家比较熟悉,Tomcat官方网站为:/。

本文档采用的是Tomcat7.0.40绿色版,解压之后即可用。

Windows下安装Windows平台下我将Tomcat安装到D:Server目录。

一共安装了5个Tomcat。

分别命名为:Tomcat7-1、Tomcat7-2、Tomcat7-3、Tomcat7-4和Tomcat7-5。

安装好Nginx和Tomcat后的目录结构如下:Linux下安装Linux下安装tomcat同windows下类似,利用tar xvfz apache-tomcat-1.7.0.40.tar.gz命令解压到相应的目录下即可。

同一Tomcat不同项目如何实现session共享【面试+工作】

同一Tomcat不同项目如何实现session共享【面试+工作】

同一Tomcat不同项目如何实现session共享【面试+工作】同一Tomcat不同项目如何实现session共享【面试+工作】需求:现A、B两个项目,运行于同一tomcat下,要求在A项目下登录后,B项目中同样获取登录权限,支持同一用户重复登录。

分析:即要实现A、B项目的session共享。

如何共享?•A项目session创建后、B项目则不创建新的session;•B项目能实时获取A项目的session;•需要有一块共用空间保存A项目的session。

思路:•A项目中进行session管理,即所有的登录操作均在A中进行;•使用cookie传递session信息给客户端,避免创建多个session;•维护共用空间中的session的生命周期。

技术支持:•每一个web应用程序都有唯一一个ServletContext实例对象,被该web应用下面的每一个servlet共享。

tomcat支持不同项目的ServletContext实例共享,如此就可以让ServletContext对象充当储存session的公共空间,而不需要序列化或数据库存储,从而节约资源;•服务器一般采用session机制实现登录,当通过getSession()获取session后服务端会将此session的id作为JSESSIONID值保存在cookie中返回给客户端,客户端通过JSESSIONID来与服务器的session匹配来找到唯一的用户。

sessioon保存于服务端,cookie保存于客户端。

当用户于A项目登录后我们需要创建一个全局的cookie 记录A项目的session id,以便在访问B项目时获取全局cookie的session id来找到A项目中对应的session,从而完成session共享。

实现:1.不同项目ServletContext共享修改tomcat的service.xml文件此处为了简便•BudgetSystem充当A项目•mate充当B项目其中项目mate配置了crossContext=”true”属性,即代表可在此项目中可调用另一个WEB应用的ServletContext对象2.管理A项目session的生命周期web.xml配置session监听器复制一份session存进内存中,手动来管理session的生命周期3.A项目中进行登录,并保存信息进session在项目A中获取session,并存入一些测试属性,当并将此session id以键值对形式存入cookie中,创建一个作用域全局的cookie(1.此处使用其他key均可,使用JSESSIONID是为了访问B项目后在访问A项目getSession时不需要重新创建session,节省资源,2.设置全局是为了跨项目也能访问到)4.重写项目B中获取session的方法,使其不自动创建,而是使用A项目的session获取A项目中的session集合,通过全局的cookie中的session id即可找到A中对应的session5.项目B中获取session,操作其中属性6.查看结果A调用完成后客户端会存在2个cookie,一个自动创建,一个人创建访问B项目时即可携带全局的cookie查看打印结果:调用A项目调用B项目再调用A项目由上可以看出,调用A,A创建了session,并存入属性值。

NginxSession共享问题解决方案解析

NginxSession共享问题解决方案解析

NginxSession共享问题解决⽅案解析这篇⽂章主要介绍了Nginx Session共享问题解决⽅案解析,⽂中通过⽰例代码介绍的⾮常详细,对⼤家的学习或者⼯作具有⼀定的参考学习价值,需要的朋友可以参考下Nginx解决Session共享问题: 1.nginx或者haproxy做的负载均衡,⽤nginx做的负载均衡可以添加ip_hash这个配置;⽤haproxy做的负载均衡可以⽤balance source这个配置,从⽽使⽤⼀个IP的请求发到同⼀个服务器; 2.利⽤数据库同步session; 3.利⽤cookie同步session数据,但是安全性差,http请求都需要带参增加了带宽消耗; 4.Tomcat配置session共享; 5利⽤session集群存放Redis;1:创建⼀个⼯程,启动两个Tomcat2:编写⼀个servlet测试package com.zn.servlet;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;@WebServlet("/nginxSessionServlet")public class SessionIPServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {System.out.println("当前请求端⼝:"+request.getLocalPort());String action=request.getParameter("action");//向Session中存放⼀个数据if(action.equals("setSession")){request.getSession().setAttribute("username","zhangsan");}else if(action.equals("getSession")){response.getWriter().write((String)request.getSession().getAttribute("username"));}}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request,response);}}3、没有Nginx的访问效果展⽰分别访问8080和80814.配置nginx.conf⽂件upstream myserver{ip_hash;server 127.0.0.1:8080;server 127.0.0.1:8081;}server{listen 81;server_name ;location / {root html;proxy_pass http://myserver;index index.html index.htm;}}5.再次访问⽅法⼆、利⽤spring-session+Redis实现session共享1:导⼊依赖<!--spring boot 与redis应⽤基本环境配置 --><!-- https:///artifact/org.springframework.boot/spring-boot-starter-redis --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-redis</artifactId></dependency><!--spring session 与redis应⽤基本环境配置,需要开启redis后才可以使⽤,不然启动Spring boot会报错 --><dependency><groupId>org.springframework.session</groupId><artifactId>spring-session-data-redis</artifactId></dependency> 2:创建controller测试@RestControllerpublic class SessionController {@RequestMapping("/setSession")public String setSession(HttpServletResponse response, HttpServletRequest request) throws IOException {request.getSession().setAttribute("username","wang");return "success";}@RequestMapping("/getSession")public String getSession(HttpServletRequest request,HttpServletResponse response){String username = (String) request.getSession().getAttribute("username");return username;}} 3:application.properties⽂件server.port=8082#server.port=8083#redis配置spring.redis.password: wang2003 4:启动项⽬测试结论:该⽅案配置简单,数据安全且稳定,效率⾼,被普遍使⽤;注意:在Redis中删除这个数据包,8082和8083端⼝都get不到session了,说明了session没有存在在JVM中,⽽是转存在Redis中;以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

Nginx+Tomcat+Session 高性能群集搭建

Nginx+Tomcat+Session 高性能群集搭建

【Nginx+Tomcat+Session 高性能群集搭建】随着IT行业的发展,linux服务器在企业中应用广泛,人们对linux上的应用服务要求也越来越高,早先的apache服务器、apache有优点也有不足,apache渐渐不能满足人们的要求,目前nginx被大量采用做高性能web服务器,无论是个人网站还是大型门户网站都在使用nginx作为 web搭建web 服务器的首选。

接下来我们亲自来搭建一个属于自己的高性能web服务器,并且带故障自动转移的群集、和负载均衡服务器。

一、Nginx+Tomcat+Session 高性能群集服务搭建,本文采用目前主流版本搭建,搭建环境及版本如下列表:系统版本:Centos 5.3 64位系统Nginx版本为:nginx-0.8.54.tar.gzJdk版本为:1.6.0_18_64Tomcat版本为:Apache Tomcat/6.0.30其他相似版本也可以!安装服务所需的包如下下载路径:本网站集成部分下载:jdk请到以下网站下载:请选择自己系统版本的jdk。

https:///is-bin/INTERSHOP.enfinity/WFS/CDS-CDS_Developer-Site/en_US/-/USD/Vi ewFilteredProducts-SingleVariationTypeFilter【Tomcat下载地址】/download/apache-tomcat-6.0.30.tar.gz【Nginx-0.8.54 下载】/download/nginx-0.8.54.tar.gz/download/pcre-8.01.tar.gz二、首先安装Nginx:安装nginx之前需要安装pcre包和zlib以支持重写,正则以及网页压缩等等】把所需的包下载到/usr/src下【根据自己的习惯,路径可以改变】(1)首先安装pcre:cd /usr/src &&tar xzf pcre-8.01.tar.gz &&cd pcre-8.01 && ./configure--prefix=/usr/local/pcre &&make &&make install(2)、然后再安装nginx :【给nginx安装jvmroute模块】cd /usr/src &&svn checkout/svn/trunk/nginx-upstream-jvm-route-read-only && useradd www && tar xzf nginx-0.8.54.tar.gz &&cd nginx-0.8.54 && patch -p0< ../nginx-upstream-jvm-route-read-only/jvm_route.patch && ./configure--prefix=/usr/local/nginx-0.8 --with-http_stub_status_module --with-openssl=/usr/--with-pcre=/usr/src/pcre-8.01 --add-module=../nginx-upstream-jvm-route-read-only --us er=www --group=www &&make &&make install【nginx注意* –with-pcre=/usr/src/pcre-8.01指向的是源码包解压的路径,而不是安装的路径,否则会报make[1]: *** [/usr/local/pcre/Makefile] Error 127 错误】Nginx 安装完毕!我们先不着急nginx配置文件的配置,先来修改tomcat配置文件:三、Tomcat安装配置:(1)、将所需的包下载至/usr/src 目录;首先安装jdk:chmod o+x jdk* && ./jdk* ;程序包会提示按回车键,我们根据提示安装即可,解压完毕,会在当前目录生成 jdk1.6.0_18 这个文件夹,mkdir -p /usr/java && mv jdk1.6.0_18 /usr/java/下vi /etc/profile 最后面加入以下语句:export JAVA_HOME=/usr/java/jdk1.6.0_18export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/libexport PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOMR/binsource /etc/profile //使环境变量马上生效java –version //查看java版本,显示版本是1.6.0_18,并且是64位的证明安装成功!【 Java HotSpot(TM) 64-Bit Server VM (build 16.0-b10, mixed mode) 】cd /usr/src && tar xzf apache-tomcat-6.0.30.tar.gz解压完成执行:mv apache-tomcat-6.0.30 /usr/local/tomcat_1 && cp /usr/local/tomcat_1 /usr/local/tomcat_2 -r【移动到/usr/local下并重命名为tomcat_1文件夹,并cp一个tomcat_2】部署两个Tomcat群集做负载均衡用!(2)、设置tomcat的java变量cd /usr/local/tomcat_1/bin/ && vi setenv.sh 创建一个setenv.sh脚本文件,添加如下语句即可JAVA_HOME=/usr/java/jdk1.6.0_18JAVA_JRE=/usr/java/jdk1.6.0_18/jre并且拷贝setenv.sh文件到tomcat_2/bin/下:cp -p /usr/local/tomcat_1/bin/setenv.sh /usr/local/tomcat_2/bin 下即可!保存退出检查两个tomcat下bin目录的*.sh 文件是否有可执行权限,如果没有则进入到相应的目录执行chmod o+x *.sh 即可!给两个tomcat分别创建不同的目录如下:mkdir -p /usr/webapps/{www_1,www_2}(3)、设置Tomcat的 server.xml文件:【以下是我的tomcat配置文件具体内容,本想已附件的形式发的,本博客目前还不支持附件功能,重要修改的地方供大家参考,如果把所有配置都粘贴在这里,显示有问题,所有用了两个web链接!这样一来部分解释就产生了影响。

Nginx反向代理多个Tomcat实现负载和session共享

Nginx反向代理多个Tomcat实现负载和session共享

Nginx反向代理多个Tomcat实现负载和session共享一、准备工作:1、安装服务所需的工具,把开发库和开发工具两个包用yum安装上就行了。

# yum groupinstall "Development Libraries" "Development Tools"2、安装nginx之前还要安装pcre-devel包# yum install pcre-devel二、安装Nginx1、Nginx下载地址:这个是nginx的官方网站。

为了实现session共享还得下载nginx的扩展模块nginx-upstream-jvm-route-master,下载地址:https:///tbje/nginx-upstream-jvm-route要想实现后面Tomcat的健康检测,还得下载模块nginx_upstream_check_module-master 下载地址:https:///yaoweibin/nginx_upstream_check_module/zip/master在这里所用的软件默认下载到/usr/local/src目录中2、安装之前要给nginx添加个用户:# groupadd nginx# useradd -g nginx nginx3、安装Nignx,并加入所需的扩展模块view sourceprint?01.# cd /usr/local/src02.解压那两个扩展模块包03.# unzip nginx-upstream-jvm-route-master.zip04.# unzip nginx_upstream_check_module-master.zip05.之后再来安装nginx06.# tar zxvf nginx-1.2.5.tar.gz07.# cd nginx-1.2.508.下面对nginx加入扩展模块09.# patch -p0< ../nginx-upstream-jvm-route-master/jvm_route.patch10.# patch -p1< ../nginx_upstream_check_module-master/check1.2.2+.patch (在nginx 1.2以上的版本都要用这个patch不然后会报错的)11.# ./configure --prefix=/usr/local/nginx \12.&gt; --user=nginx --group=nginx --with-http_ssl_module \13.&gt; --with-http_flv_module--with-http_stub_status_module \14.&gt; --with-http_gzip_static_module--http-proxy-temp-path=/var/tmp/nginx/proxy/ \15.&gt; --with-pcre \16.&gt;--add-module=/usr/local/src/nginx_upstream_check_module-m aster \17.&gt;--add-module=/usr/local/src/nginx-upstream-jvm-route-mast er18.如果没有什么报错的话在结尾处会看如下所示的内容:19.configuring additional modules20.addingmodule in/usr/local/src/nginx_upstream_check_module-master21.checking for ngx_http_upstream_check_module ... found22.+ ngx_http_upstream_check_module was configured23.addingmodule in/usr/local/src/nginx-upstream-jvm-route-master24.+ ngx_http_upstream_jvm_route_module was configured25.checking for PCRE library ... found26.checking for PCRE JIT support ... not found27.checking for OpenSSL library ... found28.checking for zlib library ... found29.creating objs/Makefile30.之后就可以make和make install了31.# make32.# make install这样Nginx就安装好了,下面给nginx制作一个启动脚本view sourceprint?001.# vim /etc/init.d/nginx002.内容如下:003.#!/bin/sh004.# nginx - this script starts and stops the nginx daemon 005.# chkconfig: - 85 15006.# description: Nginx is an HTTP(S) server, HTTP(S) reverse \007.# proxy and IMAP/POP3 proxy server008.# processname: nginx009.# config: /etc/nginx/nginx.conf010.# config: /etc/sysconfig/nginx011.# pidfile: /var/run/nginx.pid012.# Source function library.013.. /etc/rc.d/init.d/functions014.# Source networking configuration.015.. /etc/sysconfig/network016.# Check that networking is up.017.[ "$NETWORKING"= "no"]&& exit0018.nginx="/usr/local/nginx/sbin/nginx"019.prog=$(basename $nginx)020.NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf" 021.[ -f /etc/sysconfig/nginx ]&& . /etc/sysconfig/nginx 022.lockfile=/var/lock/subsys/nginx023.make_dirs() {024.# make required directorieser=`nginx -V 2&gt;&1 | grep"configure arguments:"| sed's/[^*]*--user=\([^ ]*\).*/\1/g' -` 026.options=`$nginx -V 2&gt;&1 | grep'configure arguments:'`027.for opt in$options; do028.if[ `echo$opt | grep'.*-temp-path'` ]; then029.value=`echo$opt | cut-d "="-f 2`030.if[ ! -d "$value"]; then031.# echo "creating" $value032.mkdir-p $value && chown-R $user $value033.fi034.fi035.done036.}037.start() {038.[ -x $nginx ] || exit5039.[ -f $NGINX_CONF_FILE ] || exit6040.make_dirs041.echo-n $"Starting $prog: "042.daemon $nginx -c $NGINX_CONF_FILE043.retval=$?044.echo045.[ $retval -eq0 ]&& touch$lockfile046.return$retval047.}048.stop() {049.echo-n $"Stopping $prog: "050.killproc $prog -QUIT051.retval=$?052.echo053.[ $retval -eq0 ]&& rm-f $lockfile 054.return$retval055.}056.restart() {057.configtest || return$?058.stop059.sleep1060.start061.}062.reload() {063.configtest || return$?064.echo-n $"Reloading $prog: "065.killproc $nginx -HUP066.RETVAL=$?067.echo068.}069.force_reload() {070.restart071.}072.configtest() {073.$nginx -t -c $NGINX_CONF_FILE 074.}075.rh_status() {076.status $prog077.}078.rh_status_q() {079.rh_status &gt;/dev/null 2&gt;&1 080.}081.case"$1"in082.start)083.rh_status_q && exit0084.$1085.;;086.stop)087.rh_status_q || exit0088.$1089.;;090.restart|configtest)091.$1092.;;093.reload)094.rh_status_q || exit7095.$1096.;;097.force-reload)098.force_reload099.;;100.status)101.rh_status102.;;103.condrestart|try-restart)104.rh_status_q || exit0105.;;106.*)107.echo$"Usage: $0{start|stop|status|restart|condrestart|try-restart|reload |force-reload|configtest}"108.exit2109.esac110.111.保存后退出,并给它一个执行的权限。

tomcat集群-共享session

tomcat集群-共享session

集群–负载均衡集群和负载均衡是两个概念,对web应用程序来说集群就是把几个web应用服务器组合在一起,任何其中一台服务器都可以处理某一用户的一次访问某一程序的请求,所有服务器间是可以相互通信的,正在为用户服务的一台服务器突然宕机后,其余服务器中的一台可以接着继续为用户服务;集群虽然有了,但有个问题,那就是所有用户的请求不能都让一台服务器处理,一台服务器都达到最大压力极限了,而其他服务器还闲着是不可以的,负载均衡就是控制哪台服务器来处理用户的请求。

负载均衡常用的软件有apache、nginx、lvs等,硬件有F5等。

集群需要实现的一个功能就是session共享。

tomcat集群tomcat自带的文档中有详细的说明(%tomact_home%/docs/cluster-howto.html)tomcat集成方案:apache+tomcat;ngnix+tomcat;lvs+ngnix+tomcat;tomcat集群实现session共享的方法:1.simple tcp cluster;(tomcat5以上版本自带的基于tcp广播技术的集群)2.使用memcached共享session;3.session中的信息保存到客户端cookie中;4.……等simple tcp cluster这种方法比较简单,只需修改server.xml配置文件即可。

步骤一:简单配置方法:最简单的配置只需要将节点中注释掉的下面这句取消注释即可:<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/> 使用这样方法配置的集群会将Session同步到所在网段(Tomcat集群的默认组播地址就是228.0.0.4,默认端口为:45564)上的所有配置了集群属性的实例上,也就是说如果该广播地址下的所有Tomcat实例都会共享Session,那么假如有几个互不相关的集群,就可能造成Session复制浪费。

Nginx构建Tomcat集群的操作方法

Nginx构建Tomcat集群的操作方法

Nginx构建Tomcat集群的操作⽅法⽬录⼀、准备服务器⼆、配置上游服务器三、负载均衡策略-轮训四、负载均衡策略-加权轮训nginx是⼀款⾃由的、开源的、⾼性能的HTTP服务器和反向代理服务器;同时也是⼀个IMAP、POP3、SMTP代理服务器;nginx可以作为⼀个HTTP服务器进⾏⽹站的发布处理,另外nginx可以作为反向代理进⾏负载均衡的实现。

⼀、准备服务器准备1台Nginx服务器和3台Tomcat服务器,并修改3台服务器中Tomcat的默认访问页⾯,⽤数字标记页⾯所处的服务器。

vim /usr/local/tomcat-api/webapps/ROOT/index.jsp⼆、配置上游服务器在nginx.conf⽂件中配置上游服务器# 配置上游服务器,每⼀个IP都对应⼀台服务器upstream tomcats {server 192.168.72.132:8080;server 192.168.72.133:8080;server 192.168.72.134:8080;}server {listen 80;server_name localhost;location / {proxy_pass http://tomcats;}}注:proxy_pass为代理转发配置。

三、负载均衡策略-轮训完成上述配置后,启动Nginx,⽤浏览器访问Nginx服务器的80端⼝,反复刷新页⾯,会发现请求依次被转发到了不同的服务器。

这其实是Nginx负载均衡默认的策略:轮训,通过轮训策略,可以将请求平均分配给各个服务器处理。

四、负载均衡策略-加权轮训根据不同服务器的性能,给各个服务器增加权重,⽐如某个服务器硬件配置⽐较好,就可以给该服务器分配更多的请求,同理分配⽐较少的请求给硬件配置较差的服务器。

配置如下:upstream tomcats {# weight的值越⼤,分配到的请求就会越多server 192.168.72.132:8080 weight=1;server 192.168.72.133:8080 weight=2;server 192.168.72.134:8080 weight=5;}server {listen 80;server_name localhost;location / {proxy_pass http://tomcats;}}到此这篇关于Nginx构建Tomcat集群的⽂章就介绍到这了,更多相关Nginx Tomcat集群内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!。

nginx session共享设置

nginx session共享设置

nginx session共享设置Session一般都指时域。

在计算机术语中,Session是指一个终端用户与交互系统进行通信的时间间隔,通常指从注册进入系统到注销退出系统之间所经过的时间以及如果需要的话,可能还有一定的操作空间。

通常情况下能把session改成cookie,就能避开session的一些弊端,在从前看的一本J2EE的书上,也指明在集群系统中不能用session,否则惹出祸端来就不好办。

如果系统不复杂,就优先考虑能否将session去掉,改动起来非常麻烦的话,再用下面的办法。

应用服务器自行实现共享已知的,php可以用数据库或memcached来保存session,从而在php本身建立了一个session集群,用这样的方式可以令 session 保证稳定,即使某个节点有故障,session也不会丢失,适用于较为严格但请求量不高的场合。

但是它的效率是不会很高的,不适用于对效率要求高的场合。

以上两个办法都跟nginx没什么关系,下面来说说用nginx该如何处理:ip_hashnginx中的ip_hash技术能够将某个ip的请求定向到同一台后端,这样一来这个ip下的某个客户端和某个后端就能建立起稳固的session,ip_hash是在upstream配置中定义的:upstream backend{server 127.0.0.1:8001;server 127.0.0.1:8002;ip_hash;}ip_hash是容易理解的,但是因为仅仅能用ip这个因子来分配后端,因此ip_hash是有缺陷的,不能在一些情况下使用:1/ nginx不是最前端的服务器。

ip_hash要求nginx一定是最前端的服务器,否则nginx得不到正确ip,就不能根据ip作hash。

譬如使用的是squid为最前端,那么nginx取ip时只能得到squid的服务器ip地址,用这个地址来作分流是肯定错乱的。

2/ nginx的后端还有其它方式的负载均衡。

Tomcat实现session共享(session会话复制)

Tomcat实现session共享(session会话复制)

Tomcat实现session共享(session会话复制)⼀、如何保持session会话⽬前,为了使web能适应⼤规模的访问,需要实现应⽤的集群部署。

集群最有效的⽅案就是负载均衡,⽽实现负载均衡⽤户每⼀个请求都有可能被分配到不固定的服务器上,这样我们⾸先要解决session的统⼀来保证⽆论⽤户的请求被转发到哪个服务器上都能保证⽤户的正常使⽤,即需要实现session的共享机制。

在集群系统下实现session统⼀的有如下⼏种⽅案:1、请求精确定位:session sticky,例如基于访问ip的hash策略,即当前⽤户的请求都集中定位到⼀台服务器中,这样单台服务器保存了⽤户的session登录信息,如果宕机,则等同于单点部署,会丢失,会话不复制。

2、session复制共享:session replication,如tomcat⾃带session共享,主要是指集群环境下,多台应⽤服务器之间同步session,使session保持⼀致,对外透明。

如果其中⼀台服务器发⽣故障,根据负载均衡的原理,调度器会遍历寻找可⽤节点,分发请求,由于session 已同步,故能保证⽤户的session信息不会丢失,会话复制,。

此⽅案的不⾜之处:必须在同⼀种中间件之间完成(如:tomcat-tomcat之间).session复制带来的性能损失会快速增加.特别是当session中保存了较⼤的对象,⽽且对象变化较快时, 性能下降更加显著,会消耗系统性能。

这种特性使得web应⽤的⽔平扩展受到了限制。

Session内容通过⼴播同步给成员,会造成⽹络流量瓶颈,即便是内⽹瓶颈。

在⼤并发下表现并不好3、基于cache DB缓存的session共享基于 memcache/redis缓存的 session 共享即使⽤cacheDB存取session信息,应⽤服务器接受新请求将session信息保存在cache DB中,当应⽤服务器发⽣故障时,调度器会遍历寻找可⽤节点,分发请求,当应⽤服务器发现session不在本机内存时,则去cacheDB中查找,如果找到则复制到本机,这样实现session共享和⾼可⽤。

使用Tomcat基于redis的session共享机制集群部署

使用Tomcat基于redis的session共享机制集群部署

使⽤Tomcat基于redis的session共享机制集群部署常见的session集群⽅案:session复制和session共享Session复制:指session信息会在集群节点之间复制,每个节点服务上都会有相同的session信息;主要是实现后端多个节点的冗余功能。

但是node之间通信频繁,响应速度有影响,多并发,⾼频发操作的情况下,性能存在严重问题;Session共享:通俗来说就是⼀个浏览器对应多个web服务时,服务端的session数据需要共享【集群环境】因为是在个⼈虚机模拟,资源有限,故tomcat和redis环境复⽤(Ps:软件环境需要的话,可以找到博客左边的联系⽅式)软件环境:jdk1.8.0、redis-5.0.3.tar.gz、apache-tomcat-8.0.50.tar.gz、redisson-tomcat-8-3.12.1.jar、redisson-all-3.12.1.jarNginx代理端:192.168.109.100Tomcat_node1/redis服务: 192.168.109.101Tomcat_node2 :192.168.109.102【集群部署】部署redis环境#tar xvf redis-5.0.3.tar.gz#cd redis-5.0.3#make#cp redis.conf /etc/#cd src#cp redis-cli redis-server redis-sentinel /usr/sbin/打开redis配置⽂件/etc/redis.conf,修改两个配置项的值为如下内容:#vim /etc/redis.confbind 0.0.0.0daemonize yes最后,启动redis服务即可#/usr/sbin/redis-server /etc/redis.conf【部署tomcat环境】⾸先部署jdk环境#mkdir /usr/java#tar zxvf jdk1.8.0_131.tar.gz -C /usr/java/#vim /erc/profileexport JAVA_HOME=/usr/java/jdk1.8.0_131export PATH=$PATH:$JAVA_HOME/binexport CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$CLASSPATH#source /etc/profile#tar zxvf apache-tomcat-8.0.50.tar.gz -C /usr/local/#mv /usr/local/apache-tomcat-8.0.50/ /usr/local/tomcat8⽬前为⽌tomcat部署完毕,接下来整合tomcat与redis实现session共享下载完毕之后将两个jar包解压到/usr/local/tomcat8/lib/⽬录下⾯#mv redis-sson-al-3.12.1.jar redisson-tomcat-8-3.12.1.jar /usr/local/tomcat8/lib#jar redis-sson-al-3.12.1.jar#jar redisson-tomcat-8-3.12.1.jar增加RedissonSessionManager配置# vim /usr/local/tomcat8/conf/context.xml<Manager className="org.redisson.tomcat.RedissonSessionManager"configPath="${catalina.base}/conf/redisson.json" readMode="REDIS" updateMode="DEFAULT"/>#vim /usr/local/tomcat8/conf/redisson.json{"singleServerConfig":{"idleConnectionTimeout":10000,"connectTimeout":10000,"timeout":3000,"retryAttempts":3,"retryInterval":1500,"password":null,"subscriptionsPerConnection":5,"clientName":null,"address": "redis://127.0.0.1:6379", #这⾥的IP地址如果是将redis和tomcat放在⼀起就写127.0.0.1,如果是分离部署的话,就写redis所在的主机IP "subscriptionConnectionMinimumIdleSize":1,"subscriptionConnectionPoolSize":50,"connectionMinimumIdleSize":32,"connectionPoolSize":64,"database":0,"dnsMonitoringInterval":5000},"threads":0,"nettyThreads":0,"codec":{"class":"org.redisson.codec.FstCodec"},"transportMode":"NIO"}最后⼀步就是写⼀个⽤于访问tomcat的测试页⾯#vim /usr/local/tomcat8/webapps/ROOT/testsession.jsp<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%String path = request.getContextPath();String basePath = request.getScheme() + "://"+ request.getServerName() + ":" + request.getServerPort()+ path + "/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>Welcome to visit tomcat1</title></head><body><center><h1>Welcome to visit tomcat1</h1></center><center><h3>sessionId:</h3><%=session.getId()%><h3>session创建时间:</h3><%=session.getCreationTime()%><center></body></html>重启tomcat服务让配置⽣效即可# /usr/local/tomcat8/bin/startup.sh【测试】在这⾥我们可以看到tomcat测试页⾯可以正常访问,登录redis客户端,我们发现,redis已经⽣成了session信息;配置第⼆个tomcat实例的话,按照上述操作步骤即可,需要注意的是tomcat测试页⾯要保证与109.101不冲突即可另外这⾥的redisson.json配置指定109.101上即可,因为之前将redis部署在了109.101上,此时的109.102不需要在安装redis,直接指定redis的IP即可[root@hostname-109102 lib]# cat /usr/local/tomcat8/conf/redisson.json{"singleServerConfig":{"idleConnectionTimeout":10000,"connectTimeout":10000,"timeout":3000,"retryAttempts":3,"retryInterval":1500,"password":null,"subscriptionsPerConnection":5,"clientName":null,"address": "redis://192.168.109.101:6379","subscriptionConnectionMinimumIdleSize":1,"subscriptionConnectionPoolSize":50,"connectionMinimumIdleSize":32,"connectionPoolSize":64,"database":0,"dnsMonitoringInterval":5000},"threads":0,"nettyThreads":0,"codec":{"class":"org.redisson.codec.FstCodec"},"transportMode":"NIO"}【Nginx】#tar zxvf nginx-1.14.2.tar.gz -C /usr/src/# cd /usr/src/nginx-1.14.2/#./configure \--user=www \--group=www \--prefix=/usr/local/nginx \--sbin-path=/usr/local/nginx/sbin/nginx \--conf-path=/usr/local/nginx/conf/nginx.conf \--error-log-path=/usr/local/nginx/logs/error.log \--http-log-path=/usr/local/nginx/logs/access.log \--pid-path=/var/run/nginx.pid \--lock-path=/var/lock/subsys/nginx \--with-http_stub_status_module \--with-http_ssl_module \--with-http_gzip_static_module \--with-pcre# make# make install# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/# vim /usr/local/nginx/conf/nginx.confuser www;worker_processes 8;events {worker_connections 65536;}http {include mime.types;default_type application/octet-stream;sendfile on;keepalive_timeout 65;upstream tomcat {server 192.168.109.101:8080 weight=1;server 192.168.109.102:8080 weight=1;}server {listen 80;server_name localhost;location / {proxy_pass http://tomcat;}error_page 500502503504 /50x.html;location = /50x.html {root html;}location ~ \.php$ {root html;fastcgi_pass 127.0.0.1:9000;fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name;include fastcgi_params;}}}nginx -s reload #重启nginxNginx配置完毕之后,通过访问192.168.109.100nginx代理端即可均衡后端两台tomcat,不停的刷新会轮训切换两个tomcat页⾯,但是session值并没有发⽣改变,⽽且都相同。

【黑马程序员】关于Nginx+tomcat服务器配置性能调优

【黑马程序员】关于Nginx+tomcat服务器配置性能调优

【黑马程序员】关于Nginx+tomcat服务器配置性能调优前言在项目功能完成后,项目部署到服务器是非常重要的一环。

而在部署过程中将各个参数调整对于性能的提升是非常明显的。

这样既可以节约硬件成本,又可以将相应时间缩短,又可以提高服务器的稳定性,可谓是一举三得。

服务器的优化是非常复杂的过程,主要是几个方面,服务器的安全提升、服务器的性能调优等等。

单说性能优化,这关乎到语言的选择,框架的选择,服务器(linux/freebsd)等等的选择,而我们学习的是java语言,我们知道,单点tomcat在不使用nginx的情况下,能承载的最多也就是200-300的并发量,而加上了nginx之后,能大幅度提升服务器的并发承载量,不仅仅是因为nginx可以做负载均衡(load-banlance),更重要的是nginx可以让请求进行排队,而不是将压力赋予给tomcat,这样tomcat可以更加专注地完成业务操作,从而提高性能。

今天我们就来讲讲服务器最基本的参数调整提高服务器的性能– tomcat+nginx服务器的选择首先,我们来分析一下服务器的选择,看一看大公司是使用什么系统来进行部署,好的操作系统能提高好的性能、稳定性和安全性,而这些对大型网站的性能、安全性和稳定性都是至关重要的。

淘宝网(阿里巴巴): Linux操作系统+ Web 服务器:Apache新浪:FreeBSD + Web 服务器:ApacheYahoo:FreeBSD + Web 服务器:自己的Google: 部分Linux + Web 服务器:自己的百度:Linux + Web 服务器: Apache网易:Linux + Web 服务器: ApacheeBay: Windows Server 2003/8 (大量) + Web 服务器:Microsoft IISMySpace: Windows Server 2003/8 + Web 服务器:Microsoft IIS由此可见,开源操作系统做Web应用是首选已经是一个既定事实。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

【黑马程序员】Nginx+tomcat集群并实现session共享(广播机制、redis两种方式)
1.1.1 说明:
Solr单机安装并设置开机启动
Solr是一个高性能,采用Java5开发,Solr 基于Lucene的全文搜索服务器。

同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面,是一款非常优秀的全文搜索引擎。

运行环境依赖于服务器,例如tomcat
1.1.2 Solr安装
1.1.
2.1 所需安装包
在目录:淘淘商城资料\参考资料\Solr\bin
将apache-tomcat-7.0.47.tar.gz和solr-4.10.3.tgz.tgz
拷贝到共享目中
1.1.
2.1 在liunx系统中将以上两个文件拷贝到
/usr/local/taotao_shop/solr 目录下。

(1) 在/usr/local/taotao_shop/创建solr目录
(2) 将/mnt/hgfs/share下的两个压缩包拷贝到以上创建的solr目录中
1.1.
2.3 安装和配置solr
(1) 解压文件
(2) 重命名apache-tomact-7.07
(3) solr是一个web项目,所以要运行需要将其发布到tomcat中。

在solr的安装目录的example/webapps/目录下有一个solr.war的web项目,需要将该war拷贝到tomcat的webapps下面。

(4) 启动该tomcat。

solr.war就会自动解压
(5) 接着关闭tomcat,删除webapps下面的solr.war
(6) 将solr安装目录example/lib/ext下的所有jar包,添加到solr工程中的lib目录下
(7) 创建一个与solr关联目录,在/usr/local/taotao_shop/solr下创建一个solrhome目录
(8) 将solr安装目录下/example/solr的所有文件拷贝到上面创建的solrhome目录中
(9) 关联solr及solrhome。

需要修改tomcat下面的solr工程的web.xml文件。

修改如下
修改web.xml文件
(10) 启动tomcat,在本地电脑浏览器输入
http://192.168.25.128:8080/solr出现如下页面即可
注意:访问需要关闭防火墙
如果无法通过http协议访问虚拟,需要关闭防火墙,防火墙相关命令service iptables stop 暂停
chkconfig iptables off 永久关闭
service iptables status 检查状态
注意:中文分词自己弄
设置tomcat开机启动,避免每次开机都要启动tomcat来运行solr服务。

1. 在/etc/init.d/目录下创建一个tomcat文件,文件内容如下:
#!/bin/bash
#
# kenny kenny.zhou@
# /etc/rc.d/init.d/tomcat
# init script for tomcat precesses
# processname: tomcat
# description: tomcat is a j2se server
# chkconfig: 2345 86 16
# description: Start up the Tomcat servlet engine.
if [ -f /etc/init.d/functions ]; then
. /etc/init.d/functions
elif [ -f /etc/rc.d/init.d/functions ]; then
. /etc/rc.d/init.d/functions
else
echo -e "/atomcat: unable to locate functions lib. Cannot continue." exit -1
fi
RETVAL=$?
CATALINA_HOME="/usr/local/taotao_shop/solr/tomcat-solr" case "$1" in
start)
if [ -f $CATALINA_HOME/bin/startup.sh ];
then
echo $"Starting Tomcat"
$CATALINA_HOME/bin/startup.sh
fi
;;
stop)
if [ -f $CATALINA_HOME/bin/shutdown.sh ];
then
echo $"Stopping Tomcat"
$CATALINA_HOME/bin/shutdown.sh
fi
;;
*)
echo $"Usage: $0 {start|stop}"
exit 1;;
esac
exit $RETVAL
2. 修改文件权限
chmod 755 tomcat
3. 设置为开机启动
chkconfig --add tomcat
启动tomcat:
/etc/init.d/tomcat start
停止tomcat:
/etc/init.d/tomcat stop
OK!到此tomcat已经可以开机启动了,不再需要每次开机驱启动tomcat。

相关文档
最新文档