Loading... <h1 id="memcached-msm-实现tomcat-session保持" style="font-size: 2.6em;margin: 1.2em 0px 0.6em;font-family: inherit;line-height: 1.1;color: inherit"><span style="font-family: 楷体, 楷体_GB2312, SimKai">Memcached + MSM 实现Tomcat Session保持</span></h1> <hr /> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6"></p> <p class="note-tags "><code>tomcat</code> <code>memcached</code></p> <ul class=" list-paddingleft-2"> <li> <p>前言</p> </li> <li> <p>Memcached介绍</p> </li> <li> <p>MSM介绍</p> </li> <li> <p>实验拓扑</p> </li> <li> <p>实验环境</p> </li> <li> <p>实验步骤</p> </li> <ul class=" list-paddingleft-2"> <li> <p>安装配置Tomcat</p> </li> <li> <p>安装配置Nginx负载均衡</p> </li> <li> <p>安装配置Memcached + MSM</p> </li> </ul> <li> <p>总结</p> </li> <ul class=" list-paddingleft-2"></ul> </ul> <h2 id="前言" style="font-family: inherit;line-height: 1.1;color: inherit;margin: 1.2em 0px 0.6em;font-size: 2.15em">前言</h2> <blockquote><p style="margin-top: 0px;margin-bottom: 0px;font-size: 1em;line-height: 1.6"><span style="font-family: 黑体, SimHei;font-size: 16px">上篇文章我们实现了</span><code><span style="font-family: 黑体, SimHei;font-size: 16px">session sticky</span></code><span style="font-family: 黑体, SimHei;font-size: 16px">和</span><code><span style="font-family: 黑体, SimHei;font-size: 16px">session cluster</span></code><span style="font-family: 黑体, SimHei;font-size: 16px">实现用户</span><code><span style="font-family: 黑体, SimHei;font-size: 16px">session</span></code><span style="font-family: 黑体, SimHei;font-size: 16px">的保持, 这篇文章主要介绍使用</span><code><span style="font-family: 黑体, SimHei;font-size: 16px">Memcached + MSM</span></code><span style="font-family: 黑体, SimHei;font-size: 16px">来实现用户</span><code><span style="font-family: 黑体, SimHei;font-size: 16px">session</span></code><span style="font-family: 黑体, SimHei;font-size: 16px">的保持</span></p> </blockquote> <h2 id="memcached介绍" style="font-family: inherit;line-height: 1.1;color: inherit;margin: 1.2em 0px 0.6em;font-size: 2.15em">Memcached介绍</h2> <blockquote><p style="margin-top: 0px;margin-bottom: 1.1em;font-size: 1em;line-height: 1.6"><code><span style="font-family: 黑体, SimHei;font-size: 16px">Memcached</span></code><span style="font-family: 黑体, SimHei;font-size: 16px">是一款免费、开源、分布式的内存对象缓存系统, 用于减少数据库的负载, 加快</span><code><span style="font-family: 黑体, SimHei;font-size: 16px">web</span></code><span style="font-family: 黑体, SimHei;font-size: 16px">应用程序的访问. </span><code><span style="font-family: 黑体, SimHei;font-size: 16px">Memcached</span></code><span style="font-family: 黑体, SimHei;font-size: 16px">简单并且强大, 其简单的设计加快了部署, 易于开发, 缓存解决了面临的大量数据时很多的问题</span></p> <p style="margin-top: 0px;margin-bottom: 0px;font-size: 1em;line-height: 1.6"><span style="font-family: 黑体, SimHei;font-size: 16px">官方站点: </span><span style="font-family: 黑体, SimHei;font-size: 16px">http://memcached.org/</span></p> </blockquote> <h2 id="msm介绍" style="font-family: inherit;line-height: 1.1;color: inherit;margin: 1.2em 0px 0.6em;font-size: 2.15em">MSM介绍</h2> <blockquote><p style="margin-top: 0px;margin-bottom: 1.1em;font-size: 1em;line-height: 1.6"><code><span style="font-family: 黑体, SimHei;font-size: 16px">MSM(memcached session manager)</span></code><span style="font-family: 黑体, SimHei;font-size: 16px">, MSM是一款实现</span><code><span style="font-family: 黑体, SimHei;font-size: 16px">Tomcat</span></code><span style="font-family: 黑体, SimHei;font-size: 16px">会话保持的管理组件, 支持粘性和无粘性的配置, 目前可以在Tomcat6,7,8中使用, 并且支持</span><code><span style="font-family: 黑体, SimHei;font-size: 16px">Memcached</span></code><span style="font-family: 黑体, SimHei;font-size: 16px">会话故障转移</span></p> <p style="margin-top: 0px;margin-bottom: 0px;font-size: 1em;line-height: 1.6"><span style="font-family: 黑体, SimHei;font-size: 16px">GitHub </span><span style="font-family: 黑体, SimHei;font-size: 16px">https://github.com/magro/memcached-session-manager</span></p> </blockquote> <h2 id="实验拓扑" style="font-family: inherit;line-height: 1.1;color: inherit;margin: 1.2em 0px 0.6em;font-size: 2.15em">实验拓扑</h2> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6"><img src="//cto.wang/usr/uploads/2016/07/20160703163942-7.png" title="1461318379457724.png" alt="blob.png" /></p> <h2 id="实验环境" style="font-family: inherit;line-height: 1.1;color: inherit;margin: 1.2em 0px 0.6em;font-size: 2.15em">实验环境</h2> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6"><strong style="line-height: 1.6">由于我们虚拟机数量不够, 所以<code>Memcached</code>和<code>Tomcat</code>运行在同一节点</strong></p> <table> <thead style="line-height: 1.6"> <tr style="line-height: 1.6" class="firstRow"> <th>主机</th> <th>IP</th> <th>功用</th> </tr> </thead> <tbody style="line-height: 1.6"> <tr style="line-height: 1.6"> <td style="padding: 0.5em;line-height: 1.6;vertical-align: top">node1.anyisalin.com</td> <td style="padding: 0.5em;line-height: 1.6;vertical-align: top">172.16.1.2</td> <td style="padding: 0.5em;line-height: 1.6;vertical-align: top">Nginx</td> </tr> <tr style="line-height: 1.6"> <td style="padding: 0.5em;line-height: 1.6;vertical-align: top">node2.anyisalin.com</td> <td style="padding: 0.5em;line-height: 1.6;vertical-align: top">172.16.1.3</td> <td style="padding: 0.5em;line-height: 1.6;vertical-align: top">TomcatA,Memcached Node</td> </tr> <tr style="line-height: 1.6"> <td style="padding: 0.5em;line-height: 1.6;vertical-align: top">node3.anyisalin.com</td> <td style="padding: 0.5em;line-height: 1.6;vertical-align: top">172.16.1.4</td> <td style="padding: 0.5em;line-height: 1.6;vertical-align: top">TomcatB,Memcached Node</td> </tr> </tbody> </table> <h2 id="实验步骤" style="font-family: inherit;line-height: 1.1;color: inherit;margin: 1.2em 0px 0.6em;font-size: 2.15em">实验步骤</h2> <h3 id="安装配置tomcat" style="font-family: inherit;line-height: 1.6;color: inherit;margin: 1.2em 0px 0.6em;font-size: 1.7em">安装配置Tomcat</h3> <blockquote><p style="margin-top: 0px;margin-bottom: 0px;font-size: 1em;line-height: 1.6"><span style="font-family: 黑体, SimHei;font-size: 16px">我们首先配置</span><code><span style="font-family: 黑体, SimHei;font-size: 16px">Tomcat</span></code><span style="font-family: 黑体, SimHei;font-size: 16px">, 安装过程这里不做叙述, 不明白的可以看我上篇博客: </span><span style="font-family: 黑体, SimHei;font-size: 16px">tomcat基础进阶</span></p> </blockquote> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6"><strong style="line-height: 1.6">安装<code>Tomcat</code>,<code>node2,3</code>都要操作</strong></p> <pre class="prettyprint hljs-light"><code class="hljs crystal">[root<span class="hljs-variable" style="line-height: 1.6">@node1</span> ~]<span class="hljs-comment"># [root@node1 ~]# wget http://mirrors.cnnic.cn/apache/tomcat/tomcat-8/v8.0.33/bin/apache-tomcat-8.0.33.tar.gz</span><br />[root<span class="hljs-variable" style="line-height: 1.6">@node1</span> ~]<span class="hljs-comment"># tar xf apache-tomcat-8.0.33.tar.gz -C /usr/local/</span><br />[root<span class="hljs-variable" style="line-height: 1.6">@node1</span> ~]<span class="hljs-comment"># cd /usr/local ; ln -sv apache-tomcat-8.0.33 tomcat ; cd ~</span><br />[root<span class="hljs-variable" style="line-height: 1.6">@node1</span> ~]<span class="hljs-comment"># wget http://download.oracle.com/otn-pub/java/jdk/8u77-b03/jdk-8u77-linux-x64.rpm #如果下载出错, 使用浏览器下载</span><br />[root<span class="hljs-variable" style="line-height: 1.6">@node1</span> ~]<span class="hljs-comment"># rpm -ivh jdk-8u77-linux-x64.rpm #安装JDK</span><br /><br />[root<span class="hljs-variable" style="line-height: 1.6">@node1</span> ~]<span class="hljs-comment"># vim /etc/profile.d/java.sh #定义JAVA_HOME</span><br />export <span class="hljs-constant">JAVA_HOME</span>=<span class="hljs-regexp">/usr/java</span><span class="hljs-regexp">/latest<br />export PATH=$JAVA_HOME/bin</span>:<span class="hljs-variable" style="line-height: 1.6">$PATH</span><br /><br />[root<span class="hljs-variable" style="line-height: 1.6">@node1</span> ~]<span class="hljs-comment"># vim /etc/profile.d/tomcat.sh #配置tomcat的环境变量</span><br />export <span class="hljs-constant">CATALINA_BASE</span>=<span class="hljs-regexp">/usr/local</span><span class="hljs-regexp">/tomcat<br />export PATH=$CATALINA_BASE/bin</span>:<span class="hljs-variable" style="line-height: 1.6">$PATH</span><br /><br />[root<span class="hljs-variable" style="line-height: 1.6">@node1</span> ~]<span class="hljs-comment"># source /etc/profile.d/tomcat.sh</span><br />[root<span class="hljs-variable" style="line-height: 1.6">@node1</span> ~]<span class="hljs-comment"># source /etc/profile.d/java.sh</span><br /></code></pre> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6"><strong style="line-height: 1.6">配置虚拟主机</strong></p> <pre class="prettyprint hljs-light"><code class="hljs perl">[root<span class="hljs-variable" style="line-height: 1.6">@node2</span> ~]<span class="hljs-comment"># vim /usr/local/tomcat/conf/server.xml </span><br /><br /><span class="hljs-comment">#设置默认虚拟主机为web1.anyisalin.com #node3的jvmRoute设置为TomcatB</span><br /><Engine name=<span class="hljs-string">"Catalina"</span> defaultHost=<span class="hljs-string">"web1.anyisalin.com"</span> jvmRoute=<span class="hljs-string">"TomcatA"</span>> <br /><br /><br /><span class="hljs-comment">#添加虚拟主机</span><br /><Host name=<span class="hljs-string">"web1.anyisalin.com"</span> appBase=<span class="hljs-string">"/data/webapps/"</span> unpackWARS=<span class="hljs-string">"true"</span> autoDeploy=<span class="hljs-string">"true"</span>><br /> <Context path=<span class="hljs-string">""</span> docBase=<span class="hljs-string">"/data/webapps"</span> reloadable=<span class="hljs-string">"true"</span> /><br /> <Valve className=<span class="hljs-string">"org.apache.catalina.valves.AccessLogValve"</span> directory=<span class="hljs-string">"/data/logs"</span><br /> prefix=<span class="hljs-string">"web1_access_log."</span> suffix=<span class="hljs-string">".txt"</span><br /> pattern=<span class="hljs-string">"<span class="hljs-variable" style="line-height: 1.6">%h</span> <span class="hljs-variable" style="line-height: 1.6">%l</span> <span class="hljs-variable" style="line-height: 1.6">%u</span> <span class="hljs-variable" style="line-height: 1.6">%t</span> &quot;<span class="hljs-variable" style="line-height: 1.6">%r</span>&quot; <span class="hljs-variable" style="line-height: 1.6">%s</span> <span class="hljs-variable" style="line-height: 1.6">%b</span>"</span> /><br /><<span class="hljs-regexp">/Host><br /><br />[root@node2 ~]# mkdir -PV /data</span><span class="hljs-regexp">/webapps/</span>{WEB-INF,META-INF,classes,lib} <span class="hljs-comment">#创建目录</span><br /></code></pre> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6"><strong style="line-height: 1.6"><code>node2</code>创建网页文件</strong></p> <pre class="prettyprint hljs-light"><code class="hljs erb"><span class="xml" style="line-height: 1.6">[root@node2 ~]# cd /data/webapps/<br /><br />[root@node2 ~]# vim index.jsp #创建网页文件<br /></span><%<span class="ruby" style="line-height: 1.6">@ page language=<span class="hljs-string">"java"</span> </span>%><span class="xml" style="line-height: 1.6"><br /><span class="hljs-tag" style="line-height: 1.6"><<span class="hljs-title" style="line-height: 1.6;font-weight: bold">html</span>></span><br /> <span class="hljs-tag" style="line-height: 1.6"><<span class="hljs-title" style="line-height: 1.6;font-weight: bold">head</span>></span><span class="hljs-tag" style="line-height: 1.6"><<span class="hljs-title" style="line-height: 1.6;font-weight: bold">title</span>></span>TomcatA<span class="hljs-tag" style="line-height: 1.6"></<span class="hljs-title" style="line-height: 1.6;font-weight: bold">title</span>></span><span class="hljs-tag" style="line-height: 1.6"></<span class="hljs-title" style="line-height: 1.6;font-weight: bold">head</span>></span><br /> <span class="hljs-tag" style="line-height: 1.6"><<span class="hljs-title" style="line-height: 1.6;font-weight: bold">body</span>></span><br /> <span class="hljs-tag" style="line-height: 1.6"><<span class="hljs-title" style="line-height: 1.6;font-weight: bold">h1</span>></span><span class="hljs-tag" style="line-height: 1.6"><<span class="hljs-title" style="line-height: 1.6;font-weight: bold">font</span> <span class="hljs-attribute" style="line-height: 1.6">color</span>=<span class="hljs-value">"red"</span>></span>TomcatA.magedu.com<span class="hljs-tag" style="line-height: 1.6"></<span class="hljs-title" style="line-height: 1.6;font-weight: bold">font</span>></span><span class="hljs-tag" style="line-height: 1.6"></<span class="hljs-title" style="line-height: 1.6;font-weight: bold">h1</span>></span><br /> <span class="hljs-tag" style="line-height: 1.6"><<span class="hljs-title" style="line-height: 1.6;font-weight: bold">table</span> <span class="hljs-attribute" style="line-height: 1.6">align</span>=<span class="hljs-value">"centre"</span> <span class="hljs-attribute" style="line-height: 1.6">border</span>=<span class="hljs-value">"1"</span>></span><br /> <span class="hljs-tag" style="line-height: 1.6"><<span class="hljs-title" style="line-height: 1.6;font-weight: bold">tr</span>></span><br /> <span class="hljs-tag" style="line-height: 1.6"><<span class="hljs-title" style="line-height: 1.6;font-weight: bold">td</span>></span>Session ID<span class="hljs-tag" style="line-height: 1.6"></<span class="hljs-title" style="line-height: 1.6;font-weight: bold">td</span>></span><br /> </span><%<span class="ruby" style="line-height: 1.6"> session.setAttribute(<span class="hljs-string">"magedu.com"</span>,<span class="hljs-string">"magedu.com"</span>); </span>%><span class="xml" style="line-height: 1.6"><br /> <span class="hljs-tag" style="line-height: 1.6"><<span class="hljs-title" style="line-height: 1.6;font-weight: bold">td</span>></span></span><%=<span class="ruby" style="line-height: 1.6"> session.getId() </span>%><span class="xml" style="line-height: 1.6"><span class="hljs-tag" style="line-height: 1.6"></<span class="hljs-title" style="line-height: 1.6;font-weight: bold">td</span>></span><br /> <span class="hljs-tag" style="line-height: 1.6"></<span class="hljs-title" style="line-height: 1.6;font-weight: bold">tr</span>></span><br /> <span class="hljs-tag" style="line-height: 1.6"><<span class="hljs-title" style="line-height: 1.6;font-weight: bold">tr</span>></span><br /> <span class="hljs-tag" style="line-height: 1.6"><<span class="hljs-title" style="line-height: 1.6;font-weight: bold">td</span>></span>Created on<span class="hljs-tag" style="line-height: 1.6"></<span class="hljs-title" style="line-height: 1.6;font-weight: bold">td</span>></span><br /> <span class="hljs-tag" style="line-height: 1.6"><<span class="hljs-title" style="line-height: 1.6;font-weight: bold">td</span>></span></span><%=<span class="ruby" style="line-height: 1.6"> session.getCreationTime() </span>%><span class="xml" style="line-height: 1.6"><span class="hljs-tag" style="line-height: 1.6"></<span class="hljs-title" style="line-height: 1.6;font-weight: bold">td</span>></span><br /> <span class="hljs-tag" style="line-height: 1.6"></<span class="hljs-title" style="line-height: 1.6;font-weight: bold">tr</span>></span><br /> <span class="hljs-tag" style="line-height: 1.6"></<span class="hljs-title" style="line-height: 1.6;font-weight: bold">table</span>></span><br /> <span class="hljs-tag" style="line-height: 1.6"></<span class="hljs-title" style="line-height: 1.6;font-weight: bold">body</span>></span><br /><span class="hljs-tag" style="line-height: 1.6"></<span class="hljs-title" style="line-height: 1.6;font-weight: bold">html</span>></span><br /><br />[root@node2 webapps]# catalina.sh start #启动tomcat</span><br /></code></pre> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6"><strong style="line-height: 1.6"><code>node3</code>创建网页文件</strong></p> <pre class="prettyprint hljs-light"><code class="hljs erb"><span class="xml" style="line-height: 1.6">[root@node3 ~]# cd /data/webapps/<br /><br />[root@node3 ~]# vim index.jsp #创建网页文件<br /></span><%<span class="ruby" style="line-height: 1.6">@ page language=<span class="hljs-string">"java"</span> </span>%><span class="xml" style="line-height: 1.6"><br /><span class="hljs-tag" style="line-height: 1.6"><<span class="hljs-title" style="line-height: 1.6;font-weight: bold">html</span>></span><br /> <span class="hljs-tag" style="line-height: 1.6"><<span class="hljs-title" style="line-height: 1.6;font-weight: bold">head</span>></span><span class="hljs-tag" style="line-height: 1.6"><<span class="hljs-title" style="line-height: 1.6;font-weight: bold">title</span>></span>TomcatB<span class="hljs-tag" style="line-height: 1.6"></<span class="hljs-title" style="line-height: 1.6;font-weight: bold">title</span>></span><span class="hljs-tag" style="line-height: 1.6"></<span class="hljs-title" style="line-height: 1.6;font-weight: bold">head</span>></span><br /> <span class="hljs-tag" style="line-height: 1.6"><<span class="hljs-title" style="line-height: 1.6;font-weight: bold">body</span>></span><br /> <span class="hljs-tag" style="line-height: 1.6"><<span class="hljs-title" style="line-height: 1.6;font-weight: bold">h1</span>></span><span class="hljs-tag" style="line-height: 1.6"><<span class="hljs-title" style="line-height: 1.6;font-weight: bold">font</span> <span class="hljs-attribute" style="line-height: 1.6">color</span>=<span class="hljs-value">"blue"</span>></span>TomcatB.magedu.com<span class="hljs-tag" style="line-height: 1.6"></<span class="hljs-title" style="line-height: 1.6;font-weight: bold">font</span>></span><span class="hljs-tag" style="line-height: 1.6"></<span class="hljs-title" style="line-height: 1.6;font-weight: bold">h1</span>></span><br /> <span class="hljs-tag" style="line-height: 1.6"><<span class="hljs-title" style="line-height: 1.6;font-weight: bold">table</span> <span class="hljs-attribute" style="line-height: 1.6">align</span>=<span class="hljs-value">"centre"</span> <span class="hljs-attribute" style="line-height: 1.6">border</span>=<span class="hljs-value">"1"</span>></span><br /> <span class="hljs-tag" style="line-height: 1.6"><<span class="hljs-title" style="line-height: 1.6;font-weight: bold">tr</span>></span><br /> <span class="hljs-tag" style="line-height: 1.6"><<span class="hljs-title" style="line-height: 1.6;font-weight: bold">td</span>></span>Session ID<span class="hljs-tag" style="line-height: 1.6"></<span class="hljs-title" style="line-height: 1.6;font-weight: bold">td</span>></span><br /> </span><%<span class="ruby" style="line-height: 1.6"> session.setAttribute(<span class="hljs-string">"magedu.com"</span>,<span class="hljs-string">"magedu.com"</span>); </span>%><span class="xml" style="line-height: 1.6"><br /> <span class="hljs-tag" style="line-height: 1.6"><<span class="hljs-title" style="line-height: 1.6;font-weight: bold">td</span>></span></span><%=<span class="ruby" style="line-height: 1.6"> session.getId() </span>%><span class="xml" style="line-height: 1.6"><span class="hljs-tag" style="line-height: 1.6"></<span class="hljs-title" style="line-height: 1.6;font-weight: bold">td</span>></span><br /> <span class="hljs-tag" style="line-height: 1.6"></<span class="hljs-title" style="line-height: 1.6;font-weight: bold">tr</span>></span><br /> <span class="hljs-tag" style="line-height: 1.6"><<span class="hljs-title" style="line-height: 1.6;font-weight: bold">tr</span>></span><br /> <span class="hljs-tag" style="line-height: 1.6"><<span class="hljs-title" style="line-height: 1.6;font-weight: bold">td</span>></span>Created on<span class="hljs-tag" style="line-height: 1.6"></<span class="hljs-title" style="line-height: 1.6;font-weight: bold">td</span>></span><br /> <span class="hljs-tag" style="line-height: 1.6"><<span class="hljs-title" style="line-height: 1.6;font-weight: bold">td</span>></span></span><%=<span class="ruby" style="line-height: 1.6"> session.getCreationTime() </span>%><span class="xml" style="line-height: 1.6"><span class="hljs-tag" style="line-height: 1.6"></<span class="hljs-title" style="line-height: 1.6;font-weight: bold">td</span>></span><br /> <span class="hljs-tag" style="line-height: 1.6"></<span class="hljs-title" style="line-height: 1.6;font-weight: bold">tr</span>></span><br /> <span class="hljs-tag" style="line-height: 1.6"></<span class="hljs-title" style="line-height: 1.6;font-weight: bold">table</span>></span><br /> <span class="hljs-tag" style="line-height: 1.6"></<span class="hljs-title" style="line-height: 1.6;font-weight: bold">body</span>></span><br /><span class="hljs-tag" style="line-height: 1.6"></<span class="hljs-title" style="line-height: 1.6;font-weight: bold">html</span>></span><br /><br />[root@node3 webapps]# catalina.sh start #启动tomcat</span><br /></code></pre> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6"><strong style="line-height: 1.6">访问测试</strong></p> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6"><img src="//cto.wang/usr/uploads/2016/07/20160703163943-3.png" title="1461318397282844.png" alt="blob.png" /></p> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6"><img src="//cto.wang/usr/uploads/2016/07/20160703163943-80.png" title="1461318401708521.png" alt="blob.png" /></p> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6"></p> <h3 id="安装配置nginx负载均衡" style="font-family: inherit;line-height: 1.6;color: inherit;margin: 1.2em 0px 0.6em;font-size: 1.7em">安装配置Nginx负载均衡</h3> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6"><strong style="line-height: 1.6">安装<code>nginx</code></strong></p> <pre class="prettyprint hljs-light"><code class="hljs autoit">在node1上安装配置<br />[root<span class="hljs-constant">@node1</span> ~]<span class="hljs-preprocessor"># yum install nginx -y #确保有epel源</span><br /></code></pre> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6"><strong style="line-height: 1.6">配置<code>nginx</code></strong></p> <pre class="prettyprint hljs-light"><code class="hljs cpp">[root@node1 ~]<span class="hljs-preprocessor"># vim /etc/nginx/conf.d/default.conf #修改以下字段</span><br /> upstream tmcat_server {<br /> server <span class="hljs-number">172.16</span><span class="hljs-number">.1</span><span class="hljs-number">.3</span>:<span class="hljs-number">8080</span>;<br /> server <span class="hljs-number">172.16</span><span class="hljs-number">.1</span><span class="hljs-number">.4</span>:<span class="hljs-number">8080</span>;<br /> }<br /><br /> location / {<br /> proxy_pass http:<span class="hljs-comment">//tmcat_server;</span><br /> }<br /><br />[root@node1 ~]<span class="hljs-preprocessor"># service nginx start #启动nginx</span><br /></code></pre> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6"><strong style="line-height: 1.6">测试负载均衡效果</strong></p> <p><img src="//cto.wang/usr/uploads/2016/07/20160703163943-93.gif" title="1461318414265228.gif" /></p> <p></p> <h3 id="安装配置memcached-msm" style="font-family: inherit;line-height: 1.6;color: inherit;margin: 1.2em 0px 0.6em;font-size: 1.7em">安装配置Memcached + MSM</h3> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6"><strong style="line-height: 1.6">下面所有操作在<code>node2,node3</code>都需要执行</strong></p> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6"><strong style="line-height: 1.6">安装<code>Memcached</code></strong></p> <pre class="prettyprint hljs-light"><code class="hljs autoit">[root<span class="hljs-constant">@node2</span> ~]<span class="hljs-preprocessor"># yum install memcached -y #在node2上安装memcached</span><br />[root<span class="hljs-constant">@node3</span> ~]<span class="hljs-preprocessor"># yum install memcached -y #在node3上安装memcached</span><br /></code></pre> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6"><strong style="line-height: 1.6">下载<code>MSM</code>的类库文件到<code>/usr/local/tomcat/lib</code></strong> 下载地址</p> <pre class="prettyprint hljs-light"><code class="hljs cpp">[root@node2 ~]<span class="hljs-preprocessor"># cd /usr/local/tomcat/lib/ </span><br /><br /><span class="hljs-preprocessor">##我这里本地已经有这些文件了</span><br />[root@node2 ~]<span class="hljs-preprocessor"># mv javolution-<span class="hljs-number">5.5</span><span class="hljs-number">.1</span>.jar memcached-session-manager-tc7-<span class="hljs-number">1.8</span><span class="hljs-number">.2</span>.jar memcached-session-manager-<span class="hljs-number">1.8</span><span class="hljs-number">.2</span>.jar spymemcached-<span class="hljs-number">2.10</span><span class="hljs-number">.2</span>.jar msm-javolution-serializer-<span class="hljs-number">1.8</span><span class="hljs-number">.2</span>.jar /usr/local/tomcat/lib/</span><br /><br /></code></pre> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6"><strong style="line-height: 1.6">编辑<code>tomcat</code>配置文件</strong></p> <pre class="prettyprint hljs-light"><code class="hljs xml">在<span class="hljs-tag" style="line-height: 1.6"><<span class="hljs-title" style="line-height: 1.6;font-weight: bold">Host</span>></span>下的<span class="hljs-tag" style="line-height: 1.6"><<span class="hljs-title" style="line-height: 1.6;font-weight: bold">Context</span>></span> 中添加下面这些字段<br /><span class="hljs-tag" style="line-height: 1.6"><<span class="hljs-title" style="line-height: 1.6;font-weight: bold">Manager</span> <span class="hljs-attribute" style="line-height: 1.6">className</span>=<span class="hljs-value">"de.javakaffee.web.msm.MemcachedBackupSessionManager"</span><br /> <span class="hljs-attribute" style="line-height: 1.6">memcachedNodes</span>=<span class="hljs-value">"n1:172.16.1.3:11211,n2:172.16.2.4:11211"</span><br /> <span class="hljs-attribute" style="line-height: 1.6">failoverNodes</span>=<span class="hljs-value">"n2"</span><br /> <span class="hljs-attribute" style="line-height: 1.6">requestUriIgnorePattern</span>=<span class="hljs-value">".*\.(ico|png|gif|jpg|css|js)$"</span><br /> <span class="hljs-attribute" style="line-height: 1.6">transcoderFactoryClass</span>=<span class="hljs-value">"de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"</span><br /> /></span><br /></code></pre> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6"><strong style="line-height: 1.6">启动<code>Memcached</code>重启<code>Tomcat</code>并验证</strong></p> <pre class="prettyprint hljs-light"><code class="hljs autoit">[root<span class="hljs-constant">@node2</span> ~]<span class="hljs-preprocessor"># service memcached start</span><br />[root<span class="hljs-constant">@node2</span> ]<span class="hljs-preprocessor"># catalina.sh stop</span><br />[root<span class="hljs-constant">@node2</span> ]<span class="hljs-preprocessor"># catalina.sh start</span><br /><br />[root<span class="hljs-constant">@node3</span> ~]<span class="hljs-preprocessor"># service memcached start</span><br />[root<span class="hljs-constant">@node3</span> ]<span class="hljs-preprocessor"># catalina.sh stop</span><br />[root<span class="hljs-constant">@node3</span> ]<span class="hljs-preprocessor"># catalina.sh start</span><br /></code></pre> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6"><strong style="line-height: 1.6">测试</strong></p> <blockquote><p style="margin-top: 0px;margin-bottom: 0px;font-size: 1em;line-height: 1.6"><span style="font-family: 黑体, SimHei;font-size: 16px">看!我们通过</span><code><span style="font-family: 黑体, SimHei;font-size: 16px">MSM</span></code><span style="font-family: 黑体, SimHei;font-size: 16px">实现了</span><code><span style="font-family: 黑体, SimHei;font-size: 16px">session</span></code><span style="font-family: 黑体, SimHei;font-size: 16px">的绑定</span></p> </blockquote> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6"><img src="//cto.wang/usr/uploads/2016/07/20160703163943-64.gif" title="1461318414214894.gif" /></p> <h2 id="总结" style="font-family: inherit;line-height: 1.1;color: inherit;margin: 1.2em 0px 0.6em;font-size: 2.15em">总结</h2> <blockquote><p style="margin-top: 0px;margin-bottom: 1.1em;font-size: 1em;line-height: 1.6"><span style="font-family: 黑体, SimHei;font-size: 16px">本文主要介绍了通过</span><code><span style="font-family: 黑体, SimHei;font-size: 16px">MSM</span></code><span style="font-family: 黑体, SimHei;font-size: 16px">实现</span><code><span style="font-family: 黑体, SimHei;font-size: 16px">session server</span></code><span style="font-family: 黑体, SimHei;font-size: 16px">从而使客户端能够保持</span><code><span style="font-family: 黑体, SimHei;font-size: 16px">session</span></code><span style="font-family: 黑体, SimHei;font-size: 16px">, 总的来说还是很简单的, 毕竟</span><code><span style="font-family: 黑体, SimHei;font-size: 16px">Memcached</span></code><span style="font-family: 黑体, SimHei;font-size: 16px">配置简单, 但是要理解其中的原理还需要下一番功夫.</span></p> <p style="margin-top: 0px;margin-bottom: 0px;font-size: 1em;line-height: 1.6"><span style="font-family: 黑体, SimHei;font-size: 16px">作者水平很低, 如果有错误及时指出, 如果你觉得本文写的好请点一波赞~(≧▽≦)/~ <br />作者: AnyISaIln QQ: 1449472454 <br />感谢: MageEdu</span></p> </blockquote> <p></p> 最后修改:2021 年 12 月 10 日 10 : 53 AM © 允许规范转载 赞赏 如果觉得我的文章对你有用,请随意赞赏 赞赏作者 支付宝微信