5장. JBoss EAP 7 도메인 모드
Name |
Date |
Reason For Changes |
Version |
오픈나루 |
2013/11 |
Initial Version |
1.0 |
전준식, jjeon@opennaru.com |
2018/02 |
Second Version |
2.0 |
JBoss EAP 6는 이전의 어떠한 버전보다도 가장 많이 변화한 버전으로 여러 가지 새로운 아키텍처가 적용되었다. 관리 측면에서 이전 버전에 있었던 ‘스탠드얼론 모드(standalone mode)’라는 단일의 서버를 각각 관리하는 방법 뿐만 아니라, JBoss EAP6에서 새롭게 도입된 JBoss 인스턴스를 그룹화하여 통합 관리하는 도메인 모드(domain mode)을 선택할 수 있게 되었다.
이번 장에서는
-
스탠드얼론 모드와 도메인 모드의 차이점
-
도메인 컨트롤러/호스트 컨트롤러
-
서버 그룹과 서버
-
도메인 모드에서의 자바 프로세스의 구조
에 대해 설명한 후, 설정 방법과 주요 설정 항목을 상세히 설명한다.
05-1.스탠드얼론 모드와 도메인 모드
JBoss EAP 6에는 두 가지 운영방식이 있다. 하나는 스탠드얼론 모드이고 다른 하나는 도메인 모드로 서버 운영의 요구사항에 따라 선택하여 이용할 수 있다. 스탠드얼론 모드는 이전의 버전과 같이 서버 인스턴스마다 관리 기능을 제공하는 방식이지만, 도메인 모드에서는 여러 개의 서버 인스턴스를 그룹으로 묶어 관리하는 방식이어서 설정 변경이나 애플리케이션 배포를 중앙에서 한번에 관리할 수 있다.
-
스탠드얼론 모드
JBoss EAP 5 버전까지 인스턴스 관리방법은 개별적으로 관리해야 하는 스탠드얼론 모드였다. 지금까지 대부분의 JBoss도입 사례가 스탠드얼론 모드로 구축되었으며 JBoss EAP 6 인스턴스도 스탠드얼론 모드로 실행할 수 있다. 스탠드얼론 모드로 인스턴스를 실행 하는 스크립트는 standalone.sh 또는 standalone.bat 를 사용한다. 여러 개의 스탠드얼론 모드 서버들을 대상으로 HA 클러스터로 묶어 사용할 수 있다.
-
도메인 모드
도메인 모드는 도메인 컨트롤러로 불리는 프로세스가 전체 도메인 관리를 담당하며 각 머신 상에서 동작하는 호스트 컨트롤러에서 실제 서비스를 담당하는 서버 인스턴스를 관리(설정, 애플리케이션 배포, 서버 라이프사이클) 한다.
아래의 표에서는 스탠드얼론 모드와 도메인 모드에 대해 주요 차이점에 대해 비교한 것이다.
구분 | 스탠드얼론 모드 | 도메인 모드 |
---|---|---|
JBoss 인스턴스를 묶는 서버 그룹 지원 |
불가 |
지원 |
클러스터 구성 |
서버 간 별도 클러스터링 구성 |
서버 그룹 단위로 자동 클러스터링 구성 |
애플리케이션 배포 스캐너 |
지원 |
불가 |
프로파일 |
인스턴스 기동 시 지정 |
운영 중 변경 가능 |
프로세스 |
서버 별로 개별 프로세스 |
서버를 관리하는 프로세스 컨트롤러와 구성 정보 동기화를 위한 호스트 컨트롤러 |
관리 도구 |
서비스는 인스턴스와 동일 |
별도의 인스턴스로 도메인 컨트롤러에 의해 관리 |
구성 파일 |
|
|
실행 스크립트 |
|
|
표 1. 스탠드얼론 모드와 도메인 모드의 비교
스탠드얼론 모드와 도메인 모드는 단지 관리 모델의 차이가 있을 뿐이며, 제공되는 서브시스템은 거의 같기 때문에 기능의 차이는 없다고 할 수 있다.
스탠드얼론 모드에는 특정 디렉터리에 있는 애플리케이션들을 배포하는 서브시스템이 하나 더 있다. 또, 클러스터링 기능에 있어서도 스탠드얼론 모드와 도메인 모드는 차이점이 없이 동일하게 사용할 수 있다.
관리 방법 비교
스탠드얼론 모드는 하나의 Java VM 프로세스로 JBoss 인스턴스를 구성하는 관리 모델로
이전 버전의 JBoss 아키텍처를 그대로 사용하는 것으로 Java 프로세스 내에 관리 모듈이 로딩된다.
JBoss 시작 스크립트를 실행하면 하나의 JBoss 인스턴스가 실행되고, 각 인스턴스마다 관리 작업을 수행한다. 만약 스탠드얼론 모드로 여러 개의 독립적인 인스턴스가 시작되어 서버들을 관리해야 하는 경우에 관리자는 각각의 인스턴스를 개별적으로 관리할 수 밖에 없다. 예를 들어, 스탠드얼론 모드에서 전체 서버를 대상으로 애플리케이션을 배포하거나 서버의 설정을 변경하는 경우 관리자가 개별적으로 각 서버에 접속하여 반영해야 한다. 그림1처럼 스탠드얼론 모드에서는 두 개의 머신에 있는 4개의 인스턴스를 관리하기 위해서는 각 인스턴스의 관리 콘솔을 통해서 각각 4번 작업을 해주어야 한다.
도메인 모드는 하나의 도메인 컨트롤러를 통해서 관리된다. 도메인 컨트롤러는 ‘단일 관리 포인트’를 제공하는 자바 프로세스로 관리자가 웹 콘솔, CLI등의 관리도구를 사용하여 도메인 컨트롤러에 접속하여 도메인 전체의 관리 작업을 수행할 수 있다.
도메인 모드에는 각 머신 즉 호스트 별로 호스트 컨트롤러라는 프로세스가 존재한다. 이 호스트 컨트롤러는 도메인 컨트롤러에 연결하여 도메인 컨트롤러의 오퍼레이션(각종 설정 값의 관리, 배포 등)을 자신이 관리하는 서버에 반영하는 역할을 한다.
스탠드얼론 모드에서는 각각의 인스턴스 별로 관리와 서비스를 하게 되지만 도메인 모드에서는 인스턴스는 단독으로는 존재하지 않고, 호스트 컨트롤러(또는 도메인 컨트롤러)와 세트로 존재하고 호스트 컨트롤러의 관리를 통해 운영된다 그림1의 도메인 모드에서 관리자는 2개의 머신에서 운영되는 4개 서버 인스턴스를 관리하기 위해서 웹 콘솔를 통해 도메인 컨트롤러에 작업을 지시하는 형태로 운영하게 된다.
그림 1. 도메인모드와 스탠드얼론 모드의 관리 방법 비교
도메인 모드와 관리 기능을 비교하면 스탠드얼론 모드는 중앙 관리 기능을 사용할 수 없어 부족한 점이 많지만, 서버 인스턴스 구성 방법이 매우 간단하여 사용 사례는 더 많다. 기본적으로 Eclipse등의 IDE와 연계하여 사용하는 개발 환경이나, 몇 개의 JBoss 인스턴스만을 사용하는 운영 환경에서는 스탠드얼론 모드가 더 적합하다.
또한 대규모 환경에서도 배포 방법도 편리하고, 개별 인스턴스에 대해 상세한 제어를 할 수 있기 때문에 스탠드얼론 모드를 선택하는 경우가 많이 있다.
스탠드얼론 모드는 개발 환경이나 소규모 시스템 영역으로부터 미션 크리티컬한 환경까지 다양한 환경에서 사용하고 있다.
프로파일 비교
스탠드얼론 모드는 프로파일이라고 불리는 설정 파일을 읽어 사용한다. 기본적으로 standalone.xml, standalone-ha.xml, standalone-full.xml, standalone-full-ha.xml 4가지 종류의 설정 파일이 준비되어 있다.
도메인 모드에서는 프로파일에 대한 설정을 domain.xml 파일 하나에 정의하고 관리한다. 사용되는 모든 프로파일은 domain.xml 파일 안에 default, ha, full, full-ha로 정의되어 있다.
다음 그림은 스탠드얼론 모드와 도메인 모드에서 프로파일을 비교 정리한 것이다.
그림 2. 스탠드얼론 모드와 도메인 모드의 프로파일 비교
설정 파일은 JBoss EAP 6 시작 스크립트에 옵션을 지정하여 변경할 수 있다.
아래의 예제는 ha프로파일(설정 파일 standalone-ha.xml)을 지정해 스탠드얼론 모드로 JBoss EAP 6를 시작한 것이다.
$ ./standalone.sh --server-config=standalone-ha.xml
사용할 설정 파일은 JBoss EAP 6에 배포되는 애플리케이션이 필요로 하는 기능에 맞추어 적합한 프로파일 파일을 선택해 이용한다. 예를 들어, 배포할 애플리케이션이 messaging(JMS) 기능을 사용하는 것이라면 full, full-ha 프로파일을 선택해야 한다. 또 클러스터링을 사용하려면 뒤에 -ha 가 붙은 프로파일을 선택해야 한다. 만약 적합한 것이 없다면 새로운 설정 파일을 작성하여 사용하는 것도 가능하다.
클러스터 구성 비교
스탠드얼론 모드에서 클러스터 구성은 각각의 인스턴스 별로 지정하여 클러스터를 묶는다. 클러스터를 구성하고 있는 인스턴스들은 상호간의 정보 교환이나 중앙화된 관리 방법은 없다.
클러스터내의 인스턴스들이 동일한 애플리케이션 배포나 설정 정보들의 유지는 관리자의 운영 방법으로 동기화해야 한다.
스탠드얼론 모드에서 클러스터링을 활성화하려면 $JBOSS_HOME/bin/standalone.sh -server-config=standalone-ha.xml -Djboss.node.name=UNIQUE_NODE_NAME 과 같이 시작 옵션을 주어 실행해야 한다.
도메인 모드에서는 동일한 구성을 적용하는 인스턴스의 그룹을 서버 그룹이라고 부른다. 도메인 컨트롤러와 호스트컨트롤러가 연결되어 도메인에 포함되는 서버 그룹과 그 서버 그룹에 포함되는 서버 인스턴스 정보를 관리한다.
서버 그룹은 자동적으로 클러스터로서 구축되기 때문에 스탠드얼론 모드와 같이 클러스터를 별도로 정의할 필요가 없다. 어플리케이션은 서버 그룹(클러스터) 단위로 에 애플리케이션 배포 관리를 한다.
도메인 모드로 시작된 서버들에 대해서 클러스터링을 활성화하려면 domain.xml을 업데이트하고 ha프로필과 ha-sockets 소켓 바인딩 그룹을 사용하도록 서버 그룹을 지정한다.
<server-groups>
<server-group name="*server-group_1*" profile="*ha*">
<jvm name="default">
<heap size="64m" max-size="512m"/>
</jvm>
<socket-binding-group ref="*ha-sockets*"/>
</server-group>
</server-groups>
그림 3. 스탠드얼론 모드와 도메인 모드에서의 클러스터링 차이점
05-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.sh What type of user do you wish to add? a) Management User (mgmt-users.properties) b) Application User (application-users.properties) (a): a Enter the details of the new user to add. Using realm 'ManagementRealm' as discovered from the existing property files. Username : admin The username 'admin' is easy to guess Are you sure you want to add user 'admin' yes/no? yes Password : [패스워드 입력] 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? yes Added 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? yes To 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 Environment JBOSS_HOME: /EAP6book/jboss-eap-6.2 JAVA: java JAVA_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’, ‘secure’ 3 개의 인터페이스에 대해 바인드 주소를 설정한다. 호스트 컨트롤러는 ‘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)하여 사용할 수 있다.
소켓바인딩
JBoss EAP는 다수의 서브시스템이 내부적으로 밀접하게 연결되어 구성한다. 각 서브시스템이 기능을 실현하는데 통신 처리가 필요한 경우 각각 독자적으로 소켓을 열어 최적화된 통신을 사용한다. 이 때문에 JBoss EAP는 HTTP나 AJP등으로 리퀘스트를 받아들이기 위한 포트 이외에도 클러스터링이나 운영에 필요한 여러 개의 포트를 이용한다.
JBoss 하나의 인스턴스에서 사용하는 모든 포트에 대해 어느 기능이 무슨 프로토콜로 몇 번의 포트를 사용하는지를 정리한 것이 소켓바인딩이다.
OS나 방화벽 때문에 특정 프로토콜이 통신을 할 수 없는 경우나 또는 동일 OS상의 다른 프로세스와 포트 충돌로 인하여 문제가 발생하는 경우 JBoss가 올바르게 동작할 수 없다.
소켓바인딩은 서버 인스턴스의 프로파일이나 구성 파라미터에 따라서 다르기 때문에 현재 구성되어 있는 소켓바인딩을 올바르게 이해하는 것이 중요하다.
기본적인 소켓바인딩 그룹은 아래와 같이 프로파일 별로 4가지가 준비되어 있다.
-
full-ha-sockets
-
full-sockets
-
ha-sockets
-
standard-sockets
이름 | 포트 | 멀티 캐스트 포트 | 설명 | full-ha-sockets | full-sockets | ha-socket | standard-socket |
---|---|---|---|---|---|---|---|
ajp |
8009 |
Apache JServ 프로토콜. HTTP 클러스터링 및 부하 분산에 사용한다. |
Yes |
Yes |
Yes |
Yes |
|
http |
8080 |
배포 된 웹 애플리케이션 기본 포트. |
Yes |
Yes |
Yes |
Yes |
|
https |
8443 |
배포 된 웹 애플리케이션과 클라이언트 사이의 SSL 암호화 연결. |
Yes |
Yes |
Yes |
Yes |
|
jacorb |
3528 |
JTS 트랜잭션 및 다른 ORB 서비스의 CORBA 서비스. |
Yes |
Yes |
No |
No |
|
jacorb-ssl |
3529 |
SSL 암호화 CORBA 서비스. |
Yes |
Yes |
No |
No |
|
jgroups-diagnostics |
7500 |
멀티 캐스트. HA 클러스터에서 피어 검색에 사용한다. |
Yes |
No |
Yes |
No |
|
jgroups-mping |
45700 |
멀티 캐스트. HA 클러스터의 멤버를 검색하는 데 사용된다. |
Yes |
No |
Yes |
No |
|
jgroups-tcp |
7600 |
TCP를 사용하여 HA 클러스터에서 유니 캐스트 피어 검색. |
Yes |
No |
Yes |
No |
|
jgroups-tcp-fd |
57600 |
TCP를 통한 HA 오류 감지에 사용한다. |
Yes |
No |
Yes |
No |
|
jgroups-udp |
55200 |
45688 |
UDP를 사용하여 HA 클러스터에서 유니 캐스트 피어 검색. |
Yes |
No |
Yes |
No |
jgroups-udp-fd |
54200 |
UDP를 통한 HA 오류 감지에 사용한다. |
Yes |
No |
Yes |
No |
|
messaging |
5445 |
JMS 서비스. |
Yes |
Yes |
No |
No |
|
messaging-group |
HornetQ JMS 브로드 캐스트 감지 그룹에 의해 참조한다. |
Yes |
Yes |
No |
No |
||
messaging-throughput |
5455 |
JMS Remoting에 의해 사용한다. |
Yes |
Yes |
No |
No |
|
mod_cluster |
23364 |
JBoss EAP와 HTTP로드 밸런서 사이의 통신에 대한 멀티 캐스트 포트. |
Yes |
No |
Yes |
No |
|
osgi-http |
8090 |
OSGi 서브시스템을 사용하는 내부 컴포넌트에 의해 사용한다. |
Yes |
Yes |
Yes |
Yes |
|
remoting |
4447 |
원격 EJB 호출에 사용한다. |
Yes |
Yes |
Yes |
Yes |
|
txn-recovery-environment |
4712 |
JTA 트랜잭션 리커버리 매니저. |
Yes |
Yes |
Yes |
Yes |
|
txn-status-manager |
4713 |
JTA/JTS 트랜잭션 매니저. |
Yes |
Yes |
Yes |
Yes |
표 2. 기본 소켓 바인딩 참조
여러 대의 머신에서 도메인 구성하기
이제 도메인모드의 구성요소와 동작 방법을 이해하기 위하여 실제 구축 방법과 주요 설정 항목들에 대해서 설명을 한다.
두 대의 머신에서 하나는 도메인 컨트롤러를 실행하여 master 노드 역할을 하고 다른 한 대는 slave 노드 역할을 한다. 서버 그룹은 ‘simpleServerGroup1’이라는 이름으로 설정하고, 서버 그룹 내에는 master 호스트에는 ‘master_server1’과 slave1 호스트에서 ‘slave1_server1’을 생성한다.
다음과 같은 정보로 도메인 구성을 진행한다.
-
도메인 마스터 노드 : master (domain controller)
-
호스트 #1 : master , slave1
-
서버그룹 : simpleServerGroup1
-
프로파일 : ha
-
서버 : master_server1 (master), slave1_server1(slave1)
-
소켓 바인딩 : ha-sockets
그림 11. 도메인 구성 샘플
서버 설치 하기
기존의 테스트 환경을 지우고 새롭게 JBoss EAP 6를 설치 한다. 기존 환경과 중복하여 구성하여도 무방하나 혼동을 피하기 위해서 새롭게 설치하는 것부터 설명한다.
$ cd /EAP6book
$ unzip jboss-eap-6.2.0.zip
$ chmod +x /EAP6book/jboss-eap-6.2/bin/*.sh
JBoss 관리자 계정 생성
도메인 전체를 관리할 관리자 계정을 생성한다. 관리자 아이디는 ‘admin’이고, 패스워드는 ‘opennaru!234’로 생성한다. ‘<secret-value>’ 항목은 호스트 컨트롤러에서 도메인 컨트롤러로 접속하기 위한 암호화 키가 된다.
$ cd /EAP6book/jboss-eap-6.2/bin
$ ./add-user.sh
What type of user do you wish to add?
{empty}a) Management User (mgmt-users.properties)
{empty}b) Application User (application-users.properties)
(a): a
Enter the details of the new user to add.
Using realm 'ManagementRealm' as discovered from the existing property files.
Username : admin
The username 'admin' is easy to guess
Are you sure you want to add user 'admin' yes/no? yes
Password : [패스워드 입력]
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? yes
Added 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? yes
To represent the user add the following to the server-identities definition <secret-value="b3Blbm5hcnUhMjM0" />
master와 slave1 노드 디렉터리 생성하기
도메인을 복사하여 master 노드 구성과 slave1 구성 노드 생성한다.
$ cp -R /EAP6book/jboss-eap-6.2/domain /EAP6book/jboss-eap-6.2/master
$ cp -R /EAP6book/jboss-eap-6.2/domain /EAP6book/jboss-eap-6.2/slave1
그림 12. domain.xml 파일과 host.xml 파일의 주요 설정 내용
호스트1을 master 도메인으로 설정하고 <host name=”master”> 로 지정한다.
호스트 컨트롤러 중에서 도메인 컨트롤러로 지정하는 방법은 도메인 컨트롤러가 될 host.xml파일에 <domain-controller>을 다음과 같이 <local/>으로 설정한다.
<?xml version='1.0' encoding='UTF-8'?>
<host name="master" xmlns="urn:jboss:domain:1.5">
… 중략 ….
<domain-controller>
<local/>
</domain-controller>
호스트1에서master 노드를 실행한다.
$ cd /EAP6book/jboss-eap-6.2/bin
$ ./domain.sh -bmanagement 0.0.0.0 -b 0.0.0.0 -Djboss.domain.base.dir=/EAP6book/jboss-eap-6.2/master
=========================================================================
JBoss Bootstrap Environment
JBOSS_HOME: /eap6book/jboss-eap-6.2
JAVA: java
JAVA_OPTS: -Xms64m -Xmx512m -XX:MaxPermSize=256m -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jboss.byteman -Djava.awt.headless=true
=========================================================================
….중략..
[Server:server-two] 15:15:15,080 INFO [org.jboss.as] (Controller Boot Thread) JBAS015874: JBoss EAP 6.2.0.GA (AS 7.3.0.Final-redhat-14) *started in 5868ms* - Start-ed 147 of 209 services (61 services are passive or on-demand)
slave1 호스트를 구성
도메인 컨트롤러가 실행되는 ‘master’ 노드와 다른 호스트에 slave1 노드를 구성한다.
일단 master 노드에서 구성한 디렉터리를 묶어 slave1 노드로 복사한다.
$ cd /EAP6book
$ jar -cvf jboss-eap-6.2.jar jboss-eap-6.2
$ scp /eap6book/jboss-eap-6.2.jar admin@XXX.XXX.XXX.2:/eap6book/.
slave1 노드에서 복사한 JBoss EAP 압축 파일을 푼다.
$ jar -xvf jboss-eap-6.2.jar
slave1 호스트에서 host.xml 파일 수정
slave1 호스트에서 “$JBOSS_EAP/slave1/configuration” 에서 host.xml 파일을 수정한다.
host.xml 파일에서 <host name="slave1"> 을 수정한다.
host.xml 파일에서 <security-realm name="ManagementRealm"> 항목에 <server-identities>를 add-user.sh를 실행하여 생성된 <secret-value>값을 추가한다.
<?xml version='1.0' encoding='UTF-8'?>
<host name="*slave1*" xmlns="urn:jboss:domain:1.5">
<management>
<security-realms>
<security-realm name="ManagementRealm">
<server-identities>
<secret value="b3Blbm5hcnUhMjM0"/>
</server-identities>
<authentication>
<local default-user="$local" />
<properties path="mgmt-users.properties" relative-to="jboss.domain.config.dir"/>
</authentication>
<authorization map-groups-to-roles="false">
<properties path="mgmt-groups.properties" relative-to="jboss.domain.config.dir"/>
</authorization>
</security-realm>
<security-realm name="ApplicationRealm">
<authentication>
<local default-user="$local" allowed-users="*" />
<properties path="application-users.properties" relative-to="jboss.domain.config.dir" />
</authentication>
<authorization>
<properties path="application-roles.properties" relative-to="jboss.domain.config.dir"/>
</authorization>
</security-realm>
</security-realms>
host.xml 파일에서 <domain-controller> 항목에 username="admin" 을 추가한다.
<domain-controller>
<remote host="$\{jboss.domain.master.address}" port="$\{jboss.domain.master.port:9999}" security-realm="ManagementRealm" username="admin"/>
</domain-controller>
slave1 호스트 실행
Host.xml 파일에서 <domain-controller> 항목에 username="admin" 을 추가한다.
$ chmod +x /EAP6book/jboss-eap-6.2/bin/*.sh
$ cd /EAP6book/jboss-eap-6.2/bin
$ ./domain.sh -bmanagement 0.0.0.0 -b 0.0.0.0 -Djboss.domain.base.dir=/EAP6book/jboss-eap-6.2/slave1 –Djboss.domain.master.address XXX.XXX.XXX.1
웹 관리 콘솔에서simpleServerGroup1서버 그룹 생성
Hosts → Host:master → Server Groups → Add를 클릭한다.
[Create Server Group] master 노드에서 simpleServerGroup1 생성한다.
웹 관리 콘솔에서 master_server1서버 생성
Hosts → Host:master → Server Configurations → Add를 클릭한다.
[Create Server Configuration] master 노드에서 master_server1 서버를 생성한다.