5.2 도메인 모드
도메인 모드의 가장 큰 특징은 여러 개의 JBoss 인스턴스를 ‘하나의 관리 단위’로 묶어 관리하는 기능이다. 도메인 기능을 사용하면 단일한 관리 인터페이스를 통해 여러 개의 JBoss 인스턴스에 대한 설정 변경이나 애플리케이션 배포 등의 관리 오퍼레이션을 실행할 수 있다.
그림 4는 도메인 구성 예제이다.

그림 4. 도메인 모드 구성 예
그림4에는 하나의 도메인이 구성되었다.
도메인은 ‘단일 도메인 컨트롤러로 관리 가능한 범위를 나타내는 논리적 단위’이다. 즉, 도메인이란 것은 관리 범위를 나타내는 컴포넌트로 도메인에 대한 설정을 도메인 전체에서 공유한다.
단순한 도메인 모드 생성하기
다음에서 단일 머신에서 도메인 모드를 구성하는 방법을 따라하기를 통해서 확인한다.
따라하기
- JBoss EAP 설치
- JBoss EAP 관리자 등록
- 도메인 디렉터리 생성
- 신규 도메인 host.xml 파일 수정
- 도메인 시작
- 웹 관리 콘솔에서 서버 그룹 생성
- 웹 관리 콘솔에서 서버 생성
- 웹 관리 콘솔에서 서버 그룹 ‘simpleGroup’을 실행
-
JBoss EAP 설치
access.redhat.com에서 JBoss EAP6 버전을 다운로드 한다. 다운로드 한 파일의 압축을 풀어 제품을 설치한다.‘$JBOSS_HOME/bin’ 디렉터리에 있는 sh 파일들에 대해 실행 권한을 준다.$ cd /EAP6book$ unzip jboss-eap-6.2.0.zip$ cd /EAP6book/jboss-eap-6.2/bin$ chmod +x *.sh -
JBoss EAP 관리자 등록
$ ./add-user.shWhat type of user do you wish to add?a) Management User (mgmt-users.properties)b) Application User (application-users.properties)(a): aEnter the details of the new user to add.Using realm 'ManagementRealm' as discovered from the existing property files.Username : adminThe username 'admin' is easy to guessAre you sure you want to add user 'admin' yes/no? yesPassword : [패스워드 입력]Re-enter Password : [패스워드 입력]What groups do you want this user to belong to? (Please enter a comma separated list, or leave blank for none)[ ]:About to add user 'admin' for realm 'ManagementRealm'Is this correct yes/no? yesAdded user 'admin' to file '/EAP6book/jboss-eap-6.2/standalone/configuration/mgmt-users.properties'Added user 'admin' to file '/EAP6book/jboss-eap-6.2/domain/configuration/mgmt-users.properties'Added user 'admin' with groups to file '/EAP6book/jboss-eap-6.2/standalone/configuration/mgmt-groups.properties'Added user 'admin' with groups to file '/EAP6book/jboss-eap-6.2/domain/configuration/mgmt-groups.properties'Is this new user going to be used for one AS process to connect to another AS process?e.g. for a slave host controller connecting to the master or for a Remoting connection for server to server EJB calls.yes/no? yesTo represent the user add the following to the server-identities definition <secret val-ue="b3Blbm5hcnUhMjM0" />관리자 아이디는 admin 이며 패스워드는 ‘opennaru!234’이고, 패스워드의 암호화된 값은 ‘b3Blbm5hcnUhMjM0’ 이다. -
도메인 디렉터리 생성
설치된 JBoss EAP 디렉터리에 기본으로 있는 ‘domain’ 디렉터리를 새로운 도메인인 ‘simpleDomain’으로 복사한다.$ cd /EAP6book/jboss-eap-6.2$ cp -R domain simpleDomain -
신규 도메인 host.xml 파일 수정
새로 복사된
simpleDomain디렉터리에configuration디렉터리에 있는host.xml파일을 다음과 같이 수정한다.<?xml version='1.0' encoding='UTF-8'?><host name="simpleDomain" xmlns="urn:jboss:domain:1.5">… 중략 … -
도메인 시작
simpleDomain 디렉터리를 기준으로하여 도메인을 실행한다.$ cd /EAP6book/jboss-eap-6.2/bin$ ./domain.sh -Djboss.domain.base.dir=/EAP6book/jboss-eap-6.2/simpleDomain=========================================================================JBoss Bootstrap EnvironmentJBOSS_HOME: /EAP6book/jboss-eap-6.2JAVA: javaJAVA_OPTS: -Xms64m -Xmx512m -XX:MaxPermSize=256m -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jboss.byteman -Djava.awt.headless=true=========================================================================…. 중략 …[Server:server-two] 14:09:27,846 INFO [org.jboss.as] (Controller Boot Thread) JBAS015874: JBoss EAP 6.2.0.GA (AS 7.3.0.Final-redhat-14) started in 5298ms - Start-ed 147 of 209 services (61 services are passive or on-demand) -
웹 관리 콘솔에서 서버 그룹 생성
웹 관리 콘솔에 접속한다. 관리자 아이디는 앞 단계에서 지정한 ‘admin’이고 패스워드는 ‘opennaru!234’이다.

Hosts -> simpleDomain -> Server Groups -> Add 를 선택한다.

다음의 항목을 새로운 서버 그룹 항목으로 입력한다.
Name: simpleGroup
Profile : default
Socket Binding: standard-sockets

-
웹 관리 콘솔에서 서버 생성
Hosts -> simpleDomain -> Server Configurations -> Add를 클릭한다.

다음 항목을 새로 생성할 서버 정보로 입력한다.
Name : simpleServer1
Server Groups : simpleGroup
Port Offset : 0
Auto Start : True

-
웹 관리 콘솔에서 서버 그룹 ‘simpleGroup’을 실행
Runtime -> Overview -> simpleGroup -> Start Group을 클릭하여 서버 그룹의 서버들을 시작한다.

새로 생성한 simpleGroup의 simpleServer1서버로 접속한다.
Port Offset 이 0이므로 해당 IP 의 8080 포트로 접속한다.

도메인 컨트롤러
도메인 모드에서 도메인 컨트롤러는 호스트 컨트롤러 중 하나가 그 역할을 담당하게 된다. 즉, 도메인 컨트롤러는 실제로는 호스트 컨트롤러 프로세스이지만, 논리적으로 도메인 전체를 관리하는 것으로 지정된 것이다. 도메인에서 도메인 컨트롤러와 호스트 컨트롤러의 구성 상의 특징은 다음과 같다.
- 도메인 모드에서 도메인 컨트롤러는 하나만 존재
- 호스트 컨트롤러 중 하나에 도메인 컨트롤러 역할이 할당됨
- 도메인 컨트롤러를 다른 도메인에 대한 도메인 컨트롤러로 설정하는 것은 불가
- 하나의 도메인 컨트롤러에 관리 가능한 호스트 컨트롤러의 수는 제한 없음
도메인 컨트롤러로 지정하는 방법은 도메인 컨트롤러가 될 host.xml파일에 <domain-controller>을 다음 그림과 같이 <local/>을 설정한다.

그림 5. 도메인 컨트롤러 설정
호스트 컨트롤러
호스트와 해당 호스트에서 실행되는 JBoss 인스턴스를 관리하는 것이 호스트 컨트롤러이다.
호스트를 설정하려면 아래 절차와 같이 host.xml을 직접 수정해야 한다. 도메인이 시작된 이후에 변경하고자 할 때도 host.xml파일을 수정해야 한다. 이때는 호스트 컨트롤러를 재 시작해야 한다.
-
호스트이름 설정
<host>엘리먼트의 name 속성에 대해서<host name="호스트이름" …>의 형식으로 설정한다. -
바인드 주소(Interface)의 설정
management,public,secure3 개의 인터페이스에 대해 바인드 주소를 설정한다. 호스트 컨트롤러는management인터페이스로 지정된 IP에 바인드된다. 이 설정은 시작 시에 각각jboss.bind.address.management,jboss.bind.address,jboss.bind.address.unsecure으로 시스템 프로퍼티를 지정하여 설정하는 것도 가능하며, 디폴트로127.0.0.1에 바인드 된다.참고로 JBoss EAP 6에서는 설정 파일내의
$\{KEY:default}형식으로 값을 지정하게 되면 시스템 프로퍼티를 사용하여-DKEY=test와 같이 JBoss 시작 시 값을 변경할 수 있다. 시스템 프로퍼티를 지정하지 않으면 : 뒤의 값인default가 적용된다.
서버 그룹
서버 그룹은 그 이름과 같이 서버를 논리적인 그룹으로 묶는 개념으로 도메인 모드에서는 각종 서브시스템이나 애플리케이션 배포 등을 관리하는데 있어서 중요한 컴포넌트이다.
서버 그룹의 주요 특징은 아래와 같다.
- 서버는 반드시 하나의 서버 그룹에 속해야 한다.
- 서버 그룹은 프로파일 설정과 배포에 대한 단위이다.
- 각각의 서버에 대해서 프로파일이나 애플리케이션 배포에 대한 설정은 할 수 없다.
- 서버 그룹에서는 배포, JVM 옵션, 시스템 프로퍼티 등의 설정은 동일하게 적용된다.
- 도메인에서 정의 가능한 서버 그룹의 수는 제한이 없다.
관리 도구에서 서버 그룹에 대한 설정 추가 및 변경은 도메인 컨트롤러에 의해 설정 파일(domain.xml)에 저장되고 도메인 내의 호스트 컨트롤러를 통해서 같은 서버 그룹에 속하는 서버에 전달된다.
아래의 그림에서는 deployment1 및 profile1 가 Server Group1 로, deployment2 및 profile2 가 Server Group2 로 공유된다. 서버 그룹에서는 프로파일이나 애플리케이션 배포 외에도 JVM 설정이나 시스템 프로퍼티 등을 공유할 수 있다.

그림 6. 서버 그룹 구성
서버
호스트상에서 구동되는 서버는 host.xml 파일의 servers 하위 엘리먼트인 server에서 관리된다. 단일 호스트 상에서 설정 가능한 서버 수의 제한은 없다. 물론 해당 호스트의 CPU 나 메모리 등의 자원 할당량에 따라 제한이 생긴다.

그림 7. 서버 모델
프로세스 구성
도메인 모드에서는, 그림 8 과 같이 각 호스트마다 프로세스 컨트롤러, 호스트 컨트롤러(도메인 컨트롤러) 및 서버 프로세스가 시작된다. 이렇게 이름에 컨트롤러가 붙는 프로세스는 스탠드얼론 모드에서는 존재하지 않는 프로세스로 호스트들 간의 연결이나 서버 프로세스의 관리 혹은 다른 프로세스의 감시를 위한 프로세스이다.

그림 8. 도메인 모드에서 프로세스 구성
각 호스트에서 시작 스크립트($JBOSS_HOME/bin/domain.sh)를 실행하면 프로세스 컨트롤러가 시작되어 그 자식 프로세스인 호스트 컨트롤러(혹은 도메인 컨트롤러) 및 서버 프로세스를 실행한다. 호스트 컨트롤러와 서버 프로세스간에는 부모, 자식 관계는 없다. 프로세스 컨트롤러는 주로 자식 프로세스인 호스트 컨트롤러와 서버 프로세스의 라이프사이클 감시와 시작과 정지를 담당한다. 관리되는(자식프로세스) 호스트 컨트롤러가 어떠한 장애에 의해 정지했을 경우에 프로세스 컨트롤러가 그것을 감지하여 재 시작한다. 도메인 모드에서 호스트상에 도메인 컨트롤러, 호스트 컨트롤러, 서버 프로세스가 프로세스 컨트롤러가 없는 상태로 계속 가동하는 것은 설계되어 있지 않은 상태이다. 즉, 프로세스 컨트롤러가 동작하지 않는 서버에서는 하위 프로세스들은 동작할 수 없다.
호스 트상의 특정 서버에 대한 시작/정지의 오퍼레이션은 도메인 컨트롤러로부터 해당 호스트의 호스트 컨트롤러에 전달되고, 실제로 프로세스 컨트롤러에 의해 시작, 정지한다. 프로세스 컨트롤러와 호스트 컨트롤러는 서로 소켓으로 통신한다.
도메인 모드에서 설정 파일들
도메인 모드에는 domain.xml 와 host.xml 두 개의 설정 파일이 있으며, 각각 설정 파일의 주요한 설정 항목은 다음과 같다.

그림 9. 도메인 모드 설정 파일 항목
-
domain.xml
전체 도메인에 공유되는 profile, server-groups, deployments및 interfaces, socket-binding-groups 의 네임스페이스, 네트워크 설정을 관리한다.
-
host.xml
호스트에 공유되는(혹은 호스트 고유 설정) servers, domain-controller, management 를 관리한다. 또, domain.xml 에서 정의한 interfaces와 같은 호스트의 명시적인 바인드 주소를 설정하여 subsystem에서 사용하는 포트에 대해서domain.xml에 설정된 socket-binding-group 을 참조한다.
domain.xml 는 마스터가 되는 호스트에만 있으며, 도메인 컨트롤러가 관리한다. host.xml 는 마스터 및 슬레이브가 되는 모든 호스트에 있으며 호스트 컨트롤러가 관리한다.
즉, 마스터가 되는 호스트의 도메인 컨트롤러는 domain.xml, host.xml 두 개의 설정 파일을 관리한다.

그림 10. 설정 파일 관리
호스트 컨트롤러 시작시 host.xml에만 포함되어 있는 interface 등 호스트 고유 설정을 로드한 후 호스트가 도메인의 마스터나 슬레이브 중 무엇인지 domain-controller 에서 판단한다. 호스트가 마스터인 경우에는 domain.xml을 로드한 후 슬레이브의 접속을 기다린다. 호스트가 슬레이브인 경우에는 마스터에 접속해, domain.xml 파일에 관리되는 도메인 전체의 설정을 받는다. domain.xml, host.xml 두 개의 파일에서 설정할 수 있는 항목은 도메인, 호스트, 서버 그룹과 서버의 여러 컴포넌트에 대해서 설정 가능하다. 설정이 적용되는 범위와 설정 가능한 항목들 중의 중요한 몇 가지는 다음의 표와 같다.
| 설정 항목 명 | 도메인 | 서버 그룹 | 호스트 | 서버 |
|---|---|---|---|---|
| system-properties | ○ | ○ | ○ | ○ |
| paths | ○ | ○ | ○ | |
| jvms | ○ | ○ | ○ |
표 1. 도메인 모드에서 중복 설정할 수 있는 항목
설정이 중복 정의되었을 경우에는 도메인 > 서버 그룹 > 호스트 > 서버 순으로 적용된다. 더 넓은 단위에서 설정한 값을 작은 단위에서 오버라이드(override)하여 사용할 수 있다.