1. 程式人生 > >Nginx+Redis+Tomcat實現負載均衡專案session共享

Nginx+Redis+Tomcat實現負載均衡專案session共享

                                <div class="article-copyright">                     版權宣告:本文為博主原創文章,未經博主允許不得轉載。                    https://blog.csdn.net/mlc1218559742/article/details/53158613                </div>                                             <link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-f76675cdea.css">                         <div class="htmledit_views">                  <p>本篇文章是繼前三篇文章實現的基礎上完成的,如果在閱讀過程中,有沒安裝或沒實現的功能,請參考前兩篇部落格。</p> <p><a href="http://blog.csdn.net/mlc1218559742/article/details/53103474" rel="nofollow" target="_blank">Linux系統下Nginx的安裝</a>&nbsp;:講述nginx在Linux系統下的安裝工程,以及設定為自啟動服務。<br></p> <p><a href="http://blog.csdn.net/mlc1218559742/article/details/53117520" rel="nofollow" target="_blank">Nginx反向代理轉發tomcat</a>&nbsp;:講述nginx反向代理原理,轉發tomcat實現過程以及動、靜資源分離處理。<br></p> <p><a href="http://blog.csdn.net/mlc1218559742/article/details/53128382" rel="nofollow" target="_blank">Nginx+Tomcat搭建高效能負載均衡叢集</a>:講述nginx和tomcat實現負載均衡。<br></p> <p><br></p> <p>1.執行環境要求</p> <p>nginx安裝成功,redis安裝成功。</p> <p>tomcat服務分為兩個,分別是:</p> <p> </p><table width="200" cellspacing="1" cellpadding="1" border="1"><tbody><tr><td>名稱</td> <td>IP</td> <td>埠</td> </tr><tr><td>tomcat1</td> <td>172.16.21.92</td> <td>8080</td> </tr><tr><td>tomcat2</td> <td>172.16.21.92</td> <td>8081</td> </tr></tbody></table><br><br><p>2.下載相關jar包</p> <p>jedis-2.5.2:<a href="http://central.maven.org/maven2/redis/clients/jedis/2.5.2/jedis-2.5.2.jar" rel="nofollow" target="_blank">http://central.maven.org/maven2/redis/clients/jedis/2.5.2/jedis-2.5.2.jar</a><br></p> <p>commons-pool2-2.0:<a href="http://central.maven.org/maven2/org/apache/commons/commons-pool2/2.0/commons-pool2-2.0.jar" rel="nofollow" target="_blank">http://central.maven.org/maven2/org/apache/commons/commons-pool2/2.0/commons-pool2-2.0.jar</a><br></p> <p>tomcat-redis-session-manager:<a href="http://download.csdn.net/detail/mlc1218559742/9682304" rel="nofollow" target="_blank">http://download.csdn.net/detail/mlc1218559742/9682304</a><br></p> <p>下載這三個jar包,分別放到兩個tomcat的lib目錄中。</p> <p><br></p> <p>3.修改context.xml</p> <p>將兩個tomcat的context.xml配置分別修改為如下圖所示;</p> <p><img src="https://img-blog.csdn.net/20161114151807289" alt=""><br></p> <p>新增內容為:</p> <p></p> <pre onclick="hljs.copyCode(event)"><code class="language-html hljs xml"><ol class="hljs-ln"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    <span class="hljs-tag">&lt;<span class="hljs-name">Valve</span> <span class="hljs-attr">className</span>=<span class="hljs-string">"com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve"</span> /&gt;</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    <span class="hljs-tag">&lt;<span class="hljs-name">Manager</span> <span class="hljs-attr">className</span>=<span class="hljs-string">"com.orangefunction.tomcat.redissessions.RedisSessionManager"</span></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">     <span class="hljs-attr">host</span>=<span class="hljs-string">"172.16.21.92"</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="4"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">     <span class="hljs-attr">port</span>=<span class="hljs-string">"7003"</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="5"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">     <span class="hljs-attr">database</span>=<span class="hljs-string">"0"</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="6"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">     <span class="hljs-attr">maxInactiveInterval</span>=<span class="hljs-string">"60"</span> /&gt;</div></div></li></ol></code><div class="hljs-button" data-title="複製"></div></pre> <p></p> <p>host:redis的IP地址。</p> <p>port:redis的埠號。</p> <p>database:預設為0,這裡用不到,暫時不用管。</p> <p>maxinactiveinterval :最大不活動時間,預設為60<br></p> <p><br></p> <p>4.修改nginx.conf</p> <p>配置修改如下:</p> <p><img src="https://img-blog.csdn.net/20161114153852378" alt=""><br></p> <p>途中紅框中的配置表示當一臺server宕機,切換速度會很快,此時配置是1秒。</p> <p>nginx採用輪詢的方式訪問兩臺伺服器。</p> <p><br></p> <p>5.編寫測試頁面</p> <p>首先得有登入頁面,登入成功進入測試頁面,驗證session是否共享。</p> <p>下面是tomcat1伺服器測試頁面程式碼:</p> <p></p> <pre onclick="hljs.copyCode(event)"><code class="language-html hljs xml"><ol class="hljs-ln"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-tag">&lt;<span class="hljs-name">body</span>&gt;</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-tag">&lt;<span class="hljs-name">h2</span>&gt;</span>這是Tomcat1<span class="hljs-tag">&lt;/<span class="hljs-name">h2</span>&gt;</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-tag">&lt;<span class="hljs-name">h2</span>&gt;</span>session id : ${pageContext.session.id}<span class="hljs-tag">&lt;/<span class="hljs-name">h2</span>&gt;</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="4"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-tag">&lt;<span class="hljs-name">h2</span>&gt;</span>session time : ${pageContext.session.creationTime}<span class="hljs-tag">&lt;/<span class="hljs-name">h2</span>&gt;</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="5"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-tag">&lt;/<span class="hljs-name">body</span>&gt;</span></div></div></li></ol></code><div class="hljs-button" data-title="複製"></div></pre><br> tomcat2測試頁面程式碼: <p></p> <p></p> <pre onclick="hljs.copyCode(event)"><code class="language-html hljs xml"><ol class="hljs-ln"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-tag">&lt;<span class="hljs-name">body</span>&gt;</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-tag">&lt;<span class="hljs-name">h2</span>&gt;</span>這是Tomcat2<span class="hljs-tag">&lt;/<span class="hljs-name">h2</span>&gt;</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-tag">&lt;<span class="hljs-name">h2</span>&gt;</span>session id : ${pageContext.session.id}<span class="hljs-tag">&lt;/<span class="hljs-name">h2</span>&gt;</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="4"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-tag">&lt;<span class="hljs-name">h2</span>&gt;</span>session time : ${pageContext.session.creationTime}<span class="hljs-tag">&lt;/<span class="hljs-name">h2</span>&gt;</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="5"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-tag">&lt;/<span class="hljs-name">body</span>&gt;</span></div></div></li></ol></code><div class="hljs-button" data-title="複製"></div></pre><br> 6.驗證結果 <p></p> <p>第一次登入,進入測試頁面,發現客戶端請求被nginx轉發到了tomcat1伺服器中,打印出sessionid和session建立時間的資訊,如下圖所示:</p> <p><img src="https://img-blog.csdn.net/20161114155541744" alt=""></p> <p>重新整理頁面,客戶端的請求傳送的請求別nginx轉發到了轉發到了tomcat2伺服器中,但是打印出來session的資訊和tomcat1伺服器中session資訊一模一樣。</p> <p><img src="https://img-blog.csdn.net/20161114155625604" alt=""><br></p> <p>通過上面的驗證,Nginx+Redis+Tomcat session共享已經成功實現。</p> <p><br></p>             </div>