세션 복제는 세션에 저장된 데이터를 다른 인스턴스에 복제하는 데 사용되는 기법입니다. 하지만 복제된 인스턴스는 동일한 클러스터의 일부여야 합니다. 클러스터 환경에서 세션 복제가 사용 가능한 경우에는 전체 세션 데이터가 복제된 인스턴스에 복사됩니다. 하지만 세션 복제 작업은 세션에 있는 일련화할 수 없는 속성과 인스턴스별 데이터를 복사하지 않습니다.
세션 복제는 로드 균형 조정과 함께 웹 응용 프로그램에 페일오버 기능을 제공합니다.
이 절에서는 세션 복제 작업에 대해 자세히 설명합니다.
웹 요청이 끝날 때 Web Server는 서버 구성 파일 server.xml에 저장된 세션 복제 구성을 통해 세션 데이터를 복사해야 하는지 여부를 결정합니다.
4개의 인스턴스가 클러스터를 이루며 Administration Server에서 세션 복제가 사용 가능한 경우를 생각할 수 있습니다.
4개의 노드에서 실행되는 4개의 인스턴스(A, B, C 및 D)로 이루어진 Web Server 클러스터에서 세션 복제 프로세스는 다음과 같습니다.
인스턴스 A는 D의 백업이고, B는 A의 백업이고, C는 B의 백업이고, D는 C의 백업입니다. 이런 식으로 완전한 백업 링을 형성합니다.
클러스터의 각 인스턴스는 클러스터에 있는 모든 인스턴스의 정적 목록과 활성 백업 인스턴스를 추적합니다.
구성에 따라 각 요청이 끝날 때 세션 데이터가 백업 인스턴스에 동기적으로 전송됩니다.
Web Server 클러스터 환경에서 페일오버 프로세스는 다음과 같습니다.
인스턴스 A가 실패하면 로드 밸런서는 인스턴스 A를 향해 들어오는 모든 웹 요청을 클러스터에 있는 나머지 인스턴스로 리디렉션하고 백업 링을 다음과 같이 다시 구성합니다.
D에서는 백업 A가 중단된 것을 감지하고 순서 목록에서 A 다음에 있는 인스턴스를 새 백업 인스턴스로 선택합니다.
이 경우에는 B가 선택되며, D는 B에 대한 새 백업 연결을 구성합니다. 이제 B에는 읽기 전용 백업 A와 활성 백업 D의 두 가지 백업이 있습니다.
이제 B가 C에 백업되고, C가 D에 백업되고, D가 B에 백업되어 백업 링이 완료됩니다.
실패한 인스턴스 A를 다시 사용할 수 있게 되면 지정된 백업 인스턴스 B에 다시 결합 메시지를 보내 백업 링과 다시 결합하고 B에 대한 백업 연결을 설정합니다.
D는 A로부터 성공적인 핑 반환이나 메시지를 받고 A가 온라인 상태임을 감지합니다.
그런 다음 D는 A에 대한 백업 연결을 설정하고 B에 대한 백업 연결을 종료합니다.
Web Server 7.0은 세션 복제에서 다음 기능을 지원하지 않습니다.
두 개 이상의 인스턴스에서 동시에 장애 복구
두 장애 사이의 간격은 회복된 인스턴스를 완전히 복구하는 데 필요한 시간보다 커야 합니다.
두 개 이상의 인스턴스에 대한 세션 백업. 정상적으로 작동될 경우에는 모든 세션에 대해 기본 세션과 백업 세션이라는 두 개의 복사본만 있습니다.
세션 지속성: 세션은 페일오버를 위해 다른 인스턴스의 메모리에만 백업됩니다.
Web Server는 Java 웹 응용 프로그램의 세션 복제만 지원합니다. CGI 또는 PHP와 같은 비 Java 응용 프로그램을 사용하는 경우에는 세션 데이터를 복제할 수 없습니다.
관리 콘솔이나 CLI를 사용하여 클러스터에서 세션 복제를 활성화할 수 있습니다. 세션 복제를 활성화하려면 브라우저에서 쿠기가 사용 가능해야 합니다.
server.xml 파일에는 세션 복제와 관련된 정보가 있습니다. 다음은 세션 복제가 활성화된 샘플 server.xml 파일입니다.
<cluster> <local-host>hostA</local-host> <instance> <host>hostB</host> </instance> <instance> <host>hostC</host> </instance> <instance> <host>hostD</host> </instance> <instance> <host>hostA</host> <session-replication/> </cluster>
다음 요소의 기본값을 사용하지 않는 경우에는 server.xml 구성 파일에서 이러한 요소의 항목을 사용할 수 없습니다.
Port number(기본값은 1099) |
Protocol(기본값은 jrmp) |
Encrypted(기본값은 false) |
Getattribute Triggers Replication(기본값은 true) |
Replica Discovery MaxHops(기본값은 –1) |
Startup Discovery Timeout(기본값은 ?) |
Cookie Name(기본값은 CLUSTERSESSIONLOCATOR) |
이러한 세션 복제 등록 정보에 대한 자세한 내용은 Sun Java System Web Server 7.0 Administrator’s Configuration File Reference를 참조하십시오.
서버에서 세션을 복제할 수 있게 하려면 웹 응용 프로그램도 세션 복제용으로 활성화해야 합니다.
웹 응용 프로그램의 세션 복제를 활성화하려면 <web-application>/WEB-INF 디렉토리에 있는 sun-web.xml 구성 파일을 수정합니다.
sunweb.xml에서 수정해야 할 사항은 다음과 같습니다.
<session-manager/> 요소를 <session-manager persistence-type="replicated">로 변경합니다.
다음은 세션 복제가 활성화된 샘플 sun-web.xml 파일입니다.
<sun-web-app> <session-config> <session-manager persistence-type="replicated"> </session-manager> </session-config> </sun-web-app>
sunweb.xml 파일을 수정한 후 웹 응용 프로그램을 다시 작성하거나 응용 프로그램을 JAR 파일로 다시 만들어 웹 응용 프로그램 아카이브(war 파일)를 만듭니다.
모든 인스턴스를 다시 시작하여 모든 인스턴스에서 웹 응용 프로그램을 사용할 수 있게 합니다.
웹 응용 프로그램은 클러스터의 모든 노드에서 액세스할 수 있습니다. 웹 응용 프로그램에 액세스하려면 브라우저에서 다음을 입력합니다.
http://webserver-name/webapplication-name/
모든 노드에 액세스할 수 있는 디렉토리를 사용하는 것이 배포할 응용 프로그램을 저장하는 가장 좋은 방법입니다. 하지만 이 디렉토리에서 Administration Server에 액세스할 수 있어야 하는 것은 아닙니다. 크기가 1MB를 넘는 웹 응용 프로그램의 경우에는 디렉토리 기반 배포를 사용하는 것이 좋습니다.
검색 모음을 만드는 경우 모든 노드에 액세스할 수 있는 일반 디렉토리에 검색 모음이 있어야 합니다.