1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Nginx+Memcached+Tomcat集群配置实践(Sticky Session)

Nginx+Memcached+Tomcat集群配置实践(Sticky Session)

时间:2020-08-24 09:30:27

相关推荐

Nginx+Memcached+Tomcat集群配置实践(Sticky Session)

准备工作

创建一个简单的web应用,名为session。其中有两个页面,分别如下所示: 页面login.jsp[html]view plaincopy <%@pagelanguage="java"contentType="text/html;charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN"><html><head><title>登录页面</title><metahttp-equiv="pragma"content="no-cache"><metahttp-equiv="cache-control"content="no-cache"><metahttp-equiv="expires"content="0"><metahttp-equiv="keywords"content="keyword1,keyword2,keyword3"><metahttp-equiv="description"content="Thisismypage"></head><body><tablebgcolor="#F8C3C3"border="1"borderColor="#FF0000"align="center"width="260"height="160"><tr><tdheight="15"colspan="2"align="center"style="background-color:#000000;font-size:28px;color:#FFFF00"><b>用户登录</b></td></tr><formmethod="post"action="login"><tr><tdwidth="80"align="center"><b>用户名</b></td><td><inputtype="text"name="userName"value=""/></td></tr><tr><tdalign="center"><b>密码</b></td><td><inputtype="password"name="password"value=""/></td></tr><tr><tdcolspan="2"align="center"style="background-color:#000000;"><inputtype="submit"value="登录"/><inputtype="reset"value="重置"/></td></tr></form></table></body></html> 登录成功页面success.jsp[html]view plaincopy <%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%><!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN"><html><head><title>登录成功页面</title><metahttp-equiv="pragma"content="no-cache"><metahttp-equiv="cache-control"content="no-cache"><metahttp-equiv="expires"content="0"><metahttp-equiv="keywords"content="keyword1,keyword2,keyword3"><metahttp-equiv="description"content="Thisismypage"></head><%StringuserName=(String)request.getSession().getAttribute("userName");%><bodybgcolor="#000000"><tablewidth="500"height="200"align="center"border="1"style="background-color:#000000;"><tr><tdalign="center"style="background-color:#F8C3C3;color:#00FF00;font-weight:bold;font-size:30px">当前登录用户:<%=userName%></td></tr></table></body></html> 还有一个Servlet,负责请求的转发,并设置session数据,如下所示:[java]view plaincopy packageorg.shirdrn.cluster.tomcat.servlet;importjava.io.IOException;importjava.util.HashMap;importjava.util.Map;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;mons.logging.Log;mons.logging.LogFactory;publicclassLoginSevletextendsHttpServlet{privatestaticfinallongserialVersionUID=1L;privatestaticfinalLogLOG=LogFactory.getLog(LoginSevlet.class);privatestaticMap<String,String>accountDB=newHashMap<String,String>();static{accountDB.put("shirdrn","123456");accountDB.put("admin","999999");accountDB.put("dev","000888");accountDB.put("007","007007");}publicLoginSevlet(){super();}protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{this.doPost(request,response);}protectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{StringuserName=request.getParameter("userName");Stringpassword=request.getParameter("password");LOG.info("Rawinput:userName="+userName+",password="+password);if(userName!=null&&password!=null&&accountDB.containsKey(userName)&&accountDB.get(userName).equals(password)){LOG.info("Login;status=SUCCESS");request.getSession().setAttribute("userName",userName);request.getRequestDispatcher("success.jsp").forward(request,response);}else{LOG.info("Login;status=FAIL");request.getRequestDispatcher("login.jsp").forward(request,response);}}} 这里模拟了一个账号数据库,对用户的登录请求进行处理。 最后打成WAR包,部署到Tomcat集群中的每个结点上。 Memcached安装、配置、启动

在Ubuntu系统下,如果没有安装Memcached,可以执行如下命令进行安装:[plain]view plaincopy sudoapt-getinstallmemcached 然后,启动Memcached服务进程,这里,我启动了两个服务进程,分别监听端口11211、11311,启动命令如下所示:[plain]view plaincopy sudo/usr/bin/memcached-m64-d-umemcache-p11211-l192.168.1.104-c5000-P/tmp/n1-memcached.pidsudo/usr/bin/memcached-m64-d-umemcache-p11311-l192.168.1.104-c5000-P/tmp/n2-memcached.pid 查询Memcached服务状态:[plain]view plaincopy shirdrn@dev:~/servers/cluster/nginx_tomcat_memcached$ps-ef|grepmemcachedmemcache157810Jan25?00:00:00/usr/bin/memcached-m64-p11211-umemcache-l127.0.0.1memcache330010Jan25?00:00:00/usr/bin/memcached-m64-d-umemcache-p11211-l192.168.1.104-c5000-P/tmp/n1-memcached.pidmemcache33081000:00?00:00:00/usr/bin/memcached-m64-d-umemcache-p11311-l192.168.1.104-c5000-P/tmp/n2-memcached.pidshirdrn33183095000:00pts/500:00:00grep--color=automemcached

Tomcat集群配置

Tomcat 集群配置,集群中各个结点通过共享存储在缓存Memcached中session来实现session的共享:如果有一台机器上的Tomcat服务停掉 了,对于其他对等服务器上的session数据仍然可以从Memcached缓存中读取,从而不会发生session丢失的问题。 对于满足这种配置的实现方案,可以在/p/memcached-session-manager和上下载相关的jar文件。因为基于不同的序列化方案,可以有多种配置方法,下面是选择Javolution序列化框架,需要提供如下库文件: https://memcached-session-/files/memcached-session-manager-1.6.3.jarhttps://memcached-session-/files/memcached-session-manager-tc7-1.6.3.jarhttps://memcached-session-/files/msm-javolution-serializer-1.6.2.jarhttp://memcached-session-/svn/maven/javolution/javolution/5.4.3.1/javolution-5.4.3.1.jar/files/spymemcached-2.8.4.jar 下载上述jar文件,拷贝到$CATALINA_HOME/lib目录下,然后需要配置$CATALINA_HOME/conf/server.xml文件。 Tomcat集群中,每个结点的$CATALINA_HOME/conf/server.xml基本配置都是相同的,不同配置内容分别如下: 如果在同一台机器上,要保证各个服务端口不相冲突<Manager>元素中failoverNodes属性值不同 例如,我们在同一台机器上配置了两个Tomcat服务器实例,所在目录分别为tomcat-1和tomcat-2,对应的conf/server.xml配置内容如下: tomcat-1/conf/server.xml[html]view plaincopy <?xmlversion='1.0'encoding='utf-8'?><Serverport="8085"shutdown="SHUTDOWN"><ListenerclassName="org.apache.catalina.core.AprLifecycleListener"SSLEngine="on"/><ListenerclassName="org.apache.catalina.core.JasperListener"/><ListenerclassName="org.apache.catalina.core.JreMemoryLeakPreventionListener"/><ListenerclassName="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"/><ListenerclassName="org.apache.catalina.core.ThreadLocalLeakPreventionListener"/><GlobalNamingResources><Resourcename="UserDatabase"auth="Container"type="org.apache.catalina.UserDatabase"description="Userdatabasethatcanbeupdatedandsaved"factory="org.apache.catalina.users.MemoryUserDatabaseFactory"pathname="conf/tomcat-users.xml"/></GlobalNamingResources><Servicename="Catalina"><Connectorport="8088"protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443"/><Connectorport="8089"protocol="AJP/1.3"redirectPort="8443"/><Enginename="Catalina"defaultHost="localhost"jvmRoute="tomcat1"><RealmclassName="org.apache.catalina.realm.LockOutRealm"><RealmclassName="org.apache.catalina.realm.UserDatabaseRealm"resourceName="UserDatabase"/></Realm><Hostname="localhost"appBase="webapps"unpackWARs="true"autoDeploy="true"deployOnStartup="true"><ContextdocBase="/home/shirdrn/servers/cluster/nginx_tomcat_memcached/webapps/session.war"path="/session"reloadable="true"><ManagerclassName="de.javakaffee.web.msm.MemcachedBackupSessionManager"memcachedNodes="n1:192.168.1.104:11211,n2:192.168.1.104:11311"failoverNodes="n1"requestUriIgnorePattern=".*\.(png|gif|jpg|css|js)$"sessionBackupAsync="false"sessionBackupTimeout="100"transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"copyCollectionsForSerialization="false"/></Context><ValveclassName="org.apache.catalina.valves.AccessLogValve"directory="logs"prefix="localhost_access_log."suffix=".txt"pattern="%h%l%u%t"%r"%s%b"/></Host></Engine></Service></Server> 这里面,failover的Memcached结点是n1,也就是说,如果tomcat-1和n1在同一台机器上的话,session数据会优先复制到存储到Memcached结点n2,这样即使n1所在的结点宕机了,n2所在结点仍然存储了之前的session数据。 tomcat-2/conf/server.xml[html]view plaincopy <?xmlversion='1.0'encoding='utf-8'?><Serverport="9085"shutdown="SHUTDOWN"><ListenerclassName="org.apache.catalina.core.AprLifecycleListener"SSLEngine="on"/><ListenerclassName="org.apache.catalina.core.JasperListener"/><ListenerclassName="org.apache.catalina.core.JreMemoryLeakPreventionListener"/><ListenerclassName="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"/><ListenerclassName="org.apache.catalina.core.ThreadLocalLeakPreventionListener"/><GlobalNamingResources><Resourcename="UserDatabase"auth="Container"type="org.apache.catalina.UserDatabase"description="Userdatabasethatcanbeupdatedandsaved"factory="org.apache.catalina.users.MemoryUserDatabaseFactory"pathname="conf/tomcat-users.xml"/></GlobalNamingResources><Servicename="Catalina"><Connectorport="9088"protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="9443"/><Connectorport="9089"protocol="AJP/1.3"redirectPort="9443"/><Enginename="Catalina"defaultHost="localhost"jvmRoute="tomcat1"><RealmclassName="org.apache.catalina.realm.LockOutRealm"><RealmclassName="org.apache.catalina.realm.UserDatabaseRealm"resourceName="UserDatabase"/></Realm><Hostname="localhost"appBase="webapps"unpackWARs="true"autoDeploy="true"deployOnStartup="true"><ContextdocBase="/home/shirdrn/servers/cluster/nginx_tomcat_memcached/webapps/session.war"path="/session"reloadable="true"><ManagerclassName="de.javakaffee.web.msm.MemcachedBackupSessionManager"memcachedNodes="n1:192.168.1.104:11211,n2:192.168.1.104:11311"failoverNodes="n2"requestUriIgnorePattern=".*\.(png|gif|jpg|css|js)$"sessionBackupAsync="false"sessionBackupTimeout="100"transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"copyCollectionsForSerialization="false"/></Context><ValveclassName="org.apache.catalina.valves.AccessLogValve"directory="logs"prefix="localhost_access_log."suffix=".txt"pattern="%h%l%u%t"%r"%s%b"/></Host></Engine></Service></Server> 和上面 类似,failover的Memcached结点是n2,也就是说,如果tomcat-2和n2在同一台机器上的话,Session数据会优先复制到存储 到Memcached结点n1,这样即使n2所在的结点宕机了,n1所在结点仍然存储了之前的Session数据。

上面的 配置实现了Tomcat集群中,通过Memcached实现了Sticky Session(粘性Session),主要是通过配置failover结点来达到目的的。如果采用Non-sticky Session方式,就不需要考虑failover的问题,详细配置扩参考文档(/p/memcached-session-manager/wiki/SetupAndConfiguration),下面截取一个片段: 分别启动tomcat-1和tomcat-2,如下所示:[plain]view plaincopy shirdrn@dev:~/servers/cluster/nginx_tomcat_memcached$tomcat-1/bin/catalina.shstartUsingCATALINA_BASE:/home/shirdrn/servers/cluster/nginx_tomcat_memcached/tomcat-1UsingCATALINA_HOME:/home/shirdrn/servers/cluster/nginx_tomcat_memcached/tomcat-1UsingCATALINA_TMPDIR:/home/shirdrn/servers/cluster/nginx_tomcat_memcached/tomcat-1/tempUsingJRE_HOME:/home/hadoop/installation/jdk1.6.0_30UsingCLASSPATH:/home/shirdrn/servers/cluster/nginx_tomcat_memcached/tomcat-1/bin/bootstrap.jar:/home/shirdrn/servers/cluster/nginx_tomcat_memcached/tomcat-1/bin/tomcat-juli.jarshirdrn@dev:~/servers/cluster/nginx_tomcat_memcached$tomcat-2/bin/catalina.shstartUsingCATALINA_BASE:/home/shirdrn/servers/cluster/nginx_tomcat_memcached/tomcat-2UsingCATALINA_HOME:/home/shirdrn/servers/cluster/nginx_tomcat_memcached/tomcat-2UsingCATALINA_TMPDIR:/home/shirdrn/servers/cluster/nginx_tomcat_memcached/tomcat-2/tempUsingJRE_HOME:/home/hadoop/installation/jdk1.6.0_30UsingCLASSPATH:/home/shirdrn/servers/cluster/nginx_tomcat_memcached/tomcat-2/bin/bootstrap.jar:/home/shirdrn/servers/cluster/nginx_tomcat_memcached/tomcat-2/bin/tomcat-juli.jar 可以查看两个tomcat的启动日志,对比一下: tomcat-1的日志[plain]view plaincopy shirdrn@dev:~/servers/cluster/nginx_tomcat_memcached$tail-100ftomcat-1/logs/catalina.outJan26,12:03:25AMorg.apache.catalina.core.AprLifecycleListenerinitINFO:TheAPRbasedApacheTomcatNativelibrarywhichallowsoptimalperformanceinproductionenvironmentswasnotfoundonthejava.library.path:/home/hadoop/installation/jdk1.6.0_30/jre/lib/i386/client:/home/hadoop/installation/jdk1.6.0_30/jre/lib/i386:/home/hadoop/installation/jdk1.6.0_30/jre/../lib/i386:/usr/java/packages/lib/i386:/lib:/usr/libJan26,12:03:26AMorg.apache.coyote.AbstractProtocolinitINFO:InitializingProtocolHandler["http-bio-8088"]Jan26,12:03:26AMorg.apache.coyote.AbstractProtocolinitINFO:InitializingProtocolHandler["ajp-bio-8089"]Jan26,12:03:26AMorg.apache.catalina.startup.CatalinaloadINFO:Initializationprocessedin1743msJan26,12:03:26AMorg.apache.catalina.core.StandardServicestartInternalINFO:StartingserviceCatalinaJan26,12:03:26AMorg.apache.catalina.core.StandardEnginestartInternalINFO:StartingServletEngine:ApacheTomcat/7.0.26Jan26,12:03:27AMde.javakaffee.web.msm.MemcachedSessionServicestartInternalINFO:MemcachedSessionServicestartsinitialization...(configurednodesdefinitionn1:192.168.1.104:11211,n2:192.168.1.104:11311,failovernodesn1)-01-2600:03:27.441INFOnet.spy.memcached.MemcachedConnection:Added{QAsa=/192.168.1.104:11211,#Rops=0,#Wops=0,#iq=0,topRop=null,topWop=null,toWrite=0,interested=0}toconnectqueue-01-2600:03:27.442INFOnet.spy.memcached.MemcachedConnection:Added{QAsa=/192.168.1.104:11311,#Rops=0,#Wops=0,#iq=0,topRop=null,topWop=null,toWrite=0,interested=0}toconnectqueueJan26,12:03:27AMde.javakaffee.web.msm.RequestTrackingHostValve<init>INFO:SettingignorePatternto.*\.(png|gif|jpg|css|js)$-01-2600:03:27.459INFOnet.spy.memcached.MemcachedConnection:Connectionstatechangedforsun.nio.ch.SelectionKeyImpl@5b0668-01-2600:03:27.460INFOnet.spy.memcached.MemcachedConnection:Connectionstatechangedforsun.nio.ch.SelectionKeyImpl@1d5a0Jan26,12:03:27AMde.javakaffee.web.msm.MemcachedSessionServicesetLockingModeINFO:SettinglockingModetonullJan26,12:03:27AMde.javakaffee.web.msm.MemcachedSessionServicecreateTranscoderFactoryINFO:Creatingtranscoderfactoryde.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactoryJan26,12:03:27AMde.javakaffee.web.msm.MemcachedSessionServicestartInternalINFO:MemcachedSessionServicefinishedinitialization,stickytrue,operationtimeout1000,withnodeids[n2]andfailovernodeids[n1]Jan26,12:03:27AMorg.apache.catalina.startup.HostConfigdeployDirectoryINFO:Deployingwebapplicationdirectory/home/shirdrn/servers/cluster/nginx_tomcat_memcached/tomcat-1/webapps/host-managerJan26,12:03:27AMorg.apache.catalina.startup.HostConfigdeployDirectoryINFO:Deployingwebapplicationdirectory/home/shirdrn/servers/cluster/nginx_tomcat_memcached/tomcat-1/webapps/managerJan26,12:03:27AMorg.apache.catalina.startup.HostConfigdeployDirectoryINFO:Deployingwebapplicationdirectory/home/shirdrn/servers/cluster/nginx_tomcat_memcached/tomcat-1/webapps/docsJan26,12:03:27AMorg.apache.catalina.startup.HostConfigdeployDirectoryINFO:Deployingwebapplicationdirectory/home/shirdrn/servers/cluster/nginx_tomcat_memcached/tomcat-1/webapps/examplesJan26,12:03:28AMorg.apache.catalina.startup.HostConfigdeployDirectoryINFO:Deployingwebapplicationdirectory/home/shirdrn/servers/cluster/nginx_tomcat_memcached/tomcat-1/webapps/ROOTJan26,12:03:28AMorg.apache.coyote.AbstractProtocolstartINFO:StartingProtocolHandler["http-bio-8088"]Jan26,12:03:28AMorg.apache.coyote.AbstractProtocolstartINFO:StartingProtocolHandler["ajp-bio-8089"]Jan26,12:03:28AMorg.apache.catalina.startup.CatalinastartINFO:Serverstartupin1487ms tomcat-2的日志[plain]view plaincopy shirdrn@dev:~/servers/cluster/nginx_tomcat_memcached$tail-100ftomcat-2/logs/catalina.outJan26,12:04:34AMorg.apache.catalina.core.AprLifecycleListenerinitINFO:TheAPRbasedApacheTomcatNativelibrarywhichallowsoptimalperformanceinproductionenvironmentswasnotfoundonthejava.library.path:/home/hadoop/installation/jdk1.6.0_30/jre/lib/i386/client:/home/hadoop/installation/jdk1.6.0_30/jre/lib/i386:/home/hadoop/installation/jdk1.6.0_30/jre/../lib/i386:/usr/java/packages/lib/i386:/lib:/usr/libJan26,12:04:34AMorg.apache.coyote.AbstractProtocolinitINFO:InitializingProtocolHandler["http-bio-9088"]Jan26,12:04:34AMorg.apache.coyote.AbstractProtocolinitINFO:InitializingProtocolHandler["ajp-bio-9089"]Jan26,12:04:34AMorg.apache.catalina.startup.CatalinaloadINFO:Initializationprocessedin742msJan26,12:04:34AMorg.apache.catalina.core.StandardServicestartInternalINFO:StartingserviceCatalinaJan26,12:04:34AMorg.apache.catalina.core.StandardEnginestartInternalINFO:StartingServletEngine:ApacheTomcat/7.0.26Jan26,12:05:07AMorg.apache.catalina.util.SessionIdGeneratorcreateSecureRandomINFO:CreationofSecureRandominstanceforsessionIDgenerationusing[SHA1PRNG]took[33,094]milliseconds.Jan26,12:05:07AMde.javakaffee.web.msm.MemcachedSessionServicestartInternalINFO:MemcachedSessionServicestartsinitialization...(configurednodesdefinitionn1:192.168.1.104:11211,n2:192.168.1.104:11311,failovernodesn2)-01-2600:05:07.873INFOnet.spy.memcached.MemcachedConnection:Added{QAsa=/192.168.1.104:11211,#Rops=0,#Wops=0,#iq=0,topRop=null,topWop=null,toWrite=0,interested=0}toconnectqueue-01-2600:05:07.876INFOnet.spy.memcached.MemcachedConnection:Added{QAsa=/192.168.1.104:11311,#Rops=0,#Wops=0,#iq=0,topRop=null,topWop=null,toWrite=0,interested=0}toconnectqueueJan26,12:05:07AMde.javakaffee.web.msm.RequestTrackingHostValve<init>INFO:SettingignorePatternto.*\.(png|gif|jpg|css|js)$-01-2600:05:07.896INFOnet.spy.memcached.MemcachedConnection:Connectionstatechangedforsun.nio.ch.SelectionKeyImpl@701a27-01-2600:05:07.897INFOnet.spy.memcached.MemcachedConnection:Connectionstatechangedforsun.nio.ch.SelectionKeyImpl@1d5a0Jan26,12:05:07AMde.javakaffee.web.msm.MemcachedSessionServicesetLockingModeINFO:SettinglockingModetonullJan26,12:05:07AMde.javakaffee.web.msm.MemcachedSessionServicecreateTranscoderFactoryINFO:Creatingtranscoderfactoryde.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactoryJan26,12:05:07AMde.javakaffee.web.msm.MemcachedSessionServicestartInternalINFO:MemcachedSessionServicefinishedinitialization,stickytrue,operationtimeout1000,withnodeids[n1]andfailovernodeids[n2]Jan26,12:05:08AMorg.apache.catalina.startup.HostConfigdeployDirectoryINFO:Deployingwebapplicationdirectory/home/shirdrn/servers/cluster/nginx_tomcat_memcached/tomcat-2/webapps/host-managerJan26,12:05:08AMorg.apache.catalina.startup.HostConfigdeployDirectoryINFO:Deployingwebapplicationdirectory/home/shirdrn/servers/cluster/nginx_tomcat_memcached/tomcat-2/webapps/managerJan26,12:05:08AMorg.apache.catalina.startup.HostConfigdeployDirectoryINFO:Deployingwebapplicationdirectory/home/shirdrn/servers/cluster/nginx_tomcat_memcached/tomcat-2/webapps/docsJan26,12:05:08AMorg.apache.catalina.startup.HostConfigdeployDirectoryINFO:Deployingwebapplicationdirectory/home/shirdrn/servers/cluster/nginx_tomcat_memcached/tomcat-2/webapps/examplesJan26,12:05:08AMorg.apache.catalina.startup.HostConfigdeployDirectoryINFO:Deployingwebapplicationdirectory/home/shirdrn/servers/cluster/nginx_tomcat_memcached/tomcat-2/webapps/ROOTJan26,12:05:08AMorg.apache.coyote.AbstractProtocolstartINFO:StartingProtocolHandler["http-bio-9088"]Jan26,12:05:08AMorg.apache.coyote.AbstractProtocolstartINFO:StartingProtocolHandler["ajp-bio-9089"]Jan26,12:05:08AMorg.apache.catalina.startup.CatalinastartINFO:Serverstartupin34163ms 已经成功启动了。

Nginx安装、配置、启动

在Ubuntu系统下,如果没有安装Nginx,可以执行如下命令进行安装:[plain]view plaincopy sudoapt-getinstallnginx 默认情况下,Nginx使用默认的配置文件/etc/nginx/nginx.conf,该配置文件直接包含了虚拟目录配置文件/etc/nginx/sites-available/default,修改该文件的内容为,如下所示:[plain]view plaincopy #Youmayaddhereyour#server{#...#}#statementsforeachofyourvirtualhoststothisfile###YoushouldlookatthefollowingURL'sinordertograspasolidunderstanding#ofNginxconfigurationfilesinordertofullyunleashthepowerofNginx.#/Pitfalls#/QuickStart#/Configuration##Generally,youwillwanttomovethisfilesomewhere,andstartwithaclean#filebutkeepthisaroundforreference.Orjustdisableinsites-enabled.##Pleasesee/usr/share/doc/nginx-doc/examples/formoredetailedexamples.##{server192.168.1.104:8088weight=1;server192.168.1.104:9088weight=1;}server{#listen80;##listenforipv4;thislineisdefaultandimplied#listen[::]:80defaultipv6only=on;##listenforipv6root/usr/share/nginx/www/session;#session是我们配置的虚拟目录,实际直接指向Tomcat下名为session的web应用indexindex.htmlindex.htm;#Makesiteaccessiblefromhttp://localhost/#######server_namelocalhost;;#Nginx服务所在主机charsetutf-8;location/{proxy_pass;#直接代理tomcat集群proxy_set_headerX-Real-IP$remote_addr;client_max_body_size100m;#Firstattempttoserverequestasfile,then#asdirectory,thenfallbacktoindex.html#######try_files$uri$uri//index.html;#Uncommenttoenablenaxsionthislocation#include/etc/nginx/naxsi.rules}location~^/(WEB-INF)/{#禁止访问Tomcat下web应用的WEB-INF目录下的资源denyall;}location/doc/{alias/usr/share/doc/;autoindexon;allow127.0.0.1;denyall;}#Onlyfornginx-naxsi:processdeniedrequests#location/RequestDenied{#Forexample,returnanerrorcode#return418;#}#error_page404/404.html;#redirectservererrorpagestothestaticpage/50x.html##error_page500502503504/50x.html;#location=/50x.html{#root/usr/share/nginx/www;#}#passthePHPscriptstoFastCGIserverlisteningon127.0.0.1:9000##location~\.php${#fastcgi_split_path_info^(.+\.php)(/.+)$;##NOTE:Youshouldhave"cgi.fix_pathinfo=0;"inphp.ini###Withphp5-cgialone:#fastcgi_pass127.0.0.1:9000;##Withphp5-fpm:#fastcgi_passunix:/var/run/php5-fpm.sock;#fastcgi_indexindex.php;#includefastcgi_params;#}#denyaccessto.htaccessfiles,ifApache'sdocumentroot#concurswithnginx'sone##location~/\.ht{#denyall;#}}#anothervirtualhostusingmixofIP-,name-,andport-basedconfiguration##server{#listen8000;#listensomename:8080;#server_namesomenamealiasanother.alias;#roothtml;#indexindex.htmlindex.htm;##location/{#try_files$uri$uri//index.html;#}#}#HTTPSserver##server{#listen443;#server_namelocalhost;##roothtml;#indexindex.htmlindex.htm;##sslon;#ssl_certificatecert.pem;#ssl_certificate_keycert.key;##ssl_session_timeout5m;##ssl_protocolsSSLv3TLSv1;#ssl_ciphersALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv3:+EXP;#ssl_prefer_server_cipherson;##location/{#try_files$uri$uri//index.html;#}#} 上面配置中根目录为/usr/share/nginx/www,因为我们使用到了一个虚拟目录来对应Tomcat下部署的web应用的path,所以需要在/usr/share/nginx/www下面创建这个对应的虚拟目录:[plain]view plaincopy shirdrn@dev:~/servers/cluster/nginx_tomcat_memcached$sudomkdir/usr/share/nginx/www/session 最后,可以启动Nginx服务器,执行如下命令:[plain]view plaincopy shirdrn@dev:~$sudo/etc/init.d/nginxstart 查询Nginx服务启动状态:[plain]view plaincopy shirdrn@dev:~/servers/cluster/nginx_tomcat_memcached$sudops-ef|grepnginxroot319910Jan25?00:00:00nginx:masterprocess/usr/sbin/nginxwww-data31990Jan25?00:00:00nginx:workerprocesswww-data31990Jan25?00:00:00nginx:workerprocesswww-data31990Jan25?00:00:00nginx:workerprocesswww-data320331990Jan25?00:00:00nginx:workerprocessshirdrn33273095000:01pts/500:00:00grep--color=autonginx 这是就可以通过Nginx访问(代理)Web应用首页了。

集群验证

上面配置完成,服务都已经启动成功,可以直接请求链接/session,就会直接访问部署在Tomcat服务器上的Java Web应用,看到登录页面。 使用前面准备的Web应用session中账号数据进行模拟登录,就可以查看Memcached缓存的数据: telnet 192.168.1.104 11211 telnet到memcached服务端口,查看缓存统计数据。[plain]view plaincopy shirdrn@dev:~$telnet192.168.1.10411211Trying192.168.1.104...Connectedto192.168.1.104.Escapecharacteris'^]'.ERRORstatsSTATpid3300STATuptime2148STATtime1359131741STATversion1.4.13STATlibevent2.0.16-stableSTATpointer_size32STATrusage_user0.05STATrusage_system0.084005STATcurr_connections7STATtotal_connections9STATconnection_structures8STATreserved_fds20STATcmd_get23STATcmd_set6STATcmd_flush0STATcmd_touch0STATget_hits2STATget_misses21STATdelete_misses0STATdelete_hits0STATincr_misses0STATincr_hits0STATdecr_misses0STATdecr_hits0STATcas_misses0STATcas_hits0STATcas_badval0STATtouch_hits0STATtouch_misses0STATauth_cmds0STATauth_errors0STATbytes_read2675STATbytes_written2835STATlimit_maxbytes67108864STATaccepting_conns1STATlisten_disabled_num0STATthreads4STATconn_yields0STAThash_power_level16STAThash_bytes262144STAThash_is_expanding0STATexpired_unfetched0STATevicted_unfetched0STATbytes858STATcurr_items2STATtotal_items6STATevictions0STATreclaimed0END telnet 192.168.1.104 11311[plain]view plaincopy shirdrn@dev:~$telnet192.168.1.10411311Trying192.168.1.104...Connectedto192.168.1.104.Escapecharacteris'^]'.statsSTATpid3308STATuptime2398STATtime1359132000STATversion1.4.13STATlibevent2.0.16-stableSTATpointer_size32STATrusage_user0.004000STATrusage_system0.128008STATcurr_connections7STATtotal_connections9STATconnection_structures8STATreserved_fds20STATcmd_get1STATcmd_set2STATcmd_flush0STATcmd_touch0STATget_hits0STATget_misses1STATdelete_misses1STATdelete_hits0STATincr_misses0STATincr_hits0STATdecr_misses0STATdecr_hits0STATcas_misses0STATcas_hits0STATcas_badval0STATtouch_hits0STATtouch_misses0STATauth_cmds0STATauth_errors0STATbytes_read644STATbytes_written2109STATlimit_maxbytes67108864STATaccepting_conns1STATlisten_disabled_num0STATthreads4STATconn_yields0STAThash_power_level16STAThash_bytes262144STAThash_is_expanding0STATexpired_unfetched1STATevicted_unfetched0STATbytes0STATcurr_items0STATtotal_items2STATevictions0STATreclaimed1END

我们可以停掉某个Tomcat服务,然后观察Session会话数据的复制过程,能够保证当前集群中的会话数据不丢失,另一个结点仍然能提供基于该存在Session的服务。

参考链接

/p/memcached-session-manager/p/memcached-session-manager/wiki/SetupAndConfiguration/p/kryo/.cn/Nginx/topic/676347

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。