도메인 설정변경

본 장에서는 도메인 설정 관리에 관련한 배경 지식을 설명하고, 실제로 설정을 변경하는 방법에 대해 설명한다.

1. 개요

도메인에 대한 설정은 각 도메인의 config 디렉터리(DOMAIN_HOME/config)에 존재한다. 설정 파일인 domain.xml에는 도메인에 속한 서버 및 클러스터에 대한 설정과 리소스 및 서비스에 대한 설정, deploy된 애플리케이션의 정보 등이 포함된다.

동적 설정 반영은 서버 운영 중에 설정을 변경하면 서버를 재부팅하지 않아도 실시간으로 반영이 되는 기능을 의미한다. 변경된 설정은 MASTER가 검증하여 MS로 분배하기 때문에 사용자가 직접 XML을 편집하여 변경한 경우는 동적 반영이 되지 않고, 관리 도구를 사용하여 변경한 설정에 대해서만 동적 반영된다.

MASTER를 통한 동적 설정변경을 위해서는 리소스 이름 jeus.domain.<domain-name>, 리소스 액션 DynamicConfiguration 권한이 필요하다. 특히, 보안 설정변경의 경우 사용자는 자신의 동적 설정변경 권한을 삭제할 수 없다. 이는 사용자가 언제나 자신이 설정한 부분을 다시 원래대로 복구할 수 있도록 보장하기 위한 것이다.

JEUS 시스템에서 특정 사용자에 특정 리소스 권한을 부여하는 방법은 JEUS Security 안내서의 보안 시스템 정책 설정을 참고한다.

2. 설정변경

서버 운영에 필요한 설정은 서버가 속한 도메인마다 하나의 파일로 관리됩니다.

도메인 설정 파일은 MASTER에서 관리 및 유지되고, 성능을 위해 서버가 존재하는 여러 머신에 분배되어 read-only 상태로 로컬 Cache에 존재한다. JEUS는 MASTER를 통해 동적 설정 반영을 지원한다.

3. 설정변경 적용

설정 내용이 변경되면 서버에 적용해야 하는데 설정은 동적 반영이 가능한 설정과 서버의 재시작이 필요한 설정으로 구분된다.

3.1. 동적 반영이 가능한 설정

동적 반영이 가능한 설정은 변경 후 서버의 재시작 없이 즉시 서버에 반영된다.

콘솔 툴 사용

콘솔 툴(jeusadmin)에서 동적 변경이 가능한 항목은 명령어 파라미터 설명에 [Dynamic]이 표시되어 있다.

jeusadmin의 각 명령어에서 lock, save, activate가 자동으로 수행되므로 [Dynamic] 항목에 설정값을 입력하여 해당 명령어를 수행하면 변경 사항이 즉시 반영된다.

[MASTER]domain1.adminServer>help modify-server
...
OPTIONS
[-removelogdir,--removeLogHomeDirectory]
   remove the log directory which has all the log files created by this
   server

[-node,--nodeName <node-name>]
   name of the node this server is located

<server-name>
   the name of server you want to modify configuration of

[-jvm,--jvmOptions <jvm-options>]
   jvm configurations applied to this server jvm

[-logdir,--logHomeDirectory <server-log-home-directory>]
   the log directory which has all the log files created by this server

[-a,--actionOnResourceLeak <action-on-resource-leak>]
   strategy when resource leak is detected. it must be one of
   AutoClose, NoAction, Warning

[-l,--logStdoutToRawFormat <print-stdout-to-raw-format>]
   [Dynamic] whether stdout is printed in row format or in JEUS Logger
   format.

[-m,--mejb <enable-MEJB>]
   [Dynamic] whether using MEJB or not .true, false

[-c,--classFtp <enable-class-ftp-service>]
   [Dynamic] whether using class ftp service or not .true, false

[-f,--forceLock]
    Acquires the configuration lock forcibly.

[-detail]
    show detail results

전체 설정에 대한 동적 변경 요소의 자세한 내용은 JEUS Reference 안내서의 jeusadmin을 참고한다.

3.2. 서버의 재시작이 필요한 설정

서버의 재시작이 필요한 설정과 실시간 동적 변경 반영이 가능한 설정이 함께 변경된 경우는 activate 명령어를 수행하면 후자만 실시간으로 반영된다. 서버의 재시작이 필요한 설정들은 반드시 해당 서버가 재시작되어야 반영된다. 본 절에서는 변경된 설정 중 반영되지 않은 설정 정보를 확인하는 방법에 대해서 설명한다.

콘솔 툴 사용

콘솔 툴(jeusadmin)에서 server-info 명령어를 수행하면 다음과 같이 서버 목록 및 상태 정보가 조회된다. 각 서버의 정보에서 'Need to Restart' 항목이 'true’로 출력된 경우에는 해당 서버의 재시작이 필요하다.

[MASTER]domain1.adminServer>server-info

Information about Domain (domain1)
===============================================================================================
+--------+---------+-----+-------+-----+----------------+---------+-------------+-------------+
| Server |  Status | Node|  PID  | Clus|  Latest Start  | Need to | Listen Ports| Running     |
|        |         |Name |       | ter |Time / Shutdown | Restart |             | Engines     |
|        |         |     |       |     |     Time       |         |             |             |
+--------+---------+-----+-------+-----+----------------+---------+-------------+-------------+
| adminSe| RUNNING | N/A | 5360  | N/A | 2016-08-23     | false   | base-192.168| jms,        |
|rver(*) |(00:25:52|     |       |     |(화) 오후        |         |.34.3:9736   | ejb, web    |
|        |)        |     |       |     |03:53:28 KST    |         | http-server-|             |
|        |         |     |       |     |                |         |0.0.0.0:8088 |             |
|        |         |     |       |     |                |         |jms-internal-|             |
|        |         |     |       |     |                |         |0.0.0.0:9741 |             |
+--------+---------+-----+-------+-----+----------------+---------+-------------+-------------+
| server1| RUNNING |node1| 6424  | N/A | 2016-08-23     | true    | base-192.168| jms,        |
|        |(00:16:15|     |       |     |(화) 오후        |         |.34.1:9836   | ejb, web    |
|        |)        |     |       |     |04:03:05 KST    |         |             |             |
+--------+---------+-----+-------+-----+----------------+---------+-------------+-------------+
| server2| RUNNING |node2| 3012  | N/A | 2016-08-23     | true    | base-192.168| jms,        |
|        |(00:16:15|     |       |     |(화) 오후        |         |.34.2:9936   | ejb, web    |
|        |)        |     |       |     |04:03:05 KST    |         |             |             |
+--------+---------+-----+-------+-----+----------------+---------+-------------+-------------+
===============================================================================================

4. 설정 로테이션

설정을 변경하면 기존 설정이 백업되는데 이것을 설정 로테이션이라고 한다.

현재 운영 중인 설정은 항상 다음의 경로에 있는 파일들이다.

DOMAIN_HOME/config/domain.xml
DOMAIN_HOME/config/security/SECURITY_DOMAIN_NAME/policies.xml
DOMAIN_HOME/config/security/SECURITY_DOMAIN_NAME/accounts.xml

동적 변경이 됐을 경우 또는 서버의 재시작이 필요한 경우 모두 포함하여 domain.xml에 대한 변경 사항이 있으면 이전 domain.xml에 대한 백업 파일이 DOMAIN_HOME/config/.history 폴더 안에 'domain_yyyymmdd_hhmmss.xml’의 형식으로 저장된다. jeus.server.configfile.backup.size 프로퍼티를 통해 백업 파일 개수를 지정할 수 있다. (기본값: 50)

5. 도메인 공통 설정변경

다음은 도메인 공통 설정에 대한 예시이다.

<domain>
    ...
    <production-mode>true</production-mode>
    <id>427655071</id>
    <master-server-name>adminServer</master-server-name>
    <domain-log-home>${JEUS_HOME}/domain1/logs</domain-log-home>
    <enable-json-command>false</enable-json-command>
    <enable-to-resynchronize-applications>false</enable-to-resynchronize-applications>
    <application-repositories>
        ...
    </application-repositories>
    <system-clustering-framework>
        <transport-type>HYBRID</transport-type>
        <trsnsport-address>224.0.0.1</trsnsport-address>
        <transport-port>12488</transport-port>
        <leader-discovery-timeout>3000</leader-discovery-timeout>
        <failure-detection-timeout>3000</failure-detection-timeout>
        <max-thread-pool-size>10</max-thread-pool-size>
        <min-thread-pool-size>0</min-thread-pool-size>
    </system-clustering-framework>
    <domain-backup>
        <backup-on-boot>false</backup-on-boot>
    </domain-backup>
    ...
</domain>

다음은 설정 항목에 대한 설명이다.

항목 설명

Jeus Master Server Name

MASTER의 ID에 해당하는 값으로 도메인 구성한 후에는 변경할 수 없다.

Id

도메인의 ID에 해당하는 값으로 도메인 구성한 후에는 변경할 수 없다.

Domain Log Home

도메인 내의 서버들이 공통으로 사용할 log의 폴더명으로 도메인 구성한 후에는 변경할 수 없다.

Production Mode

실제 운영환경에 적합한 모드로, 웹 애플리케이션의 auto-reload나 hot-swap과 같은 기능은 제공하지 않는다.

Enable Json Command

Json Command 사용 여부를 선택하는 항목으로 기본적으로 꺼져있다. 선택적으로 비활성화할 수 있고 필요한 경우 다시 체크하여 활성화할 수 있다.

Enable To Resynchronize Applications

MS가 INDEPENDENT 모드에서 DEPENDENT 모드로 변경된 경우 MS에서 MASTER와 애플리케이션을 동기화할 것인지에 대한 설정이다. (기본값: false, 동기화하지 않음)

Application Repositories

서비스할 애플리케이션의 위치를 설정하는 항목으로 동적으로 추가 및 삭제할 수 있다. 이에 대한 자세한 설명은 JEUS Applications & Deployment 안내서의 애플리케이션 저장소 추가/삭제/조회를 참고한다.

System Clustering Framework

서버들 간의 내부 통신 및 상태 확인에 사용되는 네트워크 설정으로써 도메인 전체에 걸쳐서 적용되므로 변경할 경우에는 도메인 전체를 다시 시작해야 한다.

JEUS에서는 서버 간에 서로의 상태를 공유하기 위해 기본적으로 Multicast를 사용한다. 자세한 내용은 도메인 생성을 참고한다.

  • transport : 타 서버와 통신하는 방식을 정하는 항목이다. DUMMY, HYBRID, MESH, TREE를 선택할 수 있다.

    • DUMMY : 타 서버와 일체의 통신을 수행하지 않는 방식이다.

    • HYBRID : IP Multicast를 사용하는 방식이다.

    • MESH, TREE : 도메인의 구성이 서브넷을 벗어나있거나 IP Multicast가 허용되지 않는 환경에서 TCP/IP를 이용하 여 Multicast를 흉내내는 방식이다. MESH는 전체 서버가 Full-mesh 형태로 연결되는 방식이며, TREE는 Master서버를 root로 하고 Managed Server들을 leaf로하는 tree의 형태로 연결되는 방식을 의미한다.

  • transport-address, transport-port : 선택한 transport의 종류에 따라서 그 동작에 필요한 주소 및 포트값을 설정하는 항목이다.

아래의 항목들은 대부분의 경우에 특별히 설정할 필요는 없으나, 도메인의 규모에 따라서 적절한 값으로 조절해야 한다.

  • failure-detection-timeout : 서버를 장애로 판단하는데 소요하는 시간을 설정하는 항목이다. 짧게 설정하면 장애가 민감하게 감지되나 오감지의 위험성이 생긴다. HYBRID 모드일 경우에는 IP Multicast를 사용하기 때문에 설정된 것보다 장애가 감지되기까지 더 긴 시간이 소요될 수 있다.

  • leader-discovery-timeout : 최초로 기동하는 서버가 이미 기동되어있는 서버 그룹을 찾는데 소요하는 시간을 설정하는 항목이다.

  • max-thread-pool-size : SCF가 사용하는 Thread pool의 최대 크기를 설정하는 항목이다.

  • min-thread-pool-size : SCF가 사용하는 Thread pool의 최소 크기를 설정하는 항목이다.

Domain Backup

JEUS Master Server를 기동할 때 백업 파일을 만들지에 대한 설정이다.

백업 파일의 생성 여부와 디렉터리를 설정할 수 있다. 기본적으로 도메인 백업을 생성하지 않도록 설정은 꺼져있다. 해당 기능에 대한 자세한 설명은 도메인 백업을 이용한 장애 극복을 참고한다.

'Enable Json Command', 'Enable To Resynchronize Application', 'Application Repositories', 'Domain Backup'을 제외한 도메인 설정 항목은 동적 변경이 불가능하기 때문에 설정을 반영하기 위해서는 도메인 전체를 재시작해야 한다. 도메인 설정은 개별 서버의 설정과는 달리 도메인 구성에 관한 설정이다. 따라서 도메인을 구성할 때 'Jeus Master Server Name', 'Id', 'Domain Log Home' , 'Production Mode', 'System Clustering Framework' 영역의 항목들은 신중하게 설정해야 한다.

6. 설정변경 예제

본 절에서는 콘솔 툴(jeusadmin)을 사용하여 System Thread Pool의 개수와 서버의 JVM 설정을 변경하는 방법에 대해 설명한다.

6.1. System Thread Pool 개수 변경

본 절에서는 콘솔 툴(jeusadmin)을 사용하여 System Thread Pool 개수를 변경하는 방법에 대해 설명한다.

콘솔 툴 사용

콘솔 툴(jeusadmin)의 modify-system-thread-pool 명령어를 실행하면 System Thread Pool 개수를 변경할 수 있다. modify-system-thread-pool 명령어에 대한 자세한 내용은 JEUS Reference 안내서의 modify-system-thread-pool을 참고한다.

[MASTER]domain1.adminServer>modify-system-thread-pool server1 -max 120
Successfully performed the MODIFY operation for the system thread pool of the server (server1), but all changes were non-dynamic. They will be applied after restarting.
Check the results using "modify-system-thread-pool server1 or show-system-thread-pool server1".

6.2. 서버의 JVM 설정변경

본 절에서는 콘솔 툴(jeusadmin)을 사용하여 서버의 JVM 설정을 변경하는 방법에 대해 설명한다.

콘솔 툴 사용

콘솔 툴(jeusadmin)을 사용하여 서버의 JVM 설정을 추가하려면 다음과 같이 add-jvm-option 명령어를 실행한다. add-jvm-option 명령어는 사용자가 입력한 옵션을 jvm-option list와 비교하여 같은 것이 없으면 추가한다.

[MASTER]domain1.adminServer>add-jvm-option -server server1 -opt "-Xmx256m -XX:MaxPermSize=128m"
Successfully performed the ADD operation for JVM configuration for the server(server1)..
Check the results using "list-jvm-options or add-jvm-option".

콘솔 툴(jeusadmin)을 사용하여 서버의 JVM 설정을 변경하려면 다음과 같이 modify-jvm-option 명령어를 실행한다. modify-jvm-option 명령어는 사용자가 입력한 옵션을 jvm-option list와 비교하여 같은 것을 수정한다.

[MASTER]domain1.adminServer>modify-jvm-option -server server1 -old "-Xmx256m -XX:MaxPermSize=128m" -new "-Xmx512m -XX:MaxPermSize=128m"
Successfully performed the MODIFY operation for JVM configuration for the server(server1)..
Check the results using "list-jvm-options or modify-jvm-option".

콘솔 툴(jeusadmin)을 사용하여 서버의 JVM 설정을 삭제하려면 다음과 같이 remove-jvm-option 명령어를 실행한다. remove-jvm-option 명령어는 사용자가 입력한 option을 jvm-option list와 비교하여 같은 것을 삭제한다.

[MASTER]domain1.adminServer>remove-jvm-option -server server1 -opt "-Xmx256m -XX:MaxPermSize=128m"
Successfully performed the REMOVE operation for JVM configuration for the server(server1)..
Check the results using "list-jvm-options or remove-jvm-option".

JVM 설정을 추가하는 경우에는 한번에 하나의 옵션을 추가해서 jvm-option 항목 하나에 하나의 옵션만 추가할 수 있도록 하고, 변경 및 삭제할 경우에는 list-jvm-options 명령어를 통해 설정된 옵션을 주어 수정하는 것을 권장한다.