首页 文章 精选 留言 我的

精选列表

搜索[伪集群],共10000篇文章
优秀的个人博客,低调大师

Nginx+Redis+Tomcat实现session共享集群

Nginx作为目前最流行的开源反向代理HTTP Server,实现资源缓存、web server负载均衡等功能,Tomcat提供动态web内容,redis提供高效缓存构成一个完美web站点组合,但必须借助redis-session-manager-tomcat.jar包才能实现session共享。session-manager负责会话管理,commons-pool是共享池,jedis是连接redis组件,三者协调共享,缺一不可。 特别注意:redis-session-manager-tomcat.jar是通过maven打包而成,与context.xml内容相对应,commons-pool.jar jedis.jar版本要求严格,千万不能轻视。 架构图 实验环境 IP Roles port station11192.168.1.11 nginx centos6.8 端口:80 版本:1.10.2 station11192.168.1.11 redis 2.4.10 端口:6379 station12192.168.1.12 tomcatA centos6.8 端口:8080 station13192.168.1.13 tomcatB centos6.8 端口:8080 版本:Jdk:1.8.0_91 Tomcat: 7.0.75 Station11 安装redis [root@station11 ~]# yum -y install redis redis-2.4.10-1.el6.x86_64 [root@station11 ~]# mkdir -pv /data/redis [root@station11 ~]# chown -R redis.root /data/redis [root@station11 ~]# vim /etc/redis.conf daemonizeyes bind192.168.1.11 logfile/var/log/redis/redis.log dir/data/redis requirepassredhat [root@station11 ~]# echo vm.overcommit_memory=1 >> /etc/sysctl.conf [root@station11 ~]# sysctl vm.overcommit_memory=1 [root@station11 ~]# chown redis.root /var/log/redis/redis.log [root@station11 ~]#service redis start [root@station11 ~]# netstat -nutlp | grep redis tcp00192.168.1.11:63790.0.0.0:*LISTEN3568/redis-server [root@station11 ~]# redis-cli -h 192.168.1.11 -p 6379 -a redhat redis192.168.1.11:6379>select0 OK [root@station12 ~]# ls apache-tomcat-7.0.75.tar.gz jdk-8u91-linux-x64.tar.gz [root@station12 ~]# tar zxvf jdk-8u91-linux-x64.tar.gz -C /usr/local/ [root@station12 ~]# ln -sv /usr/local/jdk1.8.0_91/ /usr/local/java [root@station12 ~]# cat > /etc/profile.d/java.sh << EOF JAVA_HOME=/usr/local/java/ JRE_HOME=/usr/local/java/ PATH=$JAVA_HOME/bin:$PATH exportJAVA_HOMEJRE_HOMEPATH EOF [root@station12 ~]# java -version javaversion"1.8.0_91" Java(TM)SERuntimeEnvironment(build1.8.0_91-b14) JavaHotSpot(TM)64-BitServerVM(build25.91-b14,mixedmode) [root@station12 ~]# tar zxvf apache-tomcat-7.0.75.tar.gz -C /usr/local/ [root@station12 ~]# ln -sv /usr/local/apache-tomcat-7.0.75/ /usr/local/tomcat [root@station12 ~]# cat > /etc/profile.d/tomcat.sh << EOF exportCATALINA_HOME=/usr/local/tomcat exportPATH=$CATALINA_HOME/bin:$PATH EOF [root@station12 ~]#. /etc/profile.d/tomcat.sh [root@station12 ~]# catalina.sh version UsingCATALINA_BASE:/usr/local/tomcat UsingCATALINA_HOME:/usr/local/tomcat UsingCATALINA_TMPDIR:/usr/local/tomcat/temp UsingJRE_HOME:/usr/local/java/ UsingCLASSPATH:/usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar Serverversion:ApacheTomcat/7.0.75 Serverbuilt:Jan18201720:54:42UTC Servernumber:7.0.75.0 OSName:Linux OSVersion:2.6.32-642.el6.x86_64 Architecture:amd64 JVMVersion:1.8.0_91-b14 JVMVendor:OracleCorporation [root@station12 ~]#vim /etc/init.d/tomcat #!/bin/sh #TomcatinitscriptforLinux. # #chkconfig:23459614 #description:TheApacheTomcatservlet/JSPcontainer. #JAVA_OPTS='-Xms64m-Xmx128m' #-Xms64m指的是java虚拟机启动时占用的内存为64M-Xmx128m指的是java虚拟机最大能使用的内存为128M; JAVA_HOME=/usr/local/java CATALINA_HOME=/usr/local/tomcat exportJAVA_HOMECATALINA_HOME case$1in start) exec$CATALINA_HOME/bin/catalina.shstart;; stop) exec$CATALINA_HOME/bin/catalina.shstop;; restart) $CATALINA_HOME/bin/catalina.shstop sleep2 exec$CATALINA_HOME/bin/catalina.shstart;; *) echo"Usage:`basename$0`{start|stop|restart}" exit1 ;; esac [root@station12 ~]# chmod +x /etc/init.d/tomcat [root@station12 ~]# chkconfig --add tomcat [root@station12 tomcat]# service tomcat start [root@station12 tomcat]# netstat -nutlp | grep java tcp00::ffff:127.0.0.1:8005:::*LISTEN1977/java tcp00:::8009:::*LISTEN1977/java tcp00:::8080:::*LISTEN1977/java [root@station12 ~]# cd /usr/local/tomcat [root@station12 tomcat]# vim webapps/ROOT/test.jsp <%@pagelanguage="java"%> <html> <head><title>Tomcat12</title></head> <body> <h1><fontcolor="red">www.xuefeng.com</font></h1> <tablealign="centre"border="1"> <tr> <td>SessionID</td> <%session.setAttribute("www.xuefeng.com","www.xuefeng.com");%> <td><%=session.getId()%></td> </tr> <tr> <td>Createdon</td> <td><%=session.getCreationTime()%></td> </tr> </table> </body> </html> station13相同安装jdk和tomcat 更改主机名和颜色 [root@station12~]# cp commons-pool2-2.4.2.jar jedis-2.8.1.jar tomcat-redis-session-manage-tomcat7.jar/usr/local/tomcat/lib/ [root@station12conf]# vim context.xml <ValveclassName="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve"/>注意空格+/> <ManagerclassName="com.orangefunction.tomcat.redissessions.RedisSessionManager" host="192.168.1.11"port="6379"database="0"password="redhat"/>注意没有空格+/> [root@station12conf]# vim server.xml 注销端口8009行 <!--<Connectorport="8009"protocol="AJP/1.3"redirectPort="8443"/>--> autoDeploytrue改false <Hostname="localhost"appBase="webapps" unpackWARs="true"autoDeploy="false"> [root@station12tomcat]# service tomcat restart [root@station12tomcat]# tail -f /logs/catalina.out Feb05,20176:28:42PMcom.orangefunction.tomcat.redissessions.RedisSessionManagerstartInternal INFO:AttachedtoRedisSessionHandlerValve Feb05,20176:28:42PMcom.orangefunction.tomcat.redissessions.RedisSessionManagerinitializeSerializer INFO:Attemptingtouseserializer:com.orangefunction.tomcat.redissessions.JavaSerializer Feb05,20176:28:42PMcom.orangefunction.tomcat.redissessions.RedisSessionManagerstartInternal INFO:Willexpiresessionsafter1800seconds [root@station13~]# cp commons-pool2-2.4.2.jar jedis-2.8.1.jar tomcat-redis-session-manage-tomcat7.jar/usr/local/tomcat/lib/ [root@station13conf]# rm -f context.xml server.xml [root@station13conf]# scp 192.168.1.12:/usr/local/tomcat/conf/{context.xml,server.xml} . [root@station13conf]# service tomcat restart [root@station12tomcat]# redis-cli -h 192.168.1.11 -p 6379 -a redhat redis192.168.1.11:6379> keys * 1)"8530FAC0B67966A27E80D6D589D93E5A" 2)"09AD4D396865B1954F644D150F8A6A85" 可以看到2个独立会话ID已经存放在redis中 Station11最后安装nginx [root@station11~]# yum -y install nginx nginx.x86_640:1.10.2-1.el6 [root@station11nginx]# mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.0 [root@station11~]# vim /etc/nginx/nginx.conf 在http段中添加 upstreambackend{ server192.168.1.12:8080; server192.168.1.13:8080; } server{ location/{ proxy_passhttp://backend; proxy_redirectoff; proxy_set_headerHost$host; proxy_set_headerX-Real-IP$remote_addr; proxy_set_headerX-Forworded-For$proxy_add_x_forwarded_for; } } [root@station11~]# service nginx start 刷新192.168.1.11/test.jsp 会看到sessionID保持不变,但tititle主机名和网页内head域名一直在变,说明内容来自后端2台主机。但3者的sessionID不同。

优秀的个人博客,低调大师

nginx+tomcat+memcached构建session共享集群

一、安装配置tomcat 配置前说明: 系统为centos7 m1.xsllqs.com地址为192.168.1.107 c1.xsllqs.com地址为192.168.1.114 c2.xsllqs.com地址为192.168.1.113 安装tomcat需要配合JDK使用,JDK有oracle JDK和open JDK两种 oracle JDK8的下载地址:http://www.oracle.com/technetwork/cn/java/javase/downloads/jdk8-downloads-2133151-zhs.html tomcat的下载地址:http://tomcat.apache.org/ c1.xsllqs.com(192.168.1.114)下载安装jdk(建议加载到本地在传上去)和tomcat [root@c1~]#wgethttp://download.oracle.com/otn-pub/java/jdk/8u73-b02/jdk-8u73-linux-x64.rpm [root@c1~]#wgethttp://mirror.bit.edu.cn/apache/tomcat/tomcat-8/v8.0.36/bin/apache-tomcat-8.0.36.tar.gz [root@c1~]#ls apache-tomcat-8.0.36.tar.gzjdk-8u73-linux-x64.rpm [root@c1~]#yuminstalljdk-8u73-linux-x64.rpm [root@c1~]#vim/etc/profile.d/java.sh exportJAVA_HOME=/usr/java/latest exportPATH=$JAVA_HOME/bin:$PATH [root@c1~]#./etc/profile.d/java.sh [root@c1~]#java-version javaversion"1.8.0_73" [root@c1~]#tarxfapache-tomcat-8.0.36.tar.gz-C/usr/local [root@c1~]#cd/usr/local/ [root@c1local]#ln-svapache-tomcat-8.0.36tomcat "tomcat"->"apache-tomcat-8.0.36" [root@c1tomcat]#vim/etc/profile.d/tomcat.sh exportCATALINA_HOME=/usr/local/tomcat exportPATH=$CATALINA_HOME/bin:$PATH [root@c1tomcat]#./etc/profile.d/tomcat.sh c2.xsllqs.com(192.168.1.113)下载安装jdk和tomcat [root@c2~]#wgethttp://download.oracle.com/otn-pub/java/jdk/8u73-b02/jdk-8u73-linux-x64.rpm [root@c2~]#wgethttp://mirror.bit.edu.cn/apache/tomcat/tomcat-8/v8.0.36/bin/apache-tomcat-8.0.36.tar.gz [root@c2~]#ls apache-tomcat-8.0.36.tar.gzjdk-8u73-linux-x64.rpm [root@c2~]#yuminstalljdk-8u73-linux-x64.rpm [root@c2~]#vim/etc/profile.d/java.sh exportJAVA_HOME=/usr/java/latest exportPATH=$JAVA_HOME/bin:$PATH [root@c2~]#./etc/profile.d/java.sh [root@c2~]#java-version javaversion"1.8.0_73" [root@c2~]#tarxfapache-tomcat-8.0.36.tar.gz-C/usr/local [root@c2~]#cd/usr/local/ [root@c2local]#ln-svapache-tomcat-8.0.36tomcat "tomcat"->"apache-tomcat-8.0.36" [root@c2tomcat]#vim/etc/profile.d/tomcat.sh exportCATALINA_HOME=/usr/local/tomcat exportPATH=$CATALINA_HOME/bin:$PATH [root@c2tomcat]#./etc/profile.d/tomcat.sh 二、修改tomcat配置文件 [root@c1tomcat]#cd/usr/local/tomcat/webapps/ [root@c1webapps]#mkdirmyapp/{lib,classes,WEB-INF,META-INF}-pv [root@c1webapps]#cdmyapp/ 添加c1和c2的主页文件 [root@c1myapp]#vimindix.jsp <%@pagelanguage="java"%> <html> <head><title>Tomcat1</title></head> <body> <h1><fontcolor="red">c1.xsllqs.com</font></h1> <tablealign="centre"border="1"> <tr> <td>SessionID</td> <%session.setAttribute("xsllqs.com","xsllqs.com");%> <td><%=session.getId()%></td> </tr> <tr> <td>Createdon</td> <td><%=session.getCreationTime()%></td> </tr> </table> </body> </html> [root@c2myapp]#vimindix.jsp <%@pagelanguage="java"%> <html> <head><title>Tomcat2</title></head> <body> <h1><fontcolor="blue">c2.xsllqs.com</font></h1> <tablealign="centre"border="1"> <tr> <td>SessionID</td> <%session.setAttribute("xsllqs.com","xsllqs.com");%> <td><%=session.getId()%></td> </tr> <tr> <td>Createdon</td> <td><%=session.getCreationTime()%></td> </tr> </table> </body> </html> 修改tomcat-user.xml(c1和c2都要改) [root@c1conf]#vim/usr/local/tomcat/conf/tomcat-users.xml #在</tomcat-users>中添加 <rolerolename="manager-gui"/> <rolerolename="admin-gui"/> <userusername="tomcat"password="<tomcat>"roles="manager-gui,admin-gui"/> 修改server.xml(c1和c2都要改) [root@c1conf]#vim/usr/local/tomcat/conf/server.xml #修改主配置文件,appBase后面是应用的相对路径也可以是绝对路径 <Hostname="localhost"appBase="webapps" unpackWARs="true"autoDeploy="true"> #这里是访问日志的设置 <ValveclassName="org.apache.catalina.valves.AccessLogValve"directory="logs" prefix="localhost_access_log"suffix=".txt" pattern="%h%l%u%t&quot;%r&quot;%s%b"/> #这里设置Context调用msm需要的组件,m1为主c2为备,因为我这里只有3台机器所以把c2作为备,正常情况是4台,2台memcached和2台tomcat <Contextpath="/myapp"docBase="/usr/local/tomcat/webapps/myapp"reloadable="true"> <ManagerclassName="de.javakaffee.web.msm.MemcachedBackupSessionManager" memcachedNodes="m1:192.168.1.107:11211,c2:192.168.1.113:11211" failoverNodes="m1" requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$" transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory" /> </Context> 测试配置文件 [root@c1~]#catalina.shconfigtest [root@c2~]#catalina.shconfigtest [root@c1~]#catalina.shstart [root@c2~]#catalina.shstart 三、安装msm c1和c2上下载msm需要的jar包 [root@c1~]#wgethttp://repo1.maven.org/maven2/de/javakaffee/msm/memcached-session-manager/1.9.4/memcached-session-manager-1.9.4.jar [root@c1~]#wgethttp://repo1.maven.org/maven2/de/javakaffee/msm/memcached-session-manager-tc8/1.9.4/memcached-session-manager-tc8-1.9.4.jar [root@c1~]#wgethttp://repo1.maven.org/maven2/de/javakaffee/msm/msm-javolution-serializer/1.9.4/msm-javolution-serializer-1.9.4.jar [root@c1~]#wgethttp://repo1.maven.org/maven2/net/spy/spymemcached/2.11.1/spymemcached-2.11.1.jar [root@c1~]#wgethttp://www.java2s.com/Code/JarDownload/javolution/javolution-5.4.3.1.jar.zip [root@c1~]#mvjavolution-5.4.3.1.jarmemcached-session-manager-1.9.4.jarmemcached-session-manager-tc8-1.9.4.jarmsm-javolution-serializer-1.9.4.jarspymemcached-2.11.1.jar/usr/local/tomcat/lib/ m1和c2上安装memcached [root@m1~]#yuminstallmemcached [root@c2~]#yuminstallmemcached m1上安装nginx修改nginx的配置文件 [root@m1~]#yuminstallnginx [root@m1~]#vim/etc/nginx/nginx.conf #server外加入 upstreamtcsrvs{ server192.168.1.114:8080; server192.168.1.113:8080; } #server内加入 location~*\.(jsp|do)${ proxy_passhttp://tcsrvs; } [root@m1~]#nginx-t 启动服务 [root@m1~]#systemctlstartnginx.service [root@m1~]#systemctlstartmemcached [root@c2~]#systemctlstartmemcached 四、测试

资源下载

更多资源
优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

用户登录
用户注册