제2장 Java 타입 노드 매니저

내용 목차

2.1. 개요
2.2. 기능별 동작 방식
2.2.1. 원격 머신에 있는 ManagedServer 기동
2.2.2. 서버 모니터링
2.2.3. 비정상 상태의 서버 재기동
2.2.4. Rolling Patch
2.2.5. DAS와 연결
2.3. 환경설정
2.3.1. 설정 파일
2.3.2. 필수 파일
2.4. 노드 설정 및 삭제
2.4.1. Java 타입 노드 설정
2.4.2. Java 타입 노드 삭제
2.5. 노드 매니저 시작 및 종료
2.6. Java 타입 노드 매니저를 통한 서버 제어
2.7. 로그 파일

본 장에서는 Java 타입 노드 매니저를 사용하기 위한 설정 방법과 동작 방식에 대해서 설명한다.

Java 타입 노드 매니저는 SSH 타입 노드 매니저에 비해 빠르게 서버의 비정상 종료를 감지하여 재기동해 줄 수 있다는 장점이 있다. 또한 OS가 Windows인 경우에 SSH 타입 노드 매니저는 사용할 수 없지만, Java 타입 노드 매니저는 OS에 상관없이 사용할 수 있다. 그러나 다른 머신에 JEUS를 설치할 수 없다는 단점이 있다.

본 절에서는 Java 타입의 노드 매니저를 사용하기 위한 방법과 기본 지식에 대해서 살펴본다.

본 절에서는 Java 타입 노드 매니저의 각 기능에 대한 동작 방식을 설명한다.

Java 타입 노드 매니저는 서버 프로세스의 상태를 주기적으로 모니터링해서 state 파일에 업데이트하고, 비정상 상황이 발생할 경우 서버 프로세스를 재기동한다.

노드 매니저는 노드에 존재하는 모든 서버에 대해서 모니터링하는 것이 아니고, 노드 매니저를 통해 기동한 서버의 프로세스만 모니터링한다. 따라서 서버의 비정상 종료를 감지해서 바로 재기동하고 싶다면 노드 매니저를 사용해서 기동해야 한다. 노드 매니저가 재기동된 경우에도 자신이 기동한 서버에 대한 모니터링은 계속 유지된다.

다음은 Java 타입 노드 매니저가 서버를 모니터링하는 과정을 간략하게 나타낸 그림이다.


다음은 노드 매니저가 재기동된 경우에 자신이 기동한 서버를 찾아서 모니터링을 계속하는 과정에 대한 단계별 설명이다.

  1. 노드 매니저가 재기동될 때 다음 경로에서 해당 노드 매니저에서 관리되고 있는 도메인 이름을 조회한다.

    JEUS_HOME/domains
  2. 각 도메인의 다음 경로의 서버 디렉터리를 통해 해당 노드 매니저에서 관리되고 있는 서버 이름을 조회한다.

    JEUS_HOME/domains/<domain-name>/servers
  3. 서버 디렉터리에서 <serverName>.address, <serverName>.lck, <serverName>.state, <serverName>.pid 파일의 존재 여부를 확인한다. 나열한 모든 파일이 존재하는 경우 서버는 운용 중인 상태이다.

  4. lock 파일을 통해 FILE LOCK을 얻는다.

  5. state 파일에 기록된 서버의 상태를 확인하고 서비스 가능한 상태인지를 판단한다.

    • 서비스 가능 상태 : RUNNING, STANDBY, SUSPENDED, RESUMING, SUSPENDING, STARTING

    • 서비스 불가능 상태 : SHUTDOWN, SUNTTING_DOWN

  6. pid 파일에 기록된 서버 프로세스 ID로 프로세스가 운용 중인지 여부를 확인한다. 만약 서버가 다운된 것을 확인하면 노드 매니저는 해당 서버를 재기동한다.

  7. address 파일에 기록된 서버의 호스트 정보를 바탕으로 소켓 연결을 맺어보고 서버 프로세스가 정상적으로 운영되고 있는지를 확인한다. 만약 서버가 다운된 것을 확인하면 노드 매니저는 해당 서버를 재기동한다.

  8. 서버가 서비스 가능한 상태라고 판단되면 주기적으로 서버의 상태를 확인하면서 서버를 모니터링한다.

참고

state 파일에 기록되는 서버의 상태 중 SHUTDOWN_NEED_TO_RESTART 상태는 노드 매니저가 재기동될 때 이전에 노드에서 서비스 중이던 서버를 재기동해 주기 위해 사용되는 state이다. 주로 Windows 서비스와 같이 노드 매니저를 OS의 서비스로 등록한 경우 서버 shutdown 후 재기동될 때 기존에 서비스 중이던 서버를 다시 재기동하여 서비스할 수 있도록 하기 위해 사용된다.

Java 타입 노드 매니저를 통해 도메인에 Patch를 적용할 수 있다. 콘솔 툴을 사용해서 원격 머신에 있는 서버에 Patch 파일을 전송 또는 삭제뿐만 아니라 Patch 적용을 위해 서버의 재기동까지 진행한다.

DAS에서 도메인에 속한 서버가 존재하는 원격 머신의 노드 매니저에 접속해서 Patch 파일을 전달, 삭제, 적용할 수 있다.

Java 타입 노드 매니저를 사용하기 위해 필요한 환경을 설정해야 한다.

Java 타입 노드 매니저를 사용하려면 다음의 설정 파일에 필요한 사항을 설정해야 한다. Java 타입 노드 매니저는 nodes.xml에 노드가 정의되는 것 이외에도 별도의 설정이 필요하다.

nodes.xml

다음 경로에 있는 nodes.xml 파일에 어떤 타입의 노드 매니저를 사용할 것인지 설정한다.

JEUS_HOME/domains

nodes.xml은 DAS에서 참조하는 노드의 설정으로 노드의 물리적인 주소를 정의하고 도메인 설정에서는 각 MS가 운영될 노드 정보를 설정해야 한다. 이 파일은 하나의 도메인에 국한된 파일이 아니라 머신에 설치된 JEUS에 존재하는 여러 도메인에서 모두 공유된다. 각 도메인의 DAS에서는 node.xml에 설정된 노드 정보에 따라 각 노드의 노드 매니저에 접속해서 필요한 명령어를 수행한다.

WebAdmin이나 콘솔 툴을 통해서 노드를 추가, 삭제할 수 있다. 노드 추가, 삭제에 대한 자세한 방법은 “2.4. 노드 설정 및 삭제”를 참고한다.

참고

Java 타입 노드 매니저는 nodes.xml에 설정된 머신 정보와 jeusnm.xml에 설정된 'host', 'port' 정보가 일치하도록 주의해서 설정해야 한다.

jeusnm.xml

jeusnm.xml는 머신에서의 노드 매니저의 동작 방식을 설정하는 설정 파일로 다음 경로에 위치한다.

JEUS_HOME/nodemanager

jeusnm.xml 파일을 열어 다음의 항목을 직접 설정한다.

항목설명
useNodeManagerJava 타입 노드 매니저를 사용할지 여부를 설정한다. (기본값: true)
host노드 매니저의 listen address를 설정한다. (기본값: localhost)
port노드 매니저의 listen port를 설정한다. (기본값: 7730)
serverMonitoringPeriod노드 매니저에서 서버 프로세스의 상태를 모니터링하는 주기를 설정한다. (기본값: 500, 단위: ms)
serverAutoRestart서버 프로세스가 비정상 종료된 경우 자동으로 해당 서버를 재기동해줄지 여부를 설정한다. (기본값: true)
serverRestartTryCount

서버 재기동을 시도할 횟수를 설정한다. (기본값: 5)

'serverRestartDurationTime'에 설정한 주기 안에 이 값에 설정한 횟수 이상의 서버 재기동이 시도되면 서버 프로세스에 문제가 있는 것으로 판단하고 서버 재기동을 진행하지 않는다.

serverRestartDurationTime

서버 재기동을 시도할 주기를 설정한다. (기본값: 120000, 단위: ms)

설정한 주기 안에 'serverRestartTryCount'에 설정한 횟수 이상의 서버 재기동이 시도되면 서버 프로세스에 문제가 있는 것으로 판단하고 서버 재기동을 진행하지 않는다.

serverRetryRestart서버 재기동이 실패하는 경우 재시도해줄지 여부를 설정한다. 이 값을 true로 설정하면 서버 재기동에 성공할 때까지 재시도한다. (기본값: false)
useSSLListener노드 매니저가 SSL을 사용할지 여부를 설정한다. (기본값: false)
keystoreFile

SSL을 사용할 때 인증에 사용될 Keystore 파일 경로를 설정한다.

(기본값: NODEMANAGER_HOME/keystore)

keystorePass

SSL을 사용할 때 인증에 사용될 Keystore 파일의 패스워드를 설정한다.

(기본값: jeuskeypass)

truststoreFile

SSL을 사용할 때 인증에 사용될 Truststore 파일 경로를 설정한다.

(기본값: NODEMANAGER_HOME/truststore)

truststorePass

SSL을 사용할 때 인증에 사용될 Truststore 파일의 패스워드를 설정한다.

(기본값: jeustruststorepass)

logFileName

노드 매니저의 로그 파일 위치를 설정한다. 파일의 절대 경로를 준 경우 해당 경로에 로그 파일을 만들고, 상대 경로를 준 경우 기본 로그 디렉터리에 설정한 이름으로 로그 파일을 만든다.

(기본값: JEUS_HOME/nodemanager/logs/JeusNodeManager.log)

standbyPort노드 매니저의 standby 프로세스를 돌려서 노드 매니저가 이상 종료될 때에 standby 프로세스가 자동으로 대체하게 할 수 있다. 사용할 포트를 설정함으로써 기능을 켤 수 있다. 자세한 내용은 “5.3. 이중화된 노드 매니저 사용 방법”"Standby 노드 매니저"를 참고한다.
processListRQS 프로세스들의 정보를 리스트의 형태로 설정한다. 자세한 설정 방법은 “4.3. 환경설정”을 참고한다.

<serverName>.properties

<serverName>.properties 파일은 노드 매니저에서 서버를 기동할 때 필요한 정보들에 대한 캐시 파일이다. 노드 매니저에서 서버를 기동한 뒤 다음 경로에 해당 파일을 생성한다.

SERVER_HOME/nodemanager

노드 매니저는 서버를 기동할 때 필요한 옵션들을 기록해서 다음 번에 옵션을 설정하지 않더라도 이 파일에 캐싱된 정보를 바탕으로 서버를 기동시킬 수 있다. 이 정보들은 콘솔 툴을 통해 노드 매니저에 직접 접속해서 서버를 기동시킬 때만 사용되고 DAS로 MS를 기동시킬 때는 해당 정보를 사용하지 않는다.

다음은 캐시되는 정보에 대한 설명이다.

항목설명
dasurlDAS의 호스트 정보를 나타낸다. MS의 경우에만 dasurl을 캐시한다.
username서버를 기동할 때 필요한 서버의 계정을 나타낸다.
password서버를 기동할 때 필요한 서버의 패스워드를 나타낸다.
sslArgumentsSSL을 사용하도록 설정된 서버의 경우 노드 매니저에서 서버에 접속할 때 SSL 인증에 필요한 SSL properties 정보를 설정한다.

설정 파일 외에 노드 매니저가 서버를 기동하고 모니터링하는 데 필요한 파일을 설정해야 한다.

해당 파일은 다음 경로에 위치한다.

JEUS_HOME/domains/<domain_name>/servers/<server_name>/nodemanager
파일설명
<serverName>.lck

서버 프로세스를 기동할 때 서버가 여러 번 기동되는 것을 방지하기 위해 노드 매니저에서 생성하는 파일이다. 이 파일은 노드 매니저에서 서버 프로세스를 시작시키기 전에 생성되고 서버 프로세스가 정상 종료되면 삭제된다.

노드 매니저가 재기동되었을 때 해당 파일의 유무에 따라 서버를 계속 모니터링할지 여부를 결정한다.

<serverName>.pid

서버 프로세스가 성공적으로 기동된 후에 노드 매니저에서 생성하는 서버의 프로세스 ID를 기록한 파일이다. 이 파일은 노드 매니저에서 서버 프로세스를 정상적으로 기동시킨 뒤에 생성되고 서버 프로세스가 정상 종료되면 삭제된다.

노드 매니저가 재기동되었을 때 해당 파일의 유무에 따라 서버를 계속 모니터링할지 결정한다. 또한 파일에 기록된 PID에 해당하는 프로세스의 존재 여부에 따라 서버의 비정상 종료를 판단해서 노드 매니저가 재기동된 후에도 서버를 재기동하여 계속 모니터링할 수 있다.

<serverName>.state

서버 프로세스의 기동이 성공적으로 완료된 후 노드 매니저에서 생성하는 서버의 상태를 기록한 파일이다. 이 파일은 노드 매니저에서 서버 프로세스를 정상적으로 기동시킨 뒤에 생성되고 서버 프로세스가 정상 종료되면 삭제된다. 노드 매니저에서는 주기적으로 서버의 상태를 체크하면서 해당 파일에 서버의 상태를 업데이트한다.

노드 매니저가 재기동되었을 때 해당 파일의 유무에 따라 서버를 계속 모니터링할지 결정하고, 파일에 기록된 서버의 상태를 확인하고 서버의 비정상 종료를 판단해서 노드 매니저가 재기동된 후에도 서버를 재기동하여 계속 모니터링할 수 있다.

<serverName>.address

서버가 기동하면서 생성하는 파일로 서버의 Listen Address와 Listen Port가 기록된다. 이 파일은 서버가 기동될 때 생성되고 정상 종료되면 삭제된다.

노드 매니저가 재기동되었을 때 해당 파일의 유무에 따라 서버를 계속 모니터링할지 결정하고, 파일에 기록된 호스트 정보로 서버를 계속 모니터링할 수 있다. 또한 서버로의 MBean 요청을 통해 서버 상태를 주기적으로 모니터링하여 서버의 비정상 종료 여부를 확인한다.

Java 타입의 노드는 WebAdmin과 콘솔 툴을 사용해서 설정하고 삭제할 수 있다.

본 절에서는 WebAdmin과 콘솔 툴을 사용해서 Java 타입 노드를 설정하는 방법에 대해 설명한다.

참고

WebAdmin이나 콘솔 툴을 사용해서 서버를 기동하려면 서버에 노드의 이름(Node Name)이 설정되어 있어야 한다.

WebAdmin 사용

다음은 WebAdmin을 사용해서 Java 타입 노드를 설정하는 방법이다.

  1. 노드와 관련된 모든 사항은 [Node 설정] 메뉴를 통해 편집 및 동작이 가능하다. WebAdmin의 메인 화면에서 [Node 설정]을 선택한다.

  2. Nodes 화면에서는 노드 목록을 조회할 수 있다. 사용자가 노드를 추가하지 않았더라도 JEUS를 설치할 때 기본적으로 생성되는 노드가 노드 목록에 조회된다. 노드 추가를 위해 [ADD] 버튼을 클릭한다.

    참고

    노드 설정은 [LOCK & EDIT] 버튼을 클릭하여 설정변경 모드로 전환하거나 [Activate Changes] 버튼을 클릭하여 변경 반영과 같은 동작을 필요로 하지 않는다.

  3. Node 화면에서 설정할 노드의 이름, 호스트 정보를 입력한다. 노드의 타입으로 'Java'를 선택하고 관련 항목을 입력한 뒤 [확인] 버튼을 클릭한다.

  4. Nodes 화면 상단에 노드가 성공적으로 추가되었다는 메시지와 함께 노드 목록에 추가한 노드 정보가 조회된 것을 확인할 수 있다.

콘솔 툴 사용

다음은 콘솔 툴을 사용해서 노드를 설정하는 방법이다.

  1. add-java-node 명령어를 사용해서 'node1'이라는 노드를 추가한다.

    [DAS]domain1.adminServer>add-java-node node1 -host 192.168.34.65 -port 7730
    The node [node1] was successfully added.
  2. show-node 명령어를 사용해서 추가된 노드의 설정을 조회한다. Java 타입의 'node1'이 조회되는 것을 확인할 수 있다.

    [DAS]domain1.adminServer>show-node node1
    ============================================================
    +------------------------------------------+---------------+
    |                 Property                 |     Value     |
    +------------------------------------------+---------------+
    | Node Name                                | node          |
    | Host                                     | 192.168.34.65 |
    | Mapped Servers                           |               |
    | Node Type                                | JAVA          |
    | NodeManager Port                         |          7730 |
    | Use SSL                                  | false         |
    +------------------------------------------+---------------+
    ============================================================

    또한, list-nodes 명령어를 사용해서 도메인의 노드들을 조회할 수 있다.

    [DAS]domain1.adminServer>list-nodes
    =========================================================================
    +-----------+------+-------------------------------------+--------------+
    | Node name | Type |            Under control            | JEUS version |
    +-----------+------+-------------------------------------+--------------+
    | node1     | JAVA | N                                   | -            |
    +-----------+------+-------------------------------------+--------------+
    =========================================================================
  3. modify-java-node 명령어나 modify-node 명령어를 사용해서 노드를 변경할 수 있다.

    [DAS]domain1.adminServer>modify-java-node node1 -port 7731
    The node [node1] was modified successfully. Check the results using "show-node"
    [DAS]domain1.adminServer>modify-node node1 -port 7732
    The node [node1] was modified successfully. Check the results using "show-node"
    
  4. 변경된 노드 정보를 확인하려면 show-node 명령어를 사용해서 해당 노드의 설정을 조회한다.

    [DAS]domain1.adminServer>show-node node1
    ============================================================
    +------------------------------------------+---------------+
    |                 Property                 |     Value     |
    +------------------------------------------+---------------+
    | Node Name                                | node          |
    | Host                                     | 192.168.34.65 |
    | Mapped Servers                           |               |
    | Node Type                                | JAVA          |
    | NodeManager Port                         |          7732 |
    | Use SSL                                  | false         |
    +------------------------------------------+---------------+
    ============================================================

본 절에서는 WebAdmin과 콘솔 툴을 사용해서 Java 타입 노드를 삭제하는 방법에 대해 설명한다.

WebAdmin 사용

다음은 WebAdmin을 사용해서 노드를 삭제하는 방법이다.

  1. WebAdmin의 메인 화면에서 [Node 설정]을 선택한다. Nodes 화면에 조회된 노드 목록에서 삭제할 노드의 [delete] 버튼을 클릭한다.

  2. 노드 삭제에 대한 확인 메시지가 나타나고, [확인] 버튼을 클릭하면 해당 노드는 삭제된다.

  3. Nodes 화면 상단에 노드가 성공적으로 삭제되었다는 메시지와 함께 노드 목록에서 해당 노드 정보가 조회되지 않는 것을 확인할 수 있다.

콘솔 툴 사용

다음은 콘솔 툴을 사용해서 노드를 삭제하는 방법이다.

Java 타입의 노드 매니저는 SSH 타입의 노드 매니저와 달리 별도의 시작 및 종료 프로세스가 필요하다.

Java 타입 노드 매니저 시작

Java 타입의 노드 매니저는 스크립트를 통해서 실행시킨다. JEUS_HOME/bin 하위에 존재하는 startNodeManager를 실행시키면 다음과 같이 노드 매니저가 DAS나 콘솔 툴로부터 명령어를 받아 서버를 제어할 준비를 한다. startNodeManager -h로 사용할 수 있는 옵션을 확인할 수 있다.

JEUS_HOME/bin$ startNodeManager
**************************************************************
  - JEUS Home         : /home/jeus/jeus8
  - Added Java Option :
  - Java Vendor       : Sun
**************************************************************
...
[2016.07.28 13:55:32][2] [nodemanager-1] [NodeManager-0101] The node manager is starting.
[2016.07.28 13:55:32][2] [nodemanager-1] [NodeManager-0102] Initializing the node manager configuration.
[2016.07.28 13:55:32][2] [nodemanager-1] [NodeManager-0108] Beginning to listen: localhost/127.0.0.1:7730.
[2016.07.28 13:55:32][2] [nodemanager-10] [NodeManager-0109] Processing the request......

노드 매니저가 서버를 모니터링하는 중에 종료되어 다시 기동되었다면 이전에 모니터링하던 서버를 계속 모니터링하기 위한 작업을 한다. 이때는 다음과 같은 로그가 발생한다.

JEUS_HOME/bin$ startNodeManager
**************************************************************
  - JEUS Home         : /home/jeus/jeus8
  - Added Java Option :
  - Java Vendor       : Sun
**************************************************************
...
[2016.07.28 13:59:16][2] [nodemanager-1] [NodeManager-0101] The node manager is starting.
[2016.07.28 13:59:16][2] [nodemanager-1] [NodeManager-0102] Initializing the node manager configuration.
[2016.07.28 13:59:16][2] [nodemanager-1] [NodeManager-0108] Beginning to listen:localhost/127.0.0.1:7730.
[2016.07.28 13:59:16][2] [nodemanager-1] [NodeManager-0115] Domain=[domain1], Server=[adminServer]
[2016.07.28 13:59:16][2] [nodemanager-10] [NodeManager-0109] Processing the request......
[2016.07.28 13:59:16][2] [nodemanager-1] [NodeManager-0115] Domain=[domain1], Server=[server1]
[2016.07.28 13:59:16][2] [nodemanager-11] [NodeManager-0137] Beginning to monitor the server[adminServer] in the domain[domain1].
[2016.07.28 13:59:16][2] [nodemanager-12] [NodeManager-0137] Beginning to monitor the server[server1] in the domain[domain1].
[2016.07.28 13:59:16][2] [nodemanager-11] [NodeManager-0145] The process is alive(Server=adminServer, Process ID=4856).
[2016.07.28 13:59:17][2] [nodemanager-12] [NodeManager-0145] The process is alive(Server=server1, Process ID=5376).

참고

노드 매니저를 기동할 때 DAS를 같이 기동할 수도 있다. 도메인을 구성하고 처음으로 노드 매니저를 띄우려고 할 때 DAS 기동 옵션을 준 경우 해당 노드에 DAS를 기동시켜준다.

Java 타입 노드 매니저 종료

Java 타입의 노드 매니저를 종료하는 방법은 스크립트를 사용하거나 콘솔 툴을 사용할 수 있다.

Java 타입 노드 매니저를 통해 서버를 제어할 수 있다. 본 절에서는 WebAdmin과 콘솔 툴을 사용한 서버 제어 방법에 대해 설명한다.

WebAdmin 사용

WebAdmin을 통해 서버를 기동하면 DAS가 서버를 기동하려는 머신의 노드 매니저에 접속해서 서버 기동 명령어를 보내주고, 노드 매니저는 서버를 해당 머신에 기동시킨다.

  1. WebAdmin의 메인 화면에서 [Servers]를 선택하면 서버 목록이 조회된다.

  2. 기동할 서버의 [start] 버튼을 클릭하면 Start Server 화면에서 서버 기동에 대한 옵션을 설정할 수 있다. 필요한 사항을 설정하고 [확인] 버튼을 클릭해서 서버를 기동시킨다.

  3. Servers 화면 상단에 서버가 성공적으로 기동되었다는 메시지와 함께 서버 목록에서 서버의 상태가 RUNNING으로 변경된 것을 확인할 수 있다.

콘솔 툴 사용

노드 매니저가 서버를 기동/종료시키고 서버의 상태를 확인하는 등의 제어는 콘솔 툴을 사용할 수도 있다.

콘솔 툴을 통해 서버를 제어하려면 먼저 콘솔 툴과 노드 매니저가 연결된 상태여야 하고 필요한 작업이 완료되면 접속을 종료한다.

노드 매니저의 로그는 JEUS_HOME/nodemanager/logs 하위에 JeusNodeManager.log라는 파일에 남겨진다. 노드 매니저에서 서버를 기동하거나 모니터링하면서 발생하는 로그 메시지들을 기록한다. 또한 서버가 기동되면서 서버에서 발생하는 부팅 로그 메시지도 기록된다.

노드 매니저의 로그 레벨을 설정하려면 노드 매니저를 기동하는 스크립트에 다음과 같이 설정할 수 있다.

-Djeus.nodemanager.log.level=FINEST