Ubuntu1404下,Tomcat8+Nginx+memcache配置伺服器集群session共享

WBOY
發布: 2016-07-29 09:15:39
原創
1004 人瀏覽過

先前配置的Tomcat叢集使用的是Tomcat提供的簡單的叢集管理的方式:,這種叢集session貢獻使用的是:org. apache.catalina.ha.session.DeltaManager,它會將某個節點的session複製到集群的所有節點上,根據Tomcat官方文檔,這種session共享方式在集群變大時,效果並不好。因此,我嘗試使用memcached來讓叢集共享session。

設定參考的文件有:點擊開啟連結、在這個連結裡可以找到與你的Tomcat相符的jar包,以及Tomcat配置的方法。下面記錄一下我的設定流程。

1.根據前面部落格的內容設定好Nginx反向代理;

2.在ubuntu下安裝memcache:

可直接使用下面的命令進行安裝

sudo apt-get install memcached
登入後複製
3.編輯/etc/memced.confc/memced.conf :

這個檔案裡有各個參數的配置,在這裡要把-l參數註解掉,因為預設情況下memcache會監聽所有位址,或是把127.0.0.1改為0.0.0.0來讓memcache監聽預設位址。

如果不這麼做的話,就只能在本機上使用memcached,其他機器連接不進來,也就沒有了意義。

設定完後,可以使用以下的指令查看是否能連接memcache,其中ip是memcache主機安裝的ip位址,11211是memcache的監聽埠。

telnet ip 11211
登入後複製

4.在所有的Tomcat節點上編輯CATALINA_HOME/conf/context.xml文件,在標籤下增加如下的配置。

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
        memcachedNodes="n1:cloud2:11211,n2:cloud3:11211"
        sticky="false"
        sessi
        lockingMode="auto"
        requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
/>
登入後複製
memcachedNodes是配置安裝了memcache的節點,cloud2和cloud3是主機名,必須是本機能識別的,n1和n2是我們取的memcached節點的名稱,11211是memcache監聽的端口,11211是默認的端口。

5.添加一些jar包到CATALINA_HOME/lib下

我這裡使用到的包有:

memcached-session-manager-1.8.3.jar
memcached-session-manager-tc8-1.8.3.jar
spymemcached-2.11.1.jar
登入後複製

6.然後就可以啟動Tomcat和nginx進行測試了

這裡的測試思路是這樣的,使用以下程式碼建立一個Servlet,然後部署到兩個tomcat伺服器上。只啟動其中一個伺服器,然後透過瀏覽器存取負載平衡伺服器,可在瀏覽器上查看並記下此時的SessionID。然後關閉這個伺服器,啟動另一個tomcat伺服器,然後再用相同的位址存取負載平衡伺服器,再在瀏覽器上查看SessionID,若兩次SessionID一致,則表示SessionID被共享了。

package com.cyber_space.Servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.net.Inet4Address;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class TestServlet
 */
@WebServlet("/TestServlet")
public class TestServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	public TestServlet() {
		super();
	}

	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		handle(request, response);

	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		handle(request, response);
	}

	private void handle(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setHeader("Content-type", "text/html;charset=UTF-8");
		String remoteIpString = request.getRemoteAddr() + " " + request.getRemoteHost() + " " + request.getRemoteUser();
		PrintWriter pw = response.getWriter();
		pw.println("请求来自:" + remoteIpString);
		request.getSession().setAttribute("5", 5);
		String sessionID = request.getSession().getId();
		pw.println("赋予它的SESSIONID是:" + sessionID);
		Inet4Address inet4Address = (Inet4Address) Inet4Address.getLocalHost();
		pw.println("服务器的IP地址是:" + inet4Address.getHostAddress());
	}
}
登入後複製

這裡還有許多可以做的工作暫時還沒做,如高效的序列化配置等,以後有時間再來做。

版權聲明:本文為部落客原創文章,未經部落客允許不得轉載。

以上就介紹了Ubuntu1404下,Tomcat8+Nginx+memcache配置伺服器集群session共享,包括了方面的內容,希望對PHP教程有興趣的朋友有所幫助。

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板