1. 스탠드얼론 모드와 도메인 모드 |
JBoss EAP 6에는 두 가지 운영 방식이 있습니다.
하나는 스탠드얼론 모드이고 다른 하나는 도메인 모드로 서버 운영의 유구사항에 따라 선택하여 이용할 수 있습니다.
스탠드얼론 모드는 이전의 버전과 같이 서버 인스턴스(노드)마다 관리 기능을 제공하는 방식이지만, 도메인 모드에서는 여러 개의 서버 인스턴스(노드)를 그룹으로 묶어 관리하는 방식이어서 설정 변경이나 애플리케이션 배포를 중앙에서 한번에 관리할 수 있습니다.
<스탠드얼론 모드>
JBoss EAP 5 버전가지 인스턴스 관리 방법은 개별적으로 관리해야 하는 스탠드얼로 모드였습니다.
지금까지 대부분의 JBoss 도입 사례가 스탠드얼론 모드로 구축되었으며 JBoss EAP 6 인스턴스(노드)도 스탠드얼론 모드로 실행할 수 있습니다.
스탠드얼론 모드로 인스턴스(노드)를 실행하는 스크립트는 standalone.xml 또는 standalone.bat를 사용합니다.
여러 개의 스탠드얼론 모드 서버들을 대상으로 HA 클러스터로 묶어 사용할 수 있습니다.
<도메인 모드>
도메인 모드는 도메인 컨트롤러로 불리는 프로세스가 전체 도메인 관리를 담당합니다.
각 머신 상에서 동작하는 호스트 컨트롤러에서 실제 서비스를 담당하는 서버 인스턴스를 관리(설정, 애플리케이션 배포, 서버 라이프사이클)합니다.
<스탠드얼론 모드와 도메인 모드 비교>
구분 | 스탠드얼론 모드 | 도메인 모드 |
JBoss 인스턴스(노드)를 묶는 서버 그룹 지원 |
불가 | 지원 |
클러스터 구성 | 서버간 별도 클러스터링 구성 | 서버 그룹 단위로 자동 클러스터링 구성 |
애플리케이션 배포 스캐너 | 지원 | 불가 |
프로파일 | 인스턴스(노드) 기동 시 지정 | 운영 중 변경 가능 |
프로세스 | 서버 별로 개별 프로세스 |
서버를 관리하는 프로세스 컨트롤러 구성 정보 동기화를 위한 호스트 컨트롤러 |
관리 도구 | 서비스는 인스턴스(노드)와 동일 | 별도의 인스턴스(노드)로 도메인 컨트롤러에 의해 관리 |
구성 파일 | standalone.xml | domain.xml / host.xml |
실행 스크립트 | $ $JBOSS_HOME/bin/standalone.sh --server-config=standalone-ha.xml | $ $JBOSS_HOME/bin/domain.sh --server-config=domain.xml |
스탠드얼론 모드와 도메인 모드는 단지 관리 모델의 차이가 있을 뿐이며 제공되는 서브시스템은 거의 같기 때문에 기능의 차이는 없다고 할 수 있습니다.
스탠드얼론 모드에는 특정 디렉터리에 있는 애플리케이션들을 배포하는 서브시스템이 하나 더 있습니다. 또, 클러스터링 기능에 있어서도 스탠드얼론 모드와 도메인 모드는 차이점이 없이 동일하게 사용할 수 있습니다.
(1) 관리 방법 비교
스탠드얼론 모드는 하나의 Java VM 프로세스로 jBoss 인스턴스(노드)를 구성하는 관리 모델로 이전 버전의 JBoss 아키텍처를 그대로 사용하는 것으로 Java 프로세스 내에 관리 모듈이 로딩됩니다.
JBoss 시작 스크립트를 실행하면 하나의 JBoss 인스턴스(노드)가 실행되고, 각 인스턴스(노드) 마다 관리 작업을 수행합니다. 만약 스탠드얼론 모드로 여러 개의 독립적인 인스턴스(노드)가 시작되어 서버들을 관리해야 하는 경우에 관리자는 각각의 인스턴스를 개별적으로 관리할 수 밖에 없습니다.
예를 들어, 스탠드얼론 모드에서 전체 서버를 대상으로 애플리케이션을 배포하거나 서버의 설정을 변경하는 경우 관리자가 개별적으로 각 서버에 접속하여 반영해야 합니다. 두 대의 서버에 2개의 인스턴스(노드)를 관리하기 위해서는 각 인스턴스의 관리 콘솔을 통해서 4번의 작업을 해주어야 합니다.
도메인 모드는 하나의 도메인 컨트롤러를 통해서 관리됩니다.
도메인 컨트롤러는 "단일 관리 포인트"를 제공하는 Java 프로세스로 관리자가 웹 콘솔, CLI 등의 관리 도구를 사용하여 도메인 컨트롤러에 접속하여 도메인 전체의 관리 작업을 수행할 수 있습니다.
도메인 모드에는 각 머신 즉, 호스트 별로 호스트 컨트롤러라는 프로세스가 존재합니다. 이 호스트 컨트롤러는 도메인 컨트롤러에 연결하여 도메인 컨트롤러의 오퍼레이션(각종 설정 값의 관리, 배포 등)을 자신이 관리하는 서버에 반영하는 역할을 합니다.
스탠드얼론 모드에서는 각각의 인스턴스(노드) 별로 관리와 서비스를 하게 되지만 도메인 모드에서는 인스턴스(노드)는 단독으로 존재하지 않고, 호스트 컨트롤러(또는 도메인 컨트롤러)와 세트로 존재하고, 호스트 컨트롤러의 관리를 통해 운영됩니다.
도메인 모드와 관리 기능을 비교하면 스탠드얼론 모드는 중앙 관리 기능을 사용할 수 없어 부족한 점이 많지만, 서버 인스턴스(노드) 구성 방법이 매우 간단하여 사용 사례는 더 많습니다.
기본적으로 Eclipse 등의 IDE와 연계하여 사용하는 개발 환경이나 몇 개의 JBoss 인스턴스(노드)만을 사용하는 운영 환경에서는 스탠드얼론 모드가 더 적합니다.
또한, 대규모 환경에서도 배포 방법도 편리하고, 개별 인스턴스에 대해 상세한 제어를 할 수 있기 때문에 스탠드얼론 모드를 선택하는 경우가 많이 있습니다.
스탠드얼론 모드는 개발 환경이나 소규모 시스템 영역으로부터 미션 크리티컬한 환경까지 다양한 환경에서 사용하고 있습니다.
(2) 프로파일 비교
스탠드얼론 모드는 프로파일이라고 불리는 설정 파일을 읽어 사용합니다. 기본적으로 standalone.xml, standalone-ha.xml, standalone-full.xml, standalone-full-ha.xml 4가지 종류의 설정 파일이 준비되어 있습니다.
도메인 모드에서는 프로파일에 대한 설정을 domain.xml 파일 하나에 정의하고 관리합니다. 사용되는 모든 프로파일은 domain.xml 파일 안에 default, ha, full, full-ha로 정의되어 있습니다.
아래 그림은 스탠드얼론 모드와 도메인 모드에서 프로파일을 비교 정리한 것입니다.
설정 파일은 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가 붙은 프로파일을 선택해야 합니다. 만약 적합한 것이 없다면 새로운 설정 파일을 작성하여 사용하는 것도 가능합니다.
(3) 클러스터 구성 비교
스탠드얼론 모드에서 클러스터 구성은 각각의 인스턴스 별로 지정하여 클러스터를 묶습니다. 클러스터를 구성하고 있는 인스턴스들은 상호 간의 정보 교환이나 중앙화된 관리 방법은 없습니다.
클러스터 내의 인스턴스들이 동일한 애플리케이션 배포나 설정 정보들의 유지는 관리자의 운영 방법으로 동기화해야 합니다.
스탠드얼론 모드에서 클러스터링을 활성화하려면 $JBOSS_HOME/bin/standalone.sh --server-config=standalone-ha.xml -Djboss.node.name=UNIQUE_NODE_NAME과 같이 시작 옵션을 주어 실행해야 합니다.
도메인 모드에서는 동일한 구성을 적용하는 인스턴스의 그룹을 서버 그룹이라고 부릅니다. 도메인 컨트롤러와 호스트 컨트롤러가 연결되어 도메인에 포함되는 서버 그룹과 그 서버 그룹에 포함되는 서버 인스턴스(노드) 정보를 관리합니다.
서버 그룹은 자동적으로 클러스터로서 구축되기 때문에 스탠드얼론 모드와 같이 클러스터를 별도로 정의할 필요가 없습니다. 애플리케이션은 서버 그룹(클러스터) 단위로 애플리케이션 배포 관리를 합니다.
도메인 모드로 시작된 서버들에 대해서 클러스터링을 활성화하려면 domain.xml을 업데이트하고, ha 프로필과 ha-socket 소켓 바인딩 그룹을 사용하도록 서버 그룹을 지정해야 합니다.
<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-group>
2. 도메인 모드 |
도메인 모드의 가장 큰 특징은 여러 개의 JBoss 인스턴스를 "하나의 관리 단위"로 묶어 관리하는 기능입니다. 도메인 기능을 사용하면 단일한 관리 인터페이스를 통해 여러 개의 JBoss 인스턴스(노드)에 대한 설정 변경이나 애플리케이션 배포 등의 관리 오퍼레이션을 실행할 수 있습니다.
아래 그림은 하나의 도메인이 구성을 보여주고 있습니다.
도메인은 "단일 도메인 컨트롤러로 관리 가능한 범위를 나타내는 놀리적 단위"입니다. 즉, 도메인이란 것은 관리 범위를 나타내는 컴포넌트로 도메인에 대한 설정을 도메인 전체에서 공유합니다.
(1) 도메인 컨트롤러
도메인 모드에서 도메인 컨트롤러는 호스트 컨트롤러 중 하나가 그 역할을 담당하게 됩니다. 즉, 도메인 컨트롤러는 실제로 호스트 컨트롤러 프로세스이지만, 논리적으로 도메인 전체를 관리하는 것으로 지정된 것입니다. 도메인에서 도메인 컨트롤러와 호스트 컨트롤러의 구성상의 특징은 다음과 같습니다.
- 도메인 모드에서 도메인 컨트롤러는 하나만 존재
- 호스트 컨트롤러 중 하나에 도메인 컨트롤러 역할이 할당됨
- 도메인 컨트롤러를 다른 도메인에 대한 도메인 컨트롤러로 설정하는 것은 불가
- 하나의 도메인 컨트롤러에 관리 가능한 호스트 컨트롤러의 수는 제한 없음
도메인 컨트롤러로 지정하는 방법은 도메인 컨트롤러가 될 host.xml 파일을 아래와 같이 설정합니다.
vim host.xml
<domain-controller>
<local/>
</domain-controller>
(2) 호스트 컨트롤러
호스트와 해당 호스트에서 실행되는 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.insecure로 시스템 프로퍼티를 지정하여 설정하는 것도 가능하며, 디폴트로 127.0.0.1에 바인드 됩니다.
참고로 JBoss EAP 6에서는 설정 파일 내의 '${KEY:default}' 형식으로 값을 지정하게 되면 시스템 프로퍼티를 사용하여 '-DKEY=test'와 같이 JBoss 시작 시 값을 변경할 수 있습니다. 시스템 프로퍼티를 지정하지 않으면 : 뒤의 값인 'default'가 적용됩니다.
(3) 서버 그룹
서버 그룹은 그 이름과 같이 서버를 논리적인 그룹으로 묶는 개념으로 도메인 모드에서는 각종 서브시스템이나 애플리케이션 배포 등을 관리하는데 있어서 중요한 컴포넌트입니다.
서버 그룹의 주요 특징은 아래와 같습니다.
- 서버는 반드시 하나의 서버 그룹에 속해야 함
- 서버 그룹은 프로파일 설정과 배포에 대한 단위
- 각각의 서버에 대해서 프로파일이나 애플리케이션 배포에 대한 설정은 할 수 없음
- 서버 그룹에서는 배포, JVM 옵션, 시스템 프로퍼티 등의 설정은 동일하게 적용됨
- 도메인에서 정의 가능한 서버 그룹의 수는 제한이 없음
관리 도구에서 서버 그룹에 대한 설정 추가 및 변경은 도메인 컨트롤러에 의해 설정 파일(domain.xml)에 저장되고 도메인 내의 호스트 컨트롤러를 통해서 같은 서버 그룹에 속하는 서버에 전달됩니다.
아래의 그림에서는 deployment1 및 profile1이 Server Group1로, deployment2 및 profile2가 Server Group2로 공유됩니다. 서버 그룹에서는 프로파일이나 애플리케이션 배포 외에도 JVM 설정이나 시스템 프로퍼티 등을 공유할 수 있습니다.
(4) 서버
호스트상에서 구동되는 서버는 host.xml 파일의 servers 하위 엘리먼트인 server에서 관리됩니다. 단일 호스트상에서 설정 가능한 서버 수의 제한은 없습니다. 물론 해당 호스트의 CPU나 메모리 등의 자원 할당량에 따라 제한이 생깁니다.
(5) 프로세스 구성
도메인 모드에서는 각 호스트마다 프로세스 컨트롤러, 호스트 컨트롤러(도메인 컨트롤러) 및 서버 프로세스가 시작됩니다. 이렇게 이름에 컨트롤러가 붙는 프로세스는 스탠드얼론 모드에서는 존재하지 않는 프로세스로 호스트들 간의 연결이나 서버 프로세스의 관리 또는 다른 프로세스의 감시를 위한 프로세스입니다.
각 호스트에서 시작 스크립트($JBOSS_HOME/bin/domain.sh)를 실행하면 프로세스 컨트롤러가 시작되어 그 자식 프로세스인 호스트 컨트롤러(또는 도메인 컨트롤러) 및 서버 프로세스를 실행합니다.
호스트 컨트롤러와 서버 프로세스 간에는 부모, 자식 관계는 없습니다. 프로세스 컨트롤러는 주로 자식 프로세스인 호스트 컨트롤러와 서버 프로세스의 라이프사이클 감시와 시작과 정지를 담당합니다. 관리되는(자식 프로세스) 호스트 컨트롤러가 어떠한 장애에 의해 정지했을 경우에 프로세스 컨트롤러가 그것을 감지하여 재시작합니다.
도메인 모드에서 호스트상에 도메인 컨트롤러, 호스트 컨트롤러, 서버 프로세스가 프로세스 컨트롤러가 없는 상태로 계속 가동하는 것은 설계되어 있지 않은 상태입니다. 즉, 프로세스 컨트롤러가 동작하지 않는 서버에서는 하위 프로세스들은 동작할 수 없습니다.
호스트상의 특정 서버에 대한 시작/정지의 오퍼레이션은 도메인 컨ㄴ트롤러로부터 해당 호스트의 호스트 컨트롤러에 전달되고, 실제로 프로세스 컨트롤러에 의해 시작, 정지합니다. 프로세스 컨트롤러와 호스트 컨트롤러는 서로 소켓으로 통신합니다.
(6) 도메인 모드에서 설정 파일들
도메인 모드에는 domain.xml과 host.xml 두 개의 설정 파일이 있으며, 각각 설정 파일의 주요한 설정 항목은 다음과 같습니다.
- 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 두 개의 설정 파일을 관리합니다.
호스트 컨트롤러 시작 시 host.xml에만 포함되어 있는 interface 등 호스트 고유 설정을 로드한 후 호스트가 도메인의 마스터나 슬레이브 중 무엇인지 domain-controller에서 판단합니다.
호스트가 마스터인 경우에는 domain.xml을 로드한 후 슬레이브의 접속을 기다립니다. 호스트가 슬레이브인 경우에는 마스터에 접속해 domain.xml 파일에 관리되는 도메인 전체의 설정을 받습니다.
domain.xml, host.xml 두 개의 파일에서 설정할 수 있는 항목은 도메인, 호스트, 서버 그룹과 서버의 여러 컴포넌트에 대해서 설정 가능합니다. 설정이 적용되는 범위와 설정 가능한 항목들 중의 중요한 몇 가지는 다음의 표와 같습니다.
설정 항목 명 | 도메인 | 서버 그룹 | 호스트 | 서버 |
system-properties | O | O | O | O |
paths | O | O | O | |
jvms | O | O | O |
설정이 중복 정의되었을 경우에는 도메인 > 서버 그룹 > 호스트 > 서버 순으로 적용이됩니다. 더 넓은 단위에서 설정한 값을 작은 단위에서 오버라이드(override)하여 사용할 수 있습니다.
(7) 소켓 바인딩
JBoss EAP는 다수의 서브시스템이 내부적으로 밀접하게 연결되어 구성합니다. 각 서브시스템이 기능을 실현하는데 통신 처리가 필요한 경우 각각 독자적으로 소켓을 열어 최적화된 통신을 사용합니다. 이 때문에 JBoss EAP는 HTTP나 AJP 등으로 리퀘스트를 받아들이기 위한 포트 이외에도 클러스터링이나 운영이 필요한 여러 개의 포트를 이용합니다.
JBoss 하나의 인스턴스(노드)에서 사용하는 모든 포트에 대해 어느 기능이 무슨 프로토콜로 몇 번의 포트를 사용하는지를 정리한 것이 소켓 바인딩입니다.
OS나 방화벽 때문에 특정 프로토콜이 통신을 할 수 없는 경우나 또는 동일 OS상의 다른 프로세스와 포트 충돌로 인하여 문제가 발생하는 경우 JBoss가 올바르게 동작할 수 없습니다.
소켓 바인딩은 서버 인스턴스(노드)의 프로파일이나 구성 파라미터에 따라서 다르기 때문에 현재 구성되어 있는 소켓 바인딩을 올바르게 이해하는 것이 중요합니다.
기본적인 소켓 바인딩 그룹은 아래와 같이 프로파일 별로 4가지가 준비되어 있습니다.
- full-ha-sockets
- full-sockets
- ha-sockets
- standard-sockets
<기본 소켓 바인딩>
이름 | 포트 | 멀티 캐스트 포트 |
설명 | full-ha | full | ha | standard |
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 |
(8) 단순한 도메인 모드 생성하기
① JBoss EAP 설치
access.redhat.com에서 JBoss EAP 6.4 버전을 다운로드합니다.
다운로드한 파일의 압축을 풀어 제품을 설치합니다.
"$JBOSS_HOME/bin" 디렉터리에 있는 sh 파일들에 대해 실행 권한을 줍니다.
$ mkdir CLOUD
$ cd /CLOUD
$ unzip jboss-eap-6.4.0.zip
$ cd /jboss-eap-6.4.0/bin
$ chmod +x *.sh
② JBoss EAP 관리자 등록
$ ./add-user.sh
관리자 아이디는 admin으로 등록하고, 패스워드도 입력하면 암호화된 패스워드 값을 출력합니다.
③ 도메인 디렉터리 생성
설치된 JBoss EAP 디렉터리에 기본으로 있는 "domain" 디렉터리를 새로운 도메인인 "simpleDomain"으로 복사합니다.
$ cd /CLOUD/jboss-eap-6.4
$ 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 /CLOUD/jboss-eap-6.2/bin
$ ./domain.sh -Djboss.domain.base.dir/CLOUD/jboss-eap-6.4/simpleDomain
=======================================================================
JBoss Bootstrap Environment
JBOSS_HOME: /CLOUD/jboss-eap-6.4
JAVA: java
JAVA_OPTS: -Mms64m -Xmx512m -XX:MaxPermSize=256 -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jboss.byteman -Djava.awt.headless=true
======================================================================
... 생략 ...
⑥ 웹 관리 콘솔에서 서버 그룹 생성
웹 관리 콘솔에 접속합니다.
http://IP주소:9990/console/App.html
관리자 아이디는 admin, 패스워드는 입력한 패스워드를 입력합니다.
Hosts → simpleDomain → Server Group → Add를 선택합니다.
다음의 항목을 새로운 서버 그룹 항목으로 입력합니다.
- Name : simpleGroup
- Profile : default
- Sock 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 포트로 접속합니다.
(9) 여러 대의 머신에서 도메인 구성하기
두 대의 머신에서 하나는 도메인 컨트롤러를 실행하여 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
① JBoss EAP 설치
access.redhat.com에서 JBoss EAP 6.4 버전을 다운로드합니다.
다운로드한 파일의 압축을 풀어 제품을 설치합니다.
"$JBOSS_HOME/bin" 디렉터리에 있는 sh 파일들에 대해 실행 권한을 줍니다.
$ mkdir CLOUD
$ cd /CLOUD
$ unzip jboss-eap-6.4.0.zip
$ cd /jboss-eap-6.4.0/bin
$ chmod +x *.sh
② JBoss EAP 관리자 등록
도메인 전체를 관리할 관리자 계정을 생성합니다.
관리자 아이디는 'admin'이고, 패스워드는 '패스워드입력'으로 생성합니다.
'<secret-value>' 항목은 호스트 컨트롤러에서 도메인 컨트롤러로 접속하기 위한 암호화 키가 됩니다.
$ cd /CLOUD/Jboss-eap-6.4/bin
$ ./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.
... 생략 ...
To represent the user add the following to the server-identities definition <secret-value="j9B898e$jif" />
③ master와 slave1 노드 디렉터리 생성하기
도메인을 복사하여 master와 slave1 노드를 생성합니다.
$ cp -R /CLOUD/jboss-eap-6.4/domain /CLOUD/jboss-eap-6.4/master
$ cp -R /CLOUD/jboss-eap-6.4/domain /CLOUD/jboss-eap-6.4/slave1
호스트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 /CLOUD/jboss-eap-6.4/bin
$ ./domain.sh -bmanagement 0.0.0.0 -b 0.0.0.0 -Djboss.domain.base.dir="CLOUD/jboss-eap-6.4/master
========================================================
JBoss Bootstrap Environment
JBOSS_HOME: /CLOUD/jboss-eap-6.4
JAVA: java
JAVA_OPTS: -Xms64m -Xmx512m -XX:MaxPermSize=256m -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jboss.byteman -Djava.awt.headless=true
=======================================================
... 생략 ...
④ slave1 호스트를 구성
도메인 컨트롤러가 실행되는 'master' 노드와 다른 호스트에 slave1 노드를 구성합니다.
일단 master 노드에서 구성한 디렉터리를 묶어 slave1 노드로 복사합니다.
# cd /CLOUD
$ jar -cvf jboss-eap-6.4.jar jboss-eap-6.4
$ scp /CLOUD/jboss-eap-6.2.jar admin@xxx.xxx.xxx.2:/CLOUD
slave1 노드에서 복사한 JBoss EAP 압축 파일을 풉니다.
$ jar -xvf jboss-eap-6.4jar
⑤ slave1 호스트에서 host.xml 파일 수정
slave1 호스트에서 "$JBOSS_HOME/slave1/configuration" 에서 host.xml 파일을 수정합니다.
host.xml 파일에서 <host name="slave1">을 수정합니다.
<?xml version='1.0' encoding='UTF-8'?>
<host name="slave1" xmlns="urn:jboss:domain:1.5">
host.xml 파일에서 <security-realm name="ManagementRealm"> 항목에 <server-identities>를 add-user.sh를 실행하여 생성된 <secret-value> 값을 추가합니다.
<management>
<security-realms>
<security-realm name="ManagementRealm">
<server-identities>
<secret value="j9B898e$jif"/>
</server-identities>
... 생략 ...
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 호스트 실행
$ chmod +x /CLOUD/jboss-eap-6.4/bin/*.sh
$ cd /CLOUD/jboss-eap-6.4/bin
$ ./domain.sh -bmanagement 0.0.0.0 -b 0.0.0.0 -Djboss.domain.base.dir="CLOUD/jboss-eap-6.4/slave1 -Djboss.domain.master.address=xxx.xxx.xxx.1
... 생략 ...
⑦ 웹 관리 콘솔에서 simpleServerGroup1 서버 그룹 생성
웹 관리 콘솔에 접속합니다.
http://IP주소:9990/console/App.html
관리자 아이디는 admin, 패스워드는 입력한 패스워드를 입력합니다.
Hosts → Host:master → Server Group → Add를 선택합니다.
다음의 항목을 simpleServerGroup1 서버 그룹 항목으로 입력합니다.
- Name : simpleServerGroup1
- Server Group : simpleGroup
- Port Offset : 0
- Auto Start? : 체크
⑧ 웹 관리 콘솔에서 master_server1 서버 생성
Hosts → Host:master → Server Configurations → Add를 클릭합니다.
다음 항목을 새로 생성할 master_server1 서버 정보로 입력합니다.
- Name : master_server1
- Server Groups : simpleServerGroup1
- Port Offset : 0
- Auto Start : 체크 X
⑨ 웹 관리 콘솔에서 slave1_server1 버 생성
Hosts → Host:slave1 → Server Configurations → Add를 클릭합니다.
다음 항목을 새로 생성할 slave1_server1 서버 정보로 입력합니다.
- Name : slave1_server1
- Server Groups : simpleServerGroup1
- Port Offset : 0
- Auto Start : 체크 X
⑩ 웹 관리 콘솔에서 simpleServerGroup1 서버 그룹 시작
Runtime → Overview → simpleServerGroup1 → start Group을 클릭합니다. master 노드의 master_server1과 slave1 노드의 slave1_server1가 정상적으로 실행되는지 확인합니다.
참고서적 : 거침없이 배우는 JBoss
'IT 이야기 > JBoss EAP' 카테고리의 다른 글
JBoss EAP 6과 친해지기 10탄 - JBoss EAP 6 서브시스템 개요 및 프로파일 (0) | 2020.09.28 |
---|---|
JBoss EAP 6과 친해지기 9탄 - JBoss EAP 6 모듈 아키텍처 (0) | 2020.09.24 |
JBoss EAP 6과 친해지기 7탄 - JBoss EAP 6 주요 용어 정리 #3 (0) | 2020.09.22 |
JBoss EAP 6과 친해지기 7탄 - JBoss EAP 6 주요 용어 정리 #2 (0) | 2020.09.22 |
JBoss EAP 6과 친해지기 7탄 - JBoss EAP 6 주요 용어 정리 #1 (0) | 2020.09.22 |
댓글