> 백엔드 개발 > PHP 튜토리얼 > Ubuntu1404에서 Tomcat8 Nginx memcache 구성 서버 클러스터 세션 공유

Ubuntu1404에서 Tomcat8 Nginx memcache 구성 서버 클러스터 세션 공유

WBOY
풀어 주다: 2016-07-29 09:15:39
원래의
1010명이 탐색했습니다.

이전에 구성된 Tomcat 클러스터는 Tomcat에서 제공하는 간단한 클러스터 관리 방법인 를 사용하며, 이 클러스터 세션 기여는 다음과 같습니다: org .apache.catalina.ha.session.DeltaManager는 특정 노드의 세션을 클러스터의 모든 노드에 복사합니다. 공식 Tomcat 문서에 따르면 이 세션 공유 방법은 클러스터가 커지면 제대로 작동하지 않습니다. 따라서 클러스터가 세션을 공유할 수 있도록 memcached를 사용하려고 했습니다.

구성 참조 문서에는 다음이 포함됩니다. 링크를 열려면 클릭하세요. 이 링크에서 Tomcat과 일치하는 jar 패키지와 Tomcat 구성 방법을 찾을 수 있습니다. 아래에 내 구성 프로세스를 기록해 보겠습니다.

1. 이전 블로그 내용에 따라 Nginx 역방향 프록시를 구성합니다.

2. ubuntu에 memcache를 설치합니다.

다음 명령을 사용하여 직접 설치할 수 있습니다.

sudo apt-get install memcached
로그인 후 복사
3. /etc/memcached.conf 파일을 편집합니다.

이 파일에는 각 매개변수의 구성이 포함되어 있습니다. Memcache가 기본적으로 모든 주소를 수신하므로 여기에서 -l 매개변수를 주석 처리하거나 Memcache가 기본 주소를 수신하도록 127.0.0.1을 0.0.0.0으로 변경합니다.

이렇게 하지 않으면 이 머신에서만 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은 머신에서 인식해야 하는 호스트 이름입니다. 11211은 memcached 노드의 이름입니다. Memcache가 수신하는 포트는 11211이 기본 포트입니다.

5. CATALINA_HOME/lib에 jar 패키지를 추가합니다.

여기서 사용하는 패키지는 다음과 같습니다.

memcached-session-manager-1.8.3.jar
memcached-session-manager-tc8-1.8.3.jar
spymemcached-2.11.1.jar
로그인 후 복사

6.

여기서 내 테스트 아이디어는 다음과 같습니다. 다음 코드를 사용하여 서블릿을 만든 다음 두 개의 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 구성 서버 클러스터 세션에 대한 내용을 포함하여 PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿