JEUS 클러스터링
본 장에서는 도메인 내의 클러스터에 대해 정의하고 클러스터의 구성과 도메인과의 관계에 대해 설명한다. 또한 클러스터를 생성, 설정, 변경 및 삭제하는 방법에 대해 설명한다.
1. 개요
클러스터는 서비스의 확장성을 위한 부하 분산(Load Balancing)과 안정성을 위한 장애 극복(Failover) 기능을 제공하기 위해 동일한 서비스를 수행하는 여러 개 서버들의 집합이다.
같은 서비스를 수행하는 여러 개의 서버가 부하를 나눠서 처리하여 빠른 서비스가 가능하며, 부하의 정도에 따라 클러스터에 동적으로 서버를 추가 또는 삭제할 수 있어 부하 조절이 가능하다. 또한 몇 대의 서버가 서비스를 수행하지 못하는 상황에서도 같은 서비스를 하는 나머지 서버들이 서비스를 처리해주므로 사용자에게 서비스 중단이 노출되지 않는다. 즉, 많은 부하를 무리 없이 소화하고 서비스 불가능 상태가 되지 않는 하나의 서버라고 할 수 있다.
2. 클러스터와 도메인 관계
도메인은 관련된 서비스를 수행하는 서버 또는 클러스터들의 집합이다. 클러스터는 같은 서비스를 수행하는 여러 개 서버의 집합으로 하나의 도메인에 여러 개 존재할 수 있다. 클러스터를 구성하는 서버들은 한 머신에 모두 존재할 수도 있고, 각각 다른 머신에 존재할 수도 있다. 일반적으로 머신에 문제가 발생하여 서비스가 안될 경우를 고려하여 다른 머신에 위치한 서버들로 클러스터를 구성한다.
하나의 마스터 서버는 단 하나의 도메인을 관리하므로, 도메인 내에 여러 개의 클러스터가 있다면 각 클러스터도 동일한 마스터 서버의 관리를 받는다.
3. 클러스터 기능
클러스터는 도메인 내에서 같은 서비스를 수행하는 MS들로 구성된다. 보통 여러 머신에 분산되어 있다. 이렇게 구성된 클러스터는 다음과 같은 기능을 갖는다.
-
부하 분산(Load Balancing)
과부하로 인한 서비스 중단을 방지하고 응답 속도를 향상하기 위해 여러 서버 간에 수행해야 할 서비스를 분배하는 기능이다.
동일한 서비스를 수행할 수 있는 환경을 구성해야 하고, 서로의 위치와 상태를 알고 있어야 한다.
-
장애 극복(Failover)
하나의 서버가 비정상 종료된 경우에 그 서버가 수행하고 있던 서비스를 다른 서버가 대신 수행하는 것을 의미한다.
비정상 종료한 서버 대신 서비스를 수행하는 서버는 비정상 종료된 서버와 같은 서비스를 수행할 수 있어야 하고, 비정상 종료된 서버를 감지할 수 있어야 한다. 또한, 비정상 종료된 서버의 서비스 진행 상태를 알아야 한다.
JEUS에서는 이러한 기능을 위해 클러스터 내의 모든 서버에 같은 애플리케이션을 deploy하고, 같은 리소스를 사용하고, 같은 서비스를 등록할 것을 권장한다. Multicast를 사용하여 클러스터 내의 서버들 간에 서로의 위치와 상태를 공유하고, 클러스터 가능한 서비스들의 장애 극복을 위해 서비스의 진행 상태 정보를 서버들 간에 공유한다. 또한 리소스의 효율을 높일 수 있도록 부하에 따라 클러스터에 서버의 추가 및 삭제가 가능하다.
모든 서비스에 대해 클러스터링이 가능한 것은 아니다. 클러스터링이 가능한 서비스는 다음과 같다.
서비스 | 설명 |
---|---|
Servlets /Jsps |
웹 엔진은 웹 서버에 의한 웹 애플리케이션 클러스터링과 HTTP 세션 클러스터링을 지원한다. 웹 서버에 의한 웹 애플리케이션 클러스터링에 대한 자세한 내용은 JEUS Web Engine 안내서의 부하 분산을 위한 웹 서버 설정을 참고하고, HTTP 세션 클러스터링에 대한 자세한 내용은 JEUS 세션 관리 안내서의 분산 세션 서버를 참고한다. |
EJB |
EJB 엔진에서는 세션, Message Driven, Entity Bean과 Timer Service에서 클러스터링을 지원한다. EJB 엔진에서 제공하는 클러스터링에 대한 자세한 내용은 JEUS EJB 안내서의 EJB 클러스터링을 참고한다. |
JMS |
JMS에서는 Connection Factory와 Destination, Durable Subscriber의 클러스터링을 지원한다. JMS에서 제공하는 클러스터링에 대한 자세한 내용은 JEUS MQ 안내서의 JEUS MQ 클러스터링을 참고한다. |
클러스터가 가능한 서비스들에 한해서 클러스터를 구성할 때에는 다음의 제약사항을 고려해야 한다.
-
클러스터로 구성된 모든 서버는 같은 버전의 JEUS를 사용해야 한다.
-
각 서버는 단 하나의 클러스터에만 포함되어야 한다.
-
도메인 사이에는 어떤 리소스도 공유가 불가능하기 때문에 클러스터로 구성된 모든 서버는 같은 도메인에 포함되어야 한다.
5. 클러스터 설정
클러스터 설정은 크게 서버 공통 설정과 클러스터 설정으로 구분된다.
5.1. 서버 공통 설정
서버 공통 설정은 클러스터 내의 모든 서버가 동일한 서비스를 수행하기 위한 설정으로 클러스터뿐만 아니라 단독 서버를 생성할 경우에도 필요한 설정이다.
서버 공통 설정에 대한 자세한 내용은 JEUS Server 안내서의 JEUS 설정을 참고한다. |
5.2. 클러스터 설정
클러스터 설정은 클러스터의 기능인 부하 분산(Load Balance)과 장애 극복(Failover)을 위한 설정으로 클러스터 통신, 세션 서버, Timer Service, JMS 리소스에 대해 설정하고, 데이터소스를 등록 및 제거할 수 있다.
클러스터 설정 중 서버의 재시작이 필요한 항목을 변경한 경우에는 클러스터 전체를 재시작하는 것을 권장한다. |
-
클러스터 세션 서버 설정
클러스터링 환경을 전제로 운영되는 분산식 세션 서버는 부하 분산과 장애 극복의 2가지 기능을 모두 가지고 있다.
내부적으로 분산식 세션 서버를 사용할지에 대한 설정은 별도로 존재하지 않으며 클러스터링에 참여하면, 클러스터링에 참여하는 서버들 간에 자동적으로 분산식 세션 서버가 운영된다.
분산식 세션 서버에 대한 자세한 설명은 JEUS 세션 관리 안내서의 분산 세션 서버를 참고하고, 세부 설정 및 각 항목들에 대한 설명은 해당 안내서의 분산 세션 서버 설정을 참고한다.
-
클러스터 Timer Service 설정
클러스터 환경에서 Timer Service를 설정하고 싶은 경우에 사용한다. Timer Service 설정에 대한 자세한 내용은 JEUS EJB 안내서의 EJB Timer Service를 참고한다.
-
클러스터 JMS 리소스 설정
클러스터 내의 Destination과 Durable Subscriber를 설정하는 경우에 사용한다. JMS 리소스 설정에 대한 자세한 내용은 JEUS MQ 안내서의 서버 설정을 참고한다.
-
데이터소스 등록 및 제거
클러스터에 등록된 데이터소스는 클러스터에 속한 모든 서버에서 사용될 수 있으며, 데이터소스 등록은 동적으로 처리가 가능하다. 또한, 클러스터에 등록된 데이터소스의 제거 역시 동적으로 처리가 가능하다. 클러스터로부터 제거된 데이터소스는 클러스터에 속한 서버들에서 더 이상 사용이 불가능하다.
클러스터에 등록된 데이터소스의 사용과 클러스터에 데이터소스를 등록하고 제거하는 방법 등에 대한 자세한 내용은 JEUS Server 안내서의 데이터소스 관련 설정 동적 변경을 참고한다.
6. 클러스터 변경
부하의 변화에 따라 클러스터에 존재하는 서버를 추가, 삭제해서 개수를 조정할 수 있다.
6.1. 클러스터에 서버 추가
해당 서비스의 부하가 증가하여 클러스터 사이즈를 늘리기 위해 클러스터에 서버를 추가할 수 있다. 추가할 서버는 기존의 서버와 동일한 서비스를 수행할 것이므로 기존 서버들의 설정과 동일하게 설정하는 것을 권장한다.
본 절에서는 클러스터에 서버를 추가하는 방법에 대해 설명한다.
콘솔 툴 사용
콘솔 툴(jeusadmin)을 사용하여 클러스터에 서버를 추가할 수 있다.
다음은 서버를 직접 생성, 선택하여 클러스터를 생성한 경우의 서버 추가 방법이다.
-
add-server 명령어를 사용하여 클러스터에 추가할 서버(server2)를 생성한다. add-server 명령어에 대한 자세한 사용법은 JEUS Reference 안내서의 add-server를 참고한다.
[MASTER]domain1.adminServer>add-server server2 -node node2 -addr 0.0.0.0 -port 9936 Successfully performed the ADD operation for server (server2). NOTICE : base-addr [0.0.0.0] base-port [9936] http-port [8088] Check the results using "list-servers or add-server".
-
add-servers-to-cluster 명령어를 사용하여 클러스터(cluster1)에 생성한 서버(server2)를 추가한다.
add-servers-to-cluster 명령어에 대한 자세한 사용법은 JEUS Reference 안내서의 add-servers-to-cluster를 참고한다.
[MASTER]domain1.adminServer>add-servers-to-cluster cluster1 -servers server2 Successfully performed the ADD operation for The server list for cluster(cluster1).. Check the results using "list-clusters cluster1 or add-servers-to-cluster cluster1".
-
새로 추가한 서버를 기동한다.
-
serverinfo 명령어를 사용하여 서버(server1, server2)가 클러스터(cluster1)에 묶여 잘 운영되고 있음을 확인할 수 있다.
[MASTER]domain1.adminServer>serverinfo Information about Domain (domain1) ================================================================================ +-------+--------+-----+-----+-----+---------------+-------+-----------+-------+ | Server| Status |Node | PID | Clu | Latest Start | Need | Listen | Runni | | | |Name | |ster | Time / | to | Ports | ng | | | | | | | Shutdown Time |Restart| |Engines| +-------+--------+-----+-----+-----+---------------+-------+-----------+-------+ | admin | RUNNIN | nod | 902 | N/A | 2022-07-19 | false | base-0.0. | jms, | |Server |G(02:56 |e1 |88 | |(화) 오후 | |0.0:9736 |web, | | (*) |:51) | | | |12:55:20 KST | | http-serv |ejb | | | | | | | | |er-0.0.0.0 | | | | | | | | | |:8088 | | +-------+--------+-----+-----+-----+---------------+-------+-----------+-------+ | serve | RUNNIN | nod | 100 | clu | 2022-07-19 | false | base-0.0. | jms, | |r1 |G(00:00 |e1 |083 |ster1|(화) 오후 | |0.0:9836 |web, | | |:17) | | | |03:51:54 KST | | http-serv |ejb | | | | | | | | |er-0.0.0.0 | | | | | | | | | |:8188 | | +-------+--------+-----+-----+-----+---------------+-------+-----------+-------+ | serve | RUNNIN | nod | 100 | clu | 2022-07-19 | false | base-0.0. | jms, | |r2 |G(00:00 |e2 |240 |ster1|(화) 오후 | |0.0:9936 |web, | | |:09) | | | |03:52:02 KST | | http-serv |ejb | | | | | | | | |er-0.0.0.0 | | | | | | | | | |:8288 | | +-------+--------+-----+-----+-----+---------------+-------+-----------+-------+ ================================================================================
6.2. 클러스터에서 서버 삭제
클러스터의 크기를 줄이기 위해 클러스터에 포함된 서버를 삭제할 수 있다. 이때에는 삭제할 서버를 종료하여, 진행 중이던 서비스가 모두 완료된 것을 확인한 후 클러스터에서 삭제한다. 본 절에서는 클러스터에서 서버를 삭제하는 방법에 대해 설명한다.
콘솔 툴 사용
콘솔 툴(jeusadmin)을 사용하여 클러스터에 서버를 삭제할 수 있다.
다음은 서버를 선택하여 클러스터를 생성한 경우의 서버 제거 방법이다.
-
stop-server 명령어를 사용하여 삭제할 서버(server2)를 종료한다. stop-server 명령어에 대한 자세한 사용법은 JEUS Reference 안내서의 stop-server를 참고한다.
[MASTER]domain1.adminServer>stop-server server2 Stop server message to server [server2] was successfully sent.
-
remove-servers-from-cluster 명령어를 사용하여 삭제할 서버(server2)가 포함된 클러스터(cluster1)에서 서버를 삭제한다. remove-servers-from-cluster 명령어에 대한 자세한 사용법은 JEUS Reference 안내서의 remove-servers-from-cluster를 참고한다.
[MASTER]domain1.adminServer>remove-servers-from-cluster cluster1 -servers server2 Successfully performed the REMOVE operation for The server list for cluster(cluster1).. Check the results using "list-clusters cluster1 or remove-servers-from-cluster cluster1".
-
클러스터에서 삭제한 서버(server2)를 단독 서버로 사용할 계획이 없다면 remove-server 명령어를 사용하여 완전히 삭제한다. remove-server 명령어에 대한 자세한 사용법은 JEUS Reference 안내서의 remove-server를 참고한다.
[MASTER]domain1.adminServer>remove-server server2 Successfully performed the REMOVE operation for server (server2). Check the results using "list-servers or remove-server"
7. 클러스터 삭제
해당 서비스를 더 이상 사용할 필요가 없을 경우에는 클러스터를 삭제할 수 있다. 클러스터를 삭제할 때에는 삭제할 클러스터를 종료하여 진행 중이던 서비스의 완료를 확인한 후 삭제해야 한다. 본 절에서는 클러스터를 삭제하는 방법에 대해 설명한다.
콘솔 툴 사용
콘솔 툴(jeusadmin)을 사용하여 클러스터를 삭제하는 방법은 다음과 같다.
-
stop-cluster 명령어를 사용하여 삭제할 클러스터를 종료한다. 본 예제에서는 server1과 server2로 구성된 cluster1이라는 클러스터를 삭제한다. stop-cluster 명령어에 대한 자세한 사용법은 JEUS Reference 안내서의 stop-cluster를 참고한다.
[MASTER]domain1.adminServer>stop-cluster cluster1 Stopping servers [server1, server2]. Stop server message to the cluster [cluster1] was successfully sent.
serverinfo 명령어를 사용하여 종료한 클러스터(cluster1)에 포함된 서버(server1, server2)의 상태가 SHUTDOWN 상태임을 확인할 수 있다.
[MASTER]domain1.adminServer>serverinfo ================================================================================ +-------+---------+-----+-----+-----+--------------+-------+-----------+-------+ | Server| Status |Node | PID | Clu | Latest Start | Need | Listen | Runni | | | |Name | |ster | Time / | to | Ports | ng | | | | | | |Shutdown Time |Restart| |Engines| +-------+---------+-----+-----+-----+--------------+-------+-----------+-------+ | admin | RUNNING | nod | 102 | N/A | 2022-07-19 | false | base-0.0. | jms, | |Server |(00:02:4 |e1 |314 | |(화) 오후 | |0.0:9736 |web, | | (*) |3) | | | |04:16:59 KST | | http-serv |ejb | | | | | | | | |er-0.0.0.0 | | | | | | | | | |:8088 | | +-------+---------+-----+-----+-----+--------------+-------+-----------+-------+ | serve | SHUTDOW | N/A | N/A | clu | 2022-07-19 | N/A | N/A | N/A | |r1 |N(00:01: | | |ster1|(화) 오후 | | | | | |03) | | | |04:18:39 KST | | | | +-------+---------+-----+-----+-----+--------------+-------+-----------+-------+ | serve | SHUTDOW | N/A | N/A | clu | 2022-07-19 | N/A | N/A | N/A | |r2 |N(00:01: | | |ster1|(화) 오후 | | | | | |03) | | | |04:18:39 KST | | | | +-------+---------+-----+-----+-----+--------------+-------+-----------+-------+ ================================================================================
-
종료한 클러스터를 다음과 같이 remove-cluster 명령어를 사용해서 삭제한다. remove-cluster 명령어에 대한 자세한 사용법은 JEUS Reference 안내서의 remove-cluster를 참고한다.
[MASTER]domain1.adminServer>remove-cluster cluster1 Successfully performed the REMOVE operation for cluster (cluster1). Check the results using "list-clusters or remove-cluster".
-
클러스터를 해제한 이후 삭제한 클러스터에 포함되어 있던 서버들을 단독 서버로 사용할 계획이 없다면 삭제한다. remove-server 명령어를 사용하여 포함되어 있던 서버(server1, server2)를 삭제한다. remove-server 명령어에 대한 자세한 사용법은 JEUS Reference 안내서의 remove-server를 참고한다.
[MASTER]domain1.adminServer>remove-server server1 Successfully performed the REMOVE operation for server (server1). Check the results using "list-servers or remove-server" [MASTER]domain1.adminServer>remove-server server2 Successfully performed the REMOVE operation for server (server2). Check the results using "list-servers or remove-server"