서버 Life Cycle

본 장에서는 서버의 시작과 종료, 서버 Life Cycle을 확인하는 방법에 대해 설명한다.

1. 서버 시작 준비

서버를 시작하기 전에 준비되어야 하는 몇 가지 사항은 다음과 같다.

  • JEUS가 설치되고, 도메인 및 서버가 생성되어 있어야 한다. 또한 서버를 시작 및 종료할 수 있는 사용자명과 패스워드가 생성되어 있어야 한다. 이러한 사전 작업이 되어 있지 않다면 JEUS 설치 및 시작하기 안내서를 참고하여 환경을 구축한다.

  • 서버에 적용하려는 JVM 설정이 XML에 설정되었는지 확인한다.

    도메인을 생성할 때 설정하지 않았다면, JVM 설정 변경은 재시작이 필요한 설정이기 때문에 MASTER를 시작하여 설정을 변경한 후 MASTER를 재시작하여 반영한다.

    JVM 설정이 누락된 MS는 XML 편집하거나 콘솔 툴을 사용해서 JVM 설정을 추가한 후에 서버를 시작한다. 변경 방법은 서버의 JVM 설정변경을 참고한다.

  • 적합한 라이선스를 가지고 있는지 확인한다.

2. 서버 시작

본 절에서는 Master Server(MASTER), Managed Server(MS)를 시작하는 방법에 대해 설명한다.

2.1. Master Server(MASTER) 시작

MASTER를 시작하는 스크립트는 startMasterServer로 MASTER의 도메인 이름, JEUS를 시작할 수 있는 권한을 가진 사용자명과 패스워드가 필요하다.

JEUS_HOME/bin 하위에서 실행할 경우에는 이 모든 값이 필요하지만, MASTER의 DOMAIN_HOME 하위에서 실행할 때에는 도메인 이름을 생략할 수 있다.

위치에 따라 다음과 같이 실행한다.

  • JEUS_HOME/bin

    JEUS_HOME/bin$ startMasterServer -domain <domain_name> -u <user_name> -p <password>
  • DOMAIN_HOME/bin

    DOMAIN_HOME/bin$ startMasterServer -u <user_name> -p <password>
  • SERVER_HOME/bin

    SERVER_HOME/bin$ startMasterServer -u <user_name> -p <password>

기본적으로는 MASTER가 RUNNING 상태가 된 이후에는 파일로만 서버의 로그(SERVER_HOME/logs/JeusServer.log)가 남게 된다. 서버의 로그를 콘솔 툴 화면에서 모니터링하려면 추가적으로 -verbose 옵션을 설정한다. 이 경우 서버 프로세스 외에도 Launcher 프로세스가 함께 운영된다. Launcher 프로세스는 서버 프로세스를 운영하고 서버의 로그를 콘솔 툴에 출력한다.

다음과 같이 jps 명령어로 확인하면 LauncherBootStrapper와 MasterServerBootstrapper를 확인할 수 있다.

jps -l
399092 jeus.server.LauncherBootstrapper
399352 jeus.server.admin.MasterServerBootstrapper
409880 sun.tools.jps.Jps

서버 시작에 실패한 경우에는 SERVER_HOME/logs/JeusLauncher.log에서 실패 이유를 확인할 수 있다.

  1. jps는 Java 프로세스를 조회하는 툴이며, JAVA_HOME/bin에 위치한다.

  2. Launcher에 대한 자세한 설명은 JEUS Server 안내서의 Launcher를 참고한다.

2.2. Managed Server(MS) 시작

MS가 위치하는 머신에 설치된 스크립트를 이용하여 MS를 시작할 수 있다. 도메인 내에 여러 서버가 여러 머신에 분포한다면 각 머신에 접속하여 MS가 위치하는 머신에서 스크립트를 수행해야 한다. 스크립트 이름은 startManagedServer이고, MASTER와 설정을 동기화하기 위해 masterurl 옵션을 추가로 설정해야 한다.

스크립트로 MS 시작

MASTER를 통하지 않고 MS가 위치하는 머신에 설치된 스크립트를 이용하여 MS를 시작할 수 있다.

도메인 내에 여러 서버가 여러 머신에 분포한다면 각 머신에 접속하여 MS가 위치하는 머신에서 스크립트를 수행해야 한다. 스크립트 이름은 startManagedServer이고, MASTER와 설정을 동기화하기 위해 masterurl 옵션을 추가로 설정해야 한다.

masterurl을 설정하지 않으면 INDEPENDENT 모드로 MS가 시작되고, 시작 후 MASTER가 MS를 찾으면 다시 MASTER의 관리를 받게 된다. MASTER가 시작하지 않은 경우 INDEPENDENT 모드로 MS를 시작하기 위해 masterurl을 생략할 수 있으나, 그 외 경우는 명시하기를 권장한다. INDEPENDENT 모드에 대한 설명은 INDEPENDENT 모드의 Managed Server(MS)를 참고한다.

startManagedServer 스크립트는 위치에 따라 다음과 같이 실행한다.

  • JEUS_HOME/bin

    JEUS_HOME/bin$ startManagedServer -masterurl <master_ip:master_baseport>
    -domain <domain_name> -server <server_name> -u <user_name> -p <password>
  • DOMAIN_HOME/bin

    DOMAIN_HOME/bin$ startManagedServer -masterurl <master_ip:master_baseport> 
    -server <server_name> -u <user_name> -p <password>
  • SERVER_HOME/bin

    SERVER_HOME/bin$ startManagedServer -masterurl <master_ip:master_baseport> -u <user_name> -p <password>

3. 서버 종료

본 절에서는 Master Server(MASTER)와 Managed Server(MS)를 종료하는 방법에 대해 설명한다.

3.1. Master Server(MASTER) 종료

MASTER의 종료는 콘솔 툴(jeusadmin)이나 스크립트를 사용한다.

콘솔 툴로 MASTER 종료

MS를 모두 종료한 후 MASTER를 종료할 수 있다(Managed Server(MS) 종료 참고). local-shutdown 명령어를 다음과 같이 실행한다.

[MASTER]domain1.adminServer>local-shutdown
스크립트로 MASTER 종료

MASTER가 위치하는 머신에 설치된 스크립트를 이용하여 종료할 수 있다. stopServer 스크립트는 위치에 따라 다음과 같이 실행한다.

  • JEUS_HOME/bin

    JEUS_HOME/bin$ stopServer -host <server_ip:server_baseport> -u <user_name> -p <password> 
  • DOMAIN_HOME/bin

    DOMAIN_HOME/bin$ stopServer -host <server_ip:server_baseport> -u <user_name> -p <password> 
  • SERVER_HOME/bin

    SERVER_HOME/bin$ stopServer -host <server_ip:server_baseport> -u <user_name> -p <password> 

3.2. Managed Server(MS) 종료

MASTER를 통하는 방법과 스크립트를 사용하는 방법이 있다.

MASTER를 통해 MS 종료

MASTER를 통해 MS를 종료할 경우에는 콘솔 툴(jeusadmin)을 사용한다.

콘솔 툴(jeusadmin)을 사용하여 다음과 같이 stop-server 명령어를 통해 MASTER가 운영 중인 경우에 MS를 종료할 수 있다. stop-server 명령어에 대한 자세한 사용법은 JEUS Reference 안내서의 stop-server를 참고한다.

[MASTER]domain1.adminServer>stop-server <server_list>
스크립트로 MS 종료

MS가 위치한 머신에 설치된 스크립트를 이용하여 MS를 종료할 수 있다. 즉, 도메인 내에 여러 서버가 여러 머신에 분포한다면 각 머신에 접속하여 MS가 위치하는 머신에서 스크립트를 수행해야 한다.

stopServer 스크립트는 위치에 따라 다음과 같이 실행한다.

  • JEUS_HOME/bin

    JEUS_HOME/bin$ stopServer -host <server_ip:server_baseport> -u <user_name> -p <password>
  • DOMAIN_HOME/bin

    DOMAIN_HOME/bin$ stopServer -host <server_ip:server_baseport> -u <user_name> -p <password>
  • SERVER_HOME/bin

    SERVER_HOME/bin$ stopServer -host <server_ip:server_baseport> -u <user_name> -p <password>

4. 서버 Life Cycle 상태 확인

MS의 Life Cycle은 MASTER의 판단에 의해 여러 가지 상태로 구분된다.

figure server lifecycle
MASTER의 판단에 의한 서버의 Life Cycle

각 상태에 대한 설명은 다음과 같다.

상태 설명

SHUTDOWN

시작되지 않은 상태 또는 정상 종료된 상태를 나타낸다.

STARTING

서버를 시작하는 중으로 아직 서비스는 할 수 없는 상태를 나타낸다.

STANDBY

시작 중에 등록된 애플리케이션을 Distribute하던 중 실패한 것이 있어 RUNNING 상태로 이동하지 못하고 머무르는 상태를 나타낸다. 이 상태에서 문제의 모듈을 수정하여 다시 시작을 하거나, 그 모듈을 무시하고 서비스를 하기 위해서는 force 옵션을 주고 start 명령어를 수행한다.

RUNNING

서버 시작이 완료되어 서비스를 할 수 있는 상태를 나타낸다.

SHUTTING_DOWN

서버가 종료 중인 상태를 나타낸다.

SUSPENDING

RUNNING 상태에서 모든 deploy된 애플리케이션의 서비스를 중단하기 위해 Suspend를 수행 중인 상태를 나타낸다.

RESUMING

SUSPENDED 상태에서 다시 모든 정지된(Stopped) 애플리케이션의 서비스를 재기하기 위해 Resume을 수행 중인 상태를 나타낸다.

SUSPENDED

관리자가 의도적으로 모든 애플리케이션을 정지하도록 Suspend를 수행한 상태를 나타낸다. 이 상태에서는 새롭게 애플리케이션을 추가하고 싶은 경우에도 해당 애플리케이션을 Distriibute만 가능하고 시작할 수는 상태이다.

FAILURE_SUSPECTED

MASTER가 판단하기로 MS와 연결되지 않아 해당 MS의 비정상 종료를 의심하는 상태를 나타낸다.

FAILED

MASTER가 판단하기로 MS와 일정 시간동안 계속 연결되지 않아 해당 MS의 비정상 종료를 확신한 상태를 나타낸다.

MASTER가 MS의 상태에 대해서 판단할 때는 SCF(System Clustering Framework)의 기능을 이용한다.

SCF는 도메인을 구성하는 여러 서버들간에 서로의 상태를 모니터링하거나 서로간의 메시징을 담당하는 모듈로써 네트워크를 통해서 원격에 존재하는 다른 서버의 상태를 파악하도록 디자인되어 있다. 네트워크를 통하기 때문에 원격 서버의 부하등의 원인으로 통신이 지연되거나 할 경우 장애로 오감지 될 수 있으며 이 경우 실제 장애가 아니기 때문에 원인이 해소되면 다시 정상 상태로 인식된다.

SCF는 기본적으로 Multicast를 사용하지만, 이를 지원하지 않는 환경이거나 다른 필요나 요구사항이 있을 경우 Virtual Multicast 모드를 사용하도록 설정할 수도 있다. Virtual Multicast는 Multicast를 대신하여 도메인을 구성하는 각 서버들간에 Socket 연결을 맺어서 통신하는 방식이다.

다음의 3가지 방법으로 서버의 Life Cycle 상태를 확인할 수 있다.

  • MBean 사용

    J2EEDomain#getServerState(String serverName)로도 서버의 상태를 모니터링할 수 있다. MBean의 사용 방법에 대한 자세한 내용은 JEUS JMX 안내서를 참고한다.

  • 콘솔 툴(jeusadmin) 사용

    다음과 같이 콘솔 툴에서 serverinfo 명령어를 사용하여 서버의 Life Cycle 상태를 확인할 수 있다.

    [MASTER]domain1.adminServer>serverinfo
    Information about Domain (domain1)
    ================================================================================
    +--------+--------+-----+-----+-----+------------+--------+-----------+--------+
    | Server | Status |Node | PID | Clu |   Latest   |  Need  |   Listen  |Running |
    |        |        |Name |     |ster | Start Time |   to   |   Ports   |Engines |
    |        |        |     |     |     | / Shutdown |Restart |           |        |
    |        |        |     |     |     |    Time    |        |           |        |
    +--------+--------+-----+-----+-----+------------+--------+-----------+--------+
    | adminS | RUNNIN | nod | 902 | N/A | 2022-07-19 | false  | base-0.0. | jms,   |
    |erver   |G(00:42 |e1   |88   |     | (화) 오후   |        |0.0:9736   |web, ejb|
    |(*)     |:15)    |     |     |     |12:55:20 KST|        | http-serv |        |
    |        |        |     |     |     |            |        |er-0.0.0.0 |        |
    |        |        |     |     |     |            |        |:8088      |        |
    +--------+--------+-----+-----+-----+------------+--------+-----------+--------+
    | server1| RUNNIN | N/A | 928 | clu | 2022-07-19 | false  | base-0.0. | jms,   |
    |        |G(00:00 |     |05   |ster1| (화) 오후   |        |0.0:9836   |web, ejb|
    |        |:08)    |     |     |     |01:37:27 KST|        | http-serv |        |
    |        |        |     |     |     |            |        |er-0.0.0.0 |        |
    |        |        |     |     |     |            |        |:8188      |        |
    +--------+--------+-----+-----+-----+------------+--------+-----------+--------+
    | server2| SHUTDO | N/A | N/A | clu | 2022-07-19 | N/A    | N/A       | N/A    |
    |        |WN      |     |     |ster1| (화) 오후   |        |           |        |
    |        |        |     |     |     |12:55:20 KST|        |           |        |
    +--------+--------+-----+-----+-----+------------+--------+-----------+--------+
    | server3| SHUTDO | nod | N/A | N/A | 2022-07-19 | N/A    | N/A       | N/A    |
    |        |WN      |e1   |     |     | (화) 오후   |        |           |        |
    |        |        |     |     |     |12:55:20 KST|        |           |        |
    +--------+--------+-----+-----+-----+------------+--------+-----------+--------+
    ================================================================================
    
    ===============================================================================================

    serverinfo 명령어에 대한 자세한 내용은 JEUS Reference 안내서의 server-info를 참고한다.