nginx负载均衡tomcat集群 memcache共享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的配置⽂件即可。
Nginx反向代理,负载均衡,redissession共享,keepalived高可用
Nginx反向代理,负载均衡,redissession共享,keepalived⾼可⽤相关知识⾃⾏搜索,直接上⼲货。
使⽤的资源:nginx主服务器⼀台,nginx备服务器⼀台,使⽤keepalived进⾏宕机切换。
tomcat服务器两台,由nginx进⾏反向代理和负载均衡,此处可搭建服务器集群。
redis服务器⼀台,⽤于session的分离共享。
nginx主服务器:192.168.50.133nginx备服务器:192.168.50.135tomcat项⽬服务器1:192.168.50.137tomcat项⽬服务器2:192.168.50.139redis服务器:192.168.50.140注意访问时需要配置防⽕墙规则,或者关闭防⽕墙⾸先进⾏的通⽤安装:总的需要模拟五台服务器,使⽤vmware,全部使⽤centos6.5 64位,五台服务器全部安装jdk,我使⽤的是jdk1.8.1.安装VMware虚拟机,安装linux系统,此处使⽤centOS6.5 64位,安装linux命令⾏⼯具,上传⽂件⼯具,此处使⽤SecureCRT,SecureFX 。
安装教程不再赘述,百度⼀⼤堆..........这步有问题请使劲点:2.在linux上安装jdk:⼀、Nginx反向代理与负载均衡:架构图:此时需要⽤到三台服务器,⼀台nginx服务器,两台正式部署项⽬的服务器:选择的是192.168.50.133主nginx和192.168.50.137,192.168.50.139两台tomcat 服务器⾸先在两台服务器上安装tomcat:这个也是简单,不多说安装tomcat:上传解压即可使⽤,bin⽬录下 startup.sh启动,shutdown.sh关闭配置防⽕墙端⼝:vim /etc/sysconfig/iptables 编辑,开放8080端⼝,80端⼝等⼀些常⽤端⼝,当然后边有⽤到⼀些端⼝都是需要配置开放的,不建议关闭防⽕墙编辑好后 service iptables restart 重新加载防⽕墙配置如果是⾃⼰测试嫌配置⿇烦,关闭防⽕墙: service iptables stop 重启后防⽕墙打开,即在此次开机状态下有效,完全关闭再使⽤ chkconfig iptables off ,即会在重启后也关闭防⽕墙,注意有时候服务都起了但访问出错,可能就是防⽕墙问题哦启动tomcat访问:192.168.50.137:8080,192.168.50.139:8080,打开tomcat⾸页即成功。
nginx服务器集群的问题及解决方式
nginx服务器集群的问题及解决方式服务器集群nginx前段服务器,同时管理多个后端的服务器,可以使tomcat 或者weblogic等。
但是存在一些问题:1.后端服务器之间的数据不能共享,如果一个客户机向一个tomcat发送登陆请求,再想另一个tomcat发送了看商品列表的请求,就会出现请求拒绝的情况,需要做到session共享2.如果这里的nginx服务器挂了,整个服务器集群就会挂。
HA:高可用,3.这里的nginx会出现很多请求和响应都经过nginx,服务器集群会出现瓶颈的情况。
DR:直接路由问题1解决方式:共享session需要专门管理session的软件,memcached 缓存服务,可以和tomcat整合,帮助tomcat共享管理session。
(就如同数据库连接池中的close方法,用户在调用close方法时不是真的将连接关掉,而是还给数据库连接池。
)memcached 缓存服务,可以和tomcat整合,帮助tomcat共享管理session。
设置多台服务器session共享:(特别注意,使用memcached需要使用高版本的tomcat7)1.在一台服务器上安装memcached(内存数据库)1、安装libevent2、安装memcached3、启动memcached ./memcached -d -m 128m -p 11211 -l 192.168.198.128 -u root -P /temp/4、拷贝jar到每个后端服务器tomcat的lib下5、配置tomcat,每个tomcat里面的context.xml中加入<ManagerclassName="de.javakaffee.web.msm.MemcachedBackupSession Manager"memcachedNodes="n1:192.168.198.128:11211" //ip为mencached安装的服务器的ip,如果安装了多个memcached,需要配置多个ipsticky="false" lockingMode="auto"sessionBackupAsync="false"requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"sessionBackupTimeout="1000"transcoderFactoryClass="de.javakaffee.web.msm.serializer.k ryo.KryoTranscoderFactory"/>问题2,3:使用Lvs(linux virtual server),使用ipvsadm管理应用程序,Lvs的DR模式直接路由模式,给每一个服务器都配一个VIP(虚拟ip),后端服务器得到请求后直接向客户端响应,不再经过ngix。
apache负载均衡+tomcat集群+Memcached-session-manager共享session
apache负载均衡+tomcat集群+Memcached-session-manager共享session 转载请注明出处:/blog/19320601、Linux64位系统下安装apache安装apache需要先安装apr和apr-util支持1.1下载apache地址:/download.cgi版本:2.2.25环境:Unix1.2安装apr和apr-util安装apr:tar -xvfz httpd-2.2.25.tar.gz# cd httpd-2.2.251.编译和安装aprcd srclib/apr./configure --libdir=/usr/lib64 --prefix=/usr/local/aprmakemake install安装apr-utilcd ../apr-util./configure --libdir=/usr/lib64 --prefix=/usr/local/apr-util --with-apr=/usr/local/aprmake (如果这一步报错,就先执行下面的再执行本步)make install# vi Makefile将APRUTIL_LIBS = -lsqlite3 /usr/lib/ /root/tar/httpd-2.2.25/srclib/apr/ -luuid -lrt -lcrypt -lpthread -ldl改为APRUTIL_LIBS = -lsqlite3 /usr/lib64/ /root/tar/httpd-2.2.25/srclib/apr/ -luui d -lrt -lcrypt -lpthread -ldl1.3安装apache2.2.25./configure LDFLAGS="-L/usr/lib64 -L/lib64"--prefix=/usr/local/httpd-2.2.25 --e nable-mods-shared=all --with-mpm=worker --enable-deflate --enable-cache --enabl e-disk-cache --enable-mem-cache --enable-file-cache --enable-proxy --enable-pro xy-ajp --enable-proxy-balancer -enable-proxy-http --enable-rewrite --enable-cha rset-lite --disable-ipv6 -disable-dav -with-apr=/usr/local/apr -with-apr-util=/ usr/local/apr-utilmakemake install2、安装Tomcat2、1下载Tomcat地址:/download-70.cgi版本:7.0.42环境:Unix2、2解压tomcatt ar -xvfz httpd-2.2.25.tar.gz3、安装memcache安装mencached之前需要先安装libevent支持3、1下载libevent官方:/地址:/~provos/libevent-1.4.9-stable.tar.gz版本:1.4.9环境:Unix3.1.1安装依赖包libeventtar -xvzf libevent-1.4.9-stable.tar.gzcd libevent-1.4.9-stable./configure -prefix=/usrmake & make install3、2下载memcache地址:/p/memcached/downloads/list版本:1.4.15环境:Unix3.2.1安装memcachetar xvzf memcached-1.4.5.tar.gzcd memcached-1.4.5./configure -with-libevent=/usrmake & make install3.2.2启动memcache/usr/local/bin/memcached -d -m 64 -u rootmemcached命令参数-p <num> 监听的TCP端口(默认: 11211)-U <num> 监听的UDP端口(默认: 11211, 0表示不监听)-s <file> 用于监听的UNIX套接字路径(禁用网络支持)-a <mask> UNIX套接字访问掩码,八进制数字(默认:0700)-l <ip_addr> 监听的IP地址。
基于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同步会话
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 两种方式)本帖最后由小蜀哥哥于 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 Tomcat 配置负载均衡集群
一、Hello world1、前期环境准备1.准备两个解压版tomcat,如何同时启动两个tomcat,请看我的另一篇文章《一台机器同时启动多个tomcat》。
2.nginx官网下载解压版nginx。
3.创建一个简单的web项目。
为了直观的区分访问的哪个tomcat,在页面写上标记8081、8082。
[MISSING IMAGE: , ]4.分别部署到对应的tomcat下。
如图:[MISSING IMAGE: , ][MISSING IMAGE: , ]2、配置nginx进入nginx-1.10.1conf路径,修改配置文件nginx.conf。
1、配置服务器组,在http{}节点之间添加upstream配置。
(注意不要写localhost,不然访问速度会很慢)upstream nginxDemo {server 127.0.0.1:8081; #服务器地址1server 127.0.0.1:8082; #服务器地址22、修改nginx监听的端口号80,改为8080。
server {listen 8080;......}3、在location{}中,利用proxy_pass配置反向代理地址;此处“http://”不能少,后面的地址要和第一步upstream定义的名称保持一致。
location / {root html;index index.html index.htm;proxy_pass http://nginxDemo; #配置方向代理地址}如下图:[MISSING IMAGE: , ]3、启动nginx和tomcat,访问我是Windows系统,所以直接在nginx-1.10.1目录下双击nginx.exe即可。
可在任务管理器中查看[MISSING IMAGE: , ]最后在浏览器输入地址:http://localhost:8080/nginxDemo/index.jsp,每次访问就会轮流访问tomcat了(如果F5刷新不管用,建议试试鼠标指针放到地址栏,点击Enter键)。
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共享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共享测试环境本文档测试环境是在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命令解压到相应的目录下即可。
使用redis解决tomcat6在nginx负载下多节点共享session问题
使用redis共享tomcat多节点session,需要安装redis、nginx、tomcat6以及用于tomcat存储session到redis的jar包:tomcat-redis-session-manager-1.2-tomcat-6.jar、commons-pool-1.6.jar、jedis-2.1.0.jar等。
这些jar包、配置文件及demo程序可以在最后的demo地址中下载。
下面是对tomcat、nginx进行配置及运行:1.把demo包中的jar包拷贝到tomcat的lib目录中:2.配置tomcat的context.xml文件:<Valve className="com.radiadesign.catalina.session.RedisSessionHandlerValve"/>;<Manager className="com.radiadesign.catalina.session.RedisSessionManager"host="localhost"port="6379"database="0"maxInactiveInterval="60"/>;3.配置tomcat的server.xml:对于不同的tomcat,以下几个port配置成不同的值如:tomcat1:<Server port="8007" shutdown="SHUTDOWN"><Connector port="18080" protocol="org.apache.coyote.http11.Http11Protocol"connectionTimeout="20000"redirectPort="8444" /><Connector port="8019" protocol="AJP/1.3" redirectPort="8444" /><Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">tomcat2:<Server port="8008" shutdown="SHUTDOWN"><Connector port="18081" protocol="org.apache.coyote.http11.Http11Protocol"connectionTimeout="20000"redirectPort="8445" /><Connector port="8029" protocol="AJP/1.3" redirectPort="8445" /><Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat2">4.配置nginx集群:对nginx.conf进行配置:upstream tomcat {server 127.0.0.1:18080;server 127.0.0.1:18081;}server {listen 8080;server_name 127.0.0.1;location / {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_buffers 32 4k;proxy_connect_timeout 3;proxy_send_timeout 30;proxy_read_timeout 30;proxy_pass http://tomcat;}}5.把demo.war程序放入到tomcatde webapps中:修改demo中的index.jsp中的内容,不同的tomcat中,内容不一样。
apachetomcatsessionmemcache高性能群集搭建
【Apache+Tomcat+Sessio n+Memcache 高性能群集搭建】随着IT行业的发展,linux服务器在企业中应用广泛,人们对linux上的应用服务要求也越来越高,上篇搭建了ng inx群集,今天我们来搭建目前用得最多的apache群集,接下来我们亲自来搭建一个属于自己的高性能web 服务器,负载均衡服务器。
一、Apache+Tomca t+Session+Memcache共享高性能群集服务搭建,本文采用目前主流版本搭建,搭建环境及版本如下列表:系统版本:Centos 5.3 64位系统Nginx版本为:httpd-2.2.13.tar.bz2Jdk版本为:1.6.0_18_64Tomcat版本为:Apache Tomcat/6.0.30其他相似版本也可以!安装服务所需的包如下下载路径:本网站集成部分下载:jdk请到以下网站下载:请选择自己系统版本的jdk。
https://cds.s /is-bin/INTERS HOP.enfinity/WFS/CDS-CDS_Develope r-Site/en_US/-/USD/ViewFilt eredProducts-SingleV ariationTypeFilter 【A pache、Tomcat下载地址,下载到/usr/src下】cd /us r/src &&wget http:///d ownload/{httpd-2.2.13.tar.bz2,apache-tom cat-6.0.30.tar.gz }二、安装Apachecd /usr/src && tar -jxvf htt pd-2.2.13.tar.bz2 && cdhttpd-2.2.13/src lib/apr &&./configur e --prefix=/usr/loca l/apr&&make &&makeinstall &&cd ../apr-util/ && ./configure--prefix=/usr/local/apr-util --with-apr=/usr/local/apr &&ma ke&&make install &&cd ../../ && ./confi gure --prefix=/usr/l ocal/apache2--enabl e-mods-shared=all --with-mpm=worker --en able-deflate--enabl e-cache --enable-dis k-cache --enable-mem-cache--enable-file-cache --enable-prox y --enable-proxy-ajp--enable-proxy-bala ncer --enable-proxy-http --enable-rewrit e--enable-charset-l ite --disable-ipv6 --disable-dav--with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util可以直接拷贝安装apache【注意*这里安装mo d_proxy处理Tomcat jsp页面模块,安装apr、apr-util 增加Tomcat处理性能,当然也可以用mod_jk的方式,如果是mod_jk的方式的话,可以参考这篇文章:http://b /thr ead-1195-1-1.html】三、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 CLASSP ATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib export PATH=$JAVA_HOME/bin:$JAV A_HOME/jre/bin:$PATH:$HOMR/bin source /e tc/profile //使环境变量马上生效java –version //查看java版本,显示版本是1.6.0_18,并且是64位的证明安装成功!【J ava HotSpot(TM) 64-B it Server VM (build16.0-b10, mixed mode) 】cd /usr/src && t ar xzf apache-tomcat-6.0.30.tar.gz解压完成执行:mv apache-tomcat-6.0.30 /usr/local/to mcat_1 && cp/usr/lo cal/tomcat_1 /usr/lo cal/tomcat_2 -r【移动到/usr/local下并重命名为tomc at_1文件夹,并cp一个tomcat_2】部署两个Tomcat群集做负载均衡用!(2)、设置tomcat的java变量cd /usr/local/tom cat_1/bin/ && vi set env.sh 创建一个setenv.sh脚本文件,添加如下语句即可JAVA_H OME=/usr/java/jdk1.6.0_18JAVA_JRE=/usr/java/jdk1.6.0_18/jre并且拷贝setenv.sh文件到tom cat_2/bin/下:cp -p /usr/local/tomcat_1/b in/setenv.sh /usr/lo cal/tomcat_2/bin 下即可!保存退出检查两个tomcat下bi n目录的*.sh 文件是否有可执行权限,如果没有则进入到相应的目录执行 chmo d o+x *.sh 即可!给两个to mcat分别创建不同的目录如下:mkdi r -p/usr/webapps/{w ww_1,www_2}(3)、设置Tomcat的 server.xml文件:【以下是我的tomcat配置文件具体内容,本想把有配置都粘贴在这里,显示有点题,所有用了两个web链接!这样一来部分解释就产生了影响。
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.> --user=nginx --group=nginx --with-http_ssl_module \13.> --with-http_flv_module--with-http_stub_status_module \14.> --with-http_gzip_static_module--http-proxy-temp-path=/var/tmp/nginx/proxy/ \15.> --with-pcre \16.>--add-module=/usr/local/src/nginx_upstream_check_module-m aster \17.>--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>&1 | grep"configure arguments:"| sed's/[^*]*--user=\([^ ]*\).*/\1/g' -` 026.options=`$nginx -V 2>&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 >/dev/null 2>&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
集群–负载均衡集群和负载均衡是两个概念,对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+php负载均衡集群环境中的session共享方案梳理
nginx+php负载均衡集群环境中的session共享方案梳理在网站使用nginx+php做负载均衡情况下,同一个IP访问同一个页面会被分配到不同的服务器上,如果session不同步的话,就会出现很多问题,比如说最常见的登录状态。
下面罗列几种nginx负载均衡中session同步的方式1)不使用session,换用cookiesession是存放在服务器端的,cookie是存放在客户端的,我们可以把用户访问页面产生的session放到cookie里面,就是以cookie为中转站。
你访问web服务器A,产生了session 然后把它放到cookie里面,当你的请求被分配到B服务器时,服务器B先判断服务器有没有这个session,如果没有,再去看看客户端的cookie里面有没有这个session,如果也没有,说明session真的不存,如果cookie里面有,就把cookie 里面的sessoin同步到服务器B,这样就可以实现session的同步了。
说明:这种方法实现起来简单,方便,也不会加大数据库的负担,但是如果客户端把cookie禁掉了的话,那么session 就无从同步了,这样会给网站带来损失;cookie的安全性不高,虽然它已经加了密,但是还是可以伪造的。
2)session存在数据库(MySQL)中PHP可以配置将session保存在数据库中,这种方法是把存放session的表和其他数据库表放在一起,如果mysql也做了集群的话,每个mysql节点都要有这张表,并且这张session表数据表要实时同步。
但是要注意的是:用数据库来同步session,会加大数据库的IO,增加数据库的负担。
而且数据库读写速度较慢,不利于session的适时同步。
3)session存在memcache或者redis中memcache可以做分布式,php配置文件中设置存储方式为memcache,这样php自己会建立一个session集群,将session数据存储在memcache中。
tomcat的高可用与负载均衡
tomcat的⾼可⽤与负载均衡nginx+tomcat+memcached系统环境:rhel6 x64 selinux and iptables disabled主机⾓⾊:node1: 192.168.0.104:nginx tomcat memcached node2: 192.168.0.144:tomcat memcached 软件下载: /p/memcached-session-manager/<T1> <T2> . \ / . . X . . / \ . <M1> <M2> Tomcat-1 (T1) 将 session 存储在 memcached-2 (T2)上。
只有当 M2 不可⽤时,T1 才将 session 存储在 memcached-1 上(M1 是 T1 failoverNode)。
使⽤这种配置的好处是,当 T1 和 M1 同时崩溃时也不会丢失 session 会话,避免单点故障。
⾸先,安装tomcat,memcached(之前有详细的安装过程,这⾥不讲了)session 的序列化⽅案官⽅推荐的有 4 种: 1. java serialization 2. msm-kryo-serializer 3. msm-javolution-serializer 4. msm-xstream-serializer 其中性能最好的序列化⽅案是 Kryo,此实验我们采⽤ kryo ⽅式。
把如下软件包放置到/usr/local/tomcat/lib ⽬录中 kryo-1.03.jar kryo-serializers-0.8.jar memcached-2.5.jar memcached-session-manager-1.5.1.jar memcached-session-manager-tc7-1.5.1.jar minlog-1.2.jar msm-kryo-serializer-1.5.1.jar reflectasm-0.9.jarvi /usr/local/tomcat/conf/context.xml 第⼀台机⼦192.168.0.114在⾥⾯添加<Context> ...... <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"memcachedNodes="n1:192.168.0.104:11211,n2:192.168.0.144:11211"failoverNodes="n1" //这项表⽰最终访问的node,t1默认访问的使n2,当n2不能访问时,访问n1 requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory" /> </Context>第⼆台机⼦192.168.0.144在⾥⾯添加,将failoverNodes="n2" 修改。
负载均衡Session共享机制
负载均衡Session 共享机制⼀般负载均衡内容有两种形式,⼀种是静态,另⼀种是动态,动态⽹站内容就可能需要进⾏交互,那么就涉及到session 共享的问题。
默认PHP 是将session 存储在LocalDisk ,如果是多台php 主机之间进⾏负载,那么该如何共享session ?今天我们就解决这个问题。
session 会话共享⽂件有很多种⽅式:分布式⽂件共享;NFS,NAS ⽂件存储等。
Nginx 负载均衡ip_hash 模块,固定访客到后端某台服务器。
将session 存储到数据库中;例如MySQL,Memcached,Redis,Mongodb 等。
我个⼈⽐较倾向于将session 存储到Redis 数据库,⽤这种⽅式来同步session 共享,不仅不会加⼤数据库的负担,⽽且安全性⽐cookie 更⾼,把session 放到内存⾥⾯,⽐从磁盘⽂件中读取会快很多。
“有⼈认为;那我把所有的缓存软件都安装,速度岂不是更快,那就不是缓存加速了,⽽演变成了缓存库了”。
php 语⾔默认不⽀持对Redis 的操作,所以需要安装第三⽅phpRedis 扩展模块,让其⽀持对Redis 的操作,⾄于如何安装使⽤phpRedis ,可以参考我前⾯写的⽂章《phpRedis 扩展模块安装配置使⽤》。
此外这⾥还需要⼀台Redis 服务器,请参阅《7 Redis 3.2.9 源码编译安装配置》。
1.修改PHP 配置⽂件php.ini 将session 存储到Redis 中。
1234# vim /usr/local/php/etc/php.ini session.save_handler = files;session.save_path = "N;/path"修改为:# vim /usr/local/php/etc/php.inisession.save_handler = files;session.save_path = "N;/path";如果Redis 有密码连接⽅式session.save_path = “tcp://10.10.204.66:6379?auth=password”2.重启php-fpm 服务⽣效1# systemctl restart php-fpm。
ngin+tomcat+memcached集群安装配置操作指导书
Nginx+Tomcat+Memcached+Mysql 集群安装配置操作指导书拟制:Prepared by 杨机智日期:Date2015-1-14审核: Reviewed by 日期:Date审核: Reviewed by 日期:Date批准: Granted by 日期:Date修订记录Revision record目录Table of Contents1集群组网.......................................................... 错误!未定义书签。
2N ginx安装......................................................... 错误!未定义书签。
Nginx介绍....................................................... 错误!未定义书签。
Nginx安装....................................................... 错误!未定义书签。
Nginx启动、关闭、重启........................................... 错误!未定义书签。
3J DK安装........................................................... 错误!未定义书签。
4T omcat安装........................................................ 错误!未定义书签。
Memcached启动和关闭............................................. 错误!未定义书签。
5集群配置.......................................................... 错误!未定义书签。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
nginx负载均衡tomcat集群memcache共享session分类:nginx2011-03-05 20:521319人阅读评论(1)收藏举报要集群tomcat主要是解决SESSION共享的问题,因此我利用memcached来保存session,多台TOMCAT服务器即可共享SESSION了。
你可以自己写tomcat的扩展来保存SESSION到memcached。
这里推荐使用memcached-session-manager这个开源项目[url]/p/memcached-session-manager/ [/url],下面简称msm。
如何安装nginx、memcached、tomcat这些就不多说了。
先说明一下测试环境:tomcat1、nginx、memcached安装在192.168.1.11tomcat2安装在192.168.1.101下面分步实现基于nginx的tomcat负载均衡和集群配置一,tomcat集群1,先下载msm及其依赖包[url]/files/memcached-session-manager-1.3.0.jar [/url][url]/files/msm-javolution-serializer-jodatime-1.3. 0.jar[/url][url]/files/msm-javolution-serializer-cglib-1.3.0.jar [/url][url] /files/memcached-2.4.2.jar [/url][url] /files/javolution-5.4.3.1.jar [/url]2,将这5个包放到$TOMCAT_HOME/lib目录下3,修改$TOMCAT_HOME/conf/server.xml1]<Context docBase= "E:/java_codes/TestSession/WebContent" path= ""reloadable= "true" >2 2 .<Manager className= "de.javakaffee.web.msm.MemcachedBackupSessionManager"3 3 . memcachedNodes= "n1:localhost:11211"4 4 . requestUriIgnorePattern= ".*/.(png|gif|jpg|css|js)$"5 5 . sessionBackupAsync= "false"6 6 . sessionBackupTimeout= "100"77 . transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"88 . copyCollectionsForSerialization= "false"99 . />1010 .</Context>1112<Context docBase="E:/java_codes/TestSession/WebContent" path= "" reloadable= "true" >13<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"14 memcachedNodes="n1:localhost:11211"15 requestUriIgnorePattern=".*/.(png|gif|jpg|css|js)$"16 sessionBackupAsync="false"17 sessionBackupTimeout="100"18transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTr anscoderFactory"19 copyCollectionsForSerialization="false"20 />21</Context>22这里的memcachedNodes是填写memcached节点,多个节点时可以以空隔分开,如:n1:localhost:11211 n2:localhost:11212sessionBackupTimeout的单位为分钟E:/java_codes/TestSession/WebContent 替换成你的WEB目录修改后重启两个TOMCAT即可,这个时候已经解决SESSION的共享问题.二,配置nginx实现负载均衡以我的nginx.conf为例Xml代码1.#user nobody;2.worker_processes 1;3.4.error_log logs/error.log;5.6.events {7. worker_connections 1024;8.}9.10.11.http {12. include mime.types;13. default_type application/octet-stream;14.15. sendfile on;16. keepalive_timeout 65;17.18. #gzip on;19. upstream {20. server 192.168.1.11:8080;21. server 192.168.1.101:8080;22. }23. server {24. listen 80;25. server_name ;26. charset utf-8;27. location / {28. root html;29. index index.html index.htm;30. proxy_pass ;31. proxy_set_header X-Real-IP $remote_addr;32. client_max_body_size 100m;33. }34.35.36. location ~ ^/(WEB-INF)/ {37. deny all;38. }39.40. error_page 500 502 503 504 /50x.html;41. location = /50x.html {42. root html;43. }44.45. }46.}#user nobody;worker_processes 1;error_log logs/error.log;events {worker_connections 1024;}http {include mime.types;default_type application/octet-stream;sendfile on;keepalive_timeout 65;#gzip on;upstream {server 192.168.1.11:8080;server 192.168.1.101:8080;}server {listen 80;server_name ;charset utf-8;location / {root html;index index.html index.htm;proxy_pass ;proxy_set_header X-Real-IP $remote_addr;client_max_body_size 100m;}location ~ ^/(WEB-INF)/ {deny all;}error_page 500 502 503 504 /50x.html;location = /50x.html {root html;}}}将替换成你的域名192.168.1.11和192.168.1.101替换成你服务器的IPOK,已经完成。
启动nginx即可。
以下是wiki上面的原话:SetupAndConfigurationThis page shows what's necessary to get the memcached-session-manager up and running. Introduction¶For the most simple integration you just need to have a tomcat (6 or 7) and a memcached installed (or s.th. supporting the memcached protocol). In your production environment you probably will have several tomcats and you should also have several memcached nodes available, on different pieces of hardware. You can use sticky sessions or non-sticky sessions, memcached-session-manager supports both operation modes.The following description shows an example for a setup with sticky sessions, with two instances of tomcat and two instances of memcached installed.Tomcat-1 (t1) will primarily store it's sessions in memcached-2 (m2) which is running on another machine (m2 is a regular node for t1). Only if m2 is not available, t1 will store it's sessions in memcached-1 (m1, m1 is the failoverNode for t1). With this configuration, sessions won't be lost when machine 1 (serving t1 and m1) crashes. The following really nice ASCII art shows this setup. <t1> <t2> . / / . . X . . / / . <m1> <m2>Details¶So what needs to be done for this?Decide which serialization strategy to use¶Starting with release 1.1 there are several session serialization strategies available, as they are described on SerializationStrategies. The default strategy uses java serialization and is already provided by the memcached-session-manager jar. Other strategies are provided by separate jars, in the section below you'll see which jars are required for which strategy.Configure tomcat¶The configuration of tomcat requires two things: you need to drop some jars in your $CATALINA_HOME/lib/ directory and you have to configure the memcached session manager in the server.xml.Add jars to $CATALINA_HOME/lib/¶Independent of the chosen serialization strategy you always need the memcached-session-manager-1.4.0-RC1.jar (for tomcat6, or memcached-session-manager-tc7-1.4.0-RC1.jar for tomcat7) and the memcached-2.5.jar (spymemcached). Just download and put them in $CA TALINA_HOME/lib/.Add jars to WEB-INF/lib/¶If you want to use java's built in serialization nothing more has to be done. If you want to use a custom serialization strategy (e.g. because of better performance) you need to drop some jars into your projects WEB-INF/lib/ directory. In the following the jars are listed by serialization strategy. For kryo based serialization (recommended) these jars are required additionally (in your WEB-INF/lib):kryo-1.03.jarminlog-1.2.jarreflectasm-0.9.jarasm-3.2.jarkryo-serializers-0.8.jarmsm-kryo-serializer-1.3.6.jarFor javolution based serialization these jars are required additionally:javolution-5.4.3.1.jar (a patched version of the latest javolution release, the patch is required to support serialization of jdk proxies)msm-javolution-serializer-1.3.6.jarFor xstream based serialization these jars are required additionally:xstream-1.3.1.jarxpp3_min-1.1.3.4.O.jar (xml pull parser used by xstream)msm-xstream-serializer-1.3.6.jarUpdate server.xml¶Configure the appropriate context in your $CA TALINA_HOME/conf/server.xml so that it contains the Manager configuration for the memcached-session-manager, like this example for sticky sessions:<Context path="" docBase="ROOT"> <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" memcachedNodes="n1:localhost:11211 n2:localhost:11212" failoverNodes="n1" requestUriIgnorePattern=".*/.(png|gif|jpg|css|js)$"transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory" /> </Context>For non-sticky sessions the configuration would look like this:<Context path="" docBase="ROOT"> <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" memcachedNodes="n1:localhost:11211 n2:localhost:11212" sticky="false" lockingMode="uriPattern:/path1|/path2" requestUriIgnorePattern=".*/.(png|gif|jpg|css|js)$" transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory" /> </Context>These example configurations assume, that you have running two memcached nodes on localhost, one on port 11211 and another one on port 11212, and that you want to use kryo based serialization. More details to configuration attributes are provided in the section below.Now you have finished the configuration of your first tomcat. For the second tomcat you just need to change the failover node when you're using sticky sessions.After this is done, you can just start your application and sessions will be stored in the configured memcached nodes as configured. Now you should do some tests with a simulated tomcat failure, a restart of a memcached node etc. - have fun! :-)MemcachedBackupSessionManager configuration attributes¶className (required)This should be set to de.javakaffee.web.msm.MemcachedBackupSessionManager to get sessions stored in memcached. However, since version 1.3.6 there's also a de.javakaffee.web.msm.DummyMemcachedBackupSessionManager that can be used for development purposes: it simply serializes sessions to a special in memory map and deserializes the serialized data at the next request when a session is requested (without really using this session) - just to see if deserialization is working for each request. Your application is still using sessions as if the memcached-session-manager (or DummyMemcachedBackupSessionManager) would not be existing. Session serialization/deserialization is done asynchronously. The configuration attributes memcachedNodes and failoverNode are not used to create a memcached client, so serialized session data will not be sent to memcached - and therefore no running memcacheds are required.memcachedNodes (required)This attribute must contain all memcached nodes you have running. Each memcached node is defined as <id>:<host>:<port>. Several definitions are separated by space or comma。