티스토리 뷰
본 포스팅은 WildFly Clustering in Standalone Mode에 대해 알아보겠습니다.
Clustering in Standalone Mode는 아래와 같은 순서로 이루어 집니다.
1. Standalone Mode Server 2개 생성
2. application setting
3. Standalone Mode Server 기동 시 ha config file 반영
4. server 각각 기동
5. deploy application
6. Failover Test
그럼 시작합니다.
1. standalone Mode Server 2개를 생성합니다.
생성 방법은 매우 간단합니다.
설치 시 생성되는 standalone directory를 각각 node1, node2로 복사하면 준비 완료입니다.
2. application setting을 수행합니다.
application은 아래와 같이 준비하였습니다.
$APP_HOME
> session.jsp
> WEB-INF
> jboss-web.xml
> web.xml
각 파일을 살펴 보면
[session.jsp]
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%@ page import="java.util.*" %>
<%@ page import="java.net.InetAddress" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" " http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>SessionTest</title>
</head>
<body>
<%
String color = "";
Integer count = (Integer)session.getAttribute("count");
if(session.getAttribute("count")==null){
count = new Integer(1);
}else{
count = new Integer(count.intValue()+1);
}
%>
<%
session.setAttribute("count",count);
InetAddress iadr = InetAddress.getLocalHost();
out.println("Connect count : "+count+"<BR>");
out.println("<P>");
out.println("<H3>Session Information :</H3>");
out.println("<b>HostName</b> : "+System.getenv("HOSTNAME")+"<BR>");
out.println("<b>Session ID</b> : "+session.getId() + "<BR>");
out.println("<b>Session Is New</b> : "+session.isNew() + "<BR>");
out.println("<b>Session CreationTime</b> : "+new Date(session.getCreationTime()) + "<BR>");
out.println("<b>Session LastAccessedTime</b> : "+new Date(session.getLastAccessedTime()) + "<BR>");
out.println("<b>Session MaxInactiveInterval(s)</b> : "+session.getMaxInactiveInterval() + "<BR>");
%>
</body>
</html>
session이 변경되는지 여부를 확인할 session.jsp 파일입니다. isNew 정보와 Session Timeout을 확인할 수 있는 MaxInactiveInterval이 셋팅되어 있습니다.
[jboss-web.xml]
<jboss-web>
<context-root>/</context-root>
<replication-config>
<replication-trigger>SET</replication-trigger>
<replication-granularity>SESSION</replication-granularity>
</replication-config>
</jboss-web>
위와 같이 Context-root 셋팅과 session 공유 범위를 선택하는 replocation-config를 설정하였습니다.
trigger SET의 경우 SET이 발생하였을때 SESSION 정보를 Backup Server로 Copy하겠다는 의미 입니다.
granularity 범위는 Session에 한정됩니다.
[web.xml]
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<session-config>
<session-timeout>30</session-timeout>
<!--tracking-mode>URL</tracking-mode-->
</session-config>
<distributable/>
</web-app>
web.xml에는 session time과 함께 distributable 설정이 되어있습니다.
위 설정 파일들의 빨간색으로 표시된 부분이 반드시 설정되어야 Cluster로 묶일 수 있으니 참고하세요.
3. Standalone Mode Server 기동 시 ha config file을 반영합니다.
기동 스크립트는 다음과 같이 작성하였습니다.
node1 기동 : standalone.bat -Djboss.server.base.dir=node1 --server-config=standalone-ha.xml -Djboss.socket.binding.port-offset=100 -Djboss,node.name=node1
node2 기동 : standalone.bat -Djboss.server.base.dir=node2 --server-config=standalone-ha.xml -Djboss.socket.binding.port-offset=200 -Djboss,node.name=node2
s
tandalone 모드로 기동 시 1번 step에서 생성한 node1 디렉토리를 base.dir로 선택하고 standalone-ha.xml 파일을 기동 시 참고하며, port 충돌을 피하기 위해 port-offset을 100으로 주었습니다.
마찬가지로 node2 디렉토리를 base.dir로 선택하고 standalone-ha.xml 파일을 기동 시 참고하며, port 충돌을 피하기 위해 port-offset을 200으로 주었습니다.
4. server를 각각 기동합니다.
기동 시 참고 로그로는
HTTP listener default listening on 127.0.0.1:8180
11:56:40,526 INFO [org.jboss.modcluster] (ServerService Thread Pool -- 64) MODCLUSTER000001: Initializing mod_cluster version 1.3.3.Final
11:56:40,541 INFO [org.jboss.modcluster] (ServerService Thread Pool -- 64) MODCLUSTER000032: Listening to proxy advertisements on /224.0.1.105:23364
11:56:40,652 INFO [org.jboss.as.connector.subsystems.datasources] (MSC service thread 1-5) WFLYJCA0001: Bound data source [java:jboss/datasources/ExampleDS]
11:56:40,766 WARN [org.jboss.as.domain.management.security] (MSC service thread 1-1) WFLYDM0111: Keystore C:\S-CORE\wildfly-10.1.0.Final\wildfly-10.1.0.Final\node1\configuration\application.keystore not found, it will be auto generated on first use with a self signed certificate for host localhost
11:56:40,784 INFO [org.jboss.as.server.deployment.scanner] (MSC service thread 1-3) WFLYDS0013: Started FileSystemDeploymentService for directory C:\S-CORE\wildfly-10.1.0.Final\wildfly-10.1.0.Final\node1\deployments
11:56:41,122 INFO [org.wildfly.extension.undertow] (MSC service thread 1-3) WFLYUT0006: Undertow HTTPS listener https listening on 127.0.0.1:8543
11:56:41,455 INFO [org.jboss.ws.common.management] (MSC service thread 1-1) JBWS022052: Starting JBossWS 5.1.5.Final (Apache CXF 3.1.6)
11:56:41,687 INFO [org.jboss.as] (Controller Boot Thread) WFLYSRV0060: Http management interface listening on http://127.0.0.1:10090/management
Connect count : 1 Session Information :HostName : null |
c. node2 session.jsp 호출 시 정보가 동일한 지 여부 확인
http://localhost:8280/session.jsp
[result]
Connect count : 2 Session Information :HostName : null |
확인해야 할 포인트는 다음과 같습니다.
- Session ID가 변경되었는지 여부 (동일하게 출력되었음)
- Session Is New가 c과정 수행시 true로 출려되지는 않은지 여부 (IsNew 메소드는 session 객체에 담긴 메소드로 세션이 신규로 발급되었는지 여부를 출력합니다. c과정에서 false로 출력되었음)
WAS 제품을 사용하는 이유 중 안정성 측면에서 Clustering 기능은 매우 중요한 부분임을 알수 있습니다. Standalone Mode의 경우 Clustering 환경에서 유용하게 사용할 수 있는 설정으로 능숙하게 반영할 수 있도록 해야 하겠습니다.
고맙습니다.
'④ 미들웨어 > ⓦ WildFly' 카테고리의 다른 글
[Wildfly] Monitoring for CLI & WebConsole (0) | 2018.07.12 |
---|---|
[Wildfly] Clustering in Domain Mode (1) | 2018.07.12 |
[WildFly] First Install & follow-symlink (0) | 2018.07.11 |
[Web Application Server] WildFly - Datasource 연동 (0) | 2018.07.02 |
[WildFly] 공통라이브러리 반영 및 라이브러리 우선순위 테스트 (0) | 2018.03.26 |
- Total
- Today
- Yesterday
- SA
- aws
- Docker
- JBoss
- OpenStack
- k8s
- 쿠버네티스
- JEUS7
- MSA
- 오픈스택
- wildfly
- SWA
- jeus
- aa
- node.js
- API Gateway
- 마이크로서비스 아키텍처
- nodejs
- Architecture
- apache
- TA
- JEUS6
- webtob
- 마이크로서비스
- git
- Da
- 아키텍처
- openstack token issue
- openstack tenant
- kubernetes
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |