3.3. 도메인 클러스터 모드

도메인 모드는 서버의 구성을 중앙에서 관리하고 게시하는 방법입니다.

표준 모드에서 클러스터를 실행하면 클러스터가 크기가 증가함에 따라 빠르게 악화될 수 있습니다. 구성을 변경해야 할 때마다 클러스터의 각 노드에서 수행합니다. 도메인 모드는 구성을 저장하고 게시하는 중앙 위치를 제공하여 이 문제를 해결합니다. 설정하는 것은 매우 복잡할 수 있지만 결국 가치가 있습니다. 이 기능은 Red Hat Single Sign-On이 파생되는 JBoss EAP Application Server에 빌드됩니다.

참고

가이드는 도메인 모드의 기본 사항을 설명합니다. 클러스터에서 도메인 모드를 설정하는 방법에 대한 자세한 단계는 JBoss EAP 구성 가이드에서 가져와야 합니다.

다음은 도메인 모드에서 실행의 몇 가지 기본 개념입니다.

도메인 컨트롤러
도메인 컨트롤러는 클러스터의 각 노드에 대한 일반 구성을 저장, 관리 및 게시하는 프로세스입니다. 이 프로세스는 클러스터의 노드가 구성을 가져오는 중앙 지점입니다.
호스트 컨트롤러
호스트 컨트롤러는 특정 시스템에서 서버 인스턴스를 관리합니다. 하나 이상의 서버 인스턴스를 실행하도록 구성합니다. 도메인 컨트롤러는 각 시스템의 호스트 컨트롤러와 상호 작용하여 클러스터를 관리할 수도 있습니다. 실행 중인 프로세스의 수를 줄이기 위해 도메인 컨트롤러는 실행 중인 시스템에서 호스트 컨트롤러 역할을 합니다.
도메인 프로필
도메인 프로필은 서버에서 부팅하는 데 사용할 수 있는 이름이 지정된 구성 세트입니다. 도메인 컨트롤러는 다른 서버에서 사용하는 여러 도메인 프로필을 정의할 수 있습니다.
서버 그룹
서버 그룹은 서버 컬렉션입니다. 구성 요소는 하나로 관리 및 구성됩니다. 도메인 프로필을 서버 그룹에 할당할 수 있으며 해당 그룹의 모든 서비스에서 해당 도메인 프로필을 구성으로 사용합니다.

도메인 모드에서는 마스터 노드에서 도메인 컨트롤러가 시작됩니다. 클러스터 구성은 도메인 컨트롤러에 있습니다. 다음으로 클러스터의 각 시스템에서 호스트 컨트롤러가 시작됩니다. 각 호스트 컨트롤러 배포 구성은 해당 시스템에서 시작할 Red Hat Single Sign-On 서버 인스턴스 수를 지정합니다. 호스트 컨트롤러가 부팅되면 이를 수행하도록 구성된 만큼 Red Hat Single Sign-On 서버 인스턴스가 시작됩니다. 이러한 서버 인스턴스는 도메인 컨트롤러에서 구성을 가져옵니다.

3.3.1. 도메인 구성

이 가이드의 다른 여러 장에서는 데이터베이스, HTTP 네트워크 연결, 캐시 및 기타 인프라 관련 항목과 같은 다양한 측면을 구성하는 방법을 설명합니다. 독립 실행형 모드는 standalone.xml 파일을 사용하여 이러한 작업을 구성하는 반면 도메인 모드는 …​/domain/configuration/domain.xml 구성 파일을 사용합니다. 여기에서 Red Hat Single Sign-On 서버의 도메인 프로필 및 서버 그룹이 정의됩니다.

domain.xml

domain file

주의

도메인 컨트롤러가 실행되는 동안 이 파일에 대한 변경 사항은 적용되지 않으며 서버에서 덮어쓸 수도 있습니다. 대신 명령줄 스크립팅 또는 JBoss EAP의 웹 콘솔을 사용합니다. 자세한 내용은 JBoss EAP 구성 가이드를 참조하십시오.

domain.xml 파일의 몇 가지 측면을 살펴보겠습니다. auth-server-standaloneauth-server-clustered 프로필 XML 블록을 통해 대량의 구성 결정을 내릴 수 있습니다. 네트워크 연결, 캐시 및 데이터베이스 연결과 같은 항목을 구성합니다.

auth-server 프로필

    <profiles>
        <profile name="auth-server-standalone">
            ...
         </profile>
       <profile name="auth-server-clustered">
           ...
        </profile>

auth-server-standalone 프로필은 클러스터되지 않은 설정입니다. auth-server-clustered 프로필은 클러스터형 설정입니다.

아래로 스크롤하면 다양한 socket-binding-groups 가 정의되어 있습니다.

socket-binding-groups

    <socket-binding-groups>
        <socket-binding-group name="standard-sockets" default-interface="public">
           ...
        </socket-binding-group>
        <socket-binding-group name="ha-sockets" default-interface="public">
           ...
        </socket-binding-group>
        <!-- load-balancer-sockets should be removed in production systems and replaced with a better softare or hardare based one -->
        <socket-binding-group name="load-balancer-sockets" default-interface="public">
           ...
        </socket-binding-group>
    </socket-binding-groups>

이 구성은 각 Red Hat Single Sign-On 서버 인스턴스에서 열리는 다양한 커넥터의 기본 포트 매핑을 정의합니다. ${…​} 을 포함하는 모든 값은 -D 스위치를 사용하여 명령줄에서 재정의할 수 있는 값입니다.

$ domain.sh -Djboss.http.port=80

Red Hat Single Sign-On의 서버 그룹은 server-groups XML 블록에 있습니다. 호스트 컨트롤러가 인스턴스를 부팅할 때 사용되는 도메인 프로필(기본값)과 Java VM의 일부 기본 부팅 인수도 지정합니다. 또한 socket-binding-group 을 server 그룹에 바인딩합니다.

서버 그룹

    <server-groups>
        <!-- load-balancer-group should be removed in production systems and replaced with a better softare or hardare based one -->
        <server-group name="load-balancer-group" profile="load-balancer">
            <jvm name="default">
                <heap size="64m" max-size="512m"/>
            </jvm>
            <socket-binding-group ref="load-balancer-sockets"/>
        </server-group>
        <server-group name="auth-server-group" profile="auth-server-clustered">
            <jvm name="default">
                <heap size="64m" max-size="512m"/>
            </jvm>
            <socket-binding-group ref="ha-sockets"/>
        </server-group>
    </server-groups>

3.3.2. 호스트 컨트롤러 구성

Red Hat Single Sign-On에는 …​/domain/configuration/ 디렉터리에 있는 두 개의 호스트 컨트롤러 구성 파일이 포함되어 있습니다. host-master.xmlhost-slave.xml. host-master.xml 은 도메인 컨트롤러, 로드 밸런서 및 하나의 Red Hat Single Sign-On 서버 인스턴스를 부팅하도록 구성되어 있습니다. host-slave.xml 은 도메인 컨트롤러와 통신하고 하나의 Red Hat Single Sign-On 서버 인스턴스를 부팅하도록 구성되어 있습니다.

참고

로드 밸런서는 필수 서비스가 아닙니다. 개발 시스템에서 드라이브 클러스터링을 쉽게 테스트할 수 있도록 존재합니다. 프로덕션 환경에서 사용할 수 있지만 사용하려는 하드웨어 또는 소프트웨어 기반 로드 밸런서가 다른 경우 이를 교체할 수 있습니다.

호스트 컨트롤러 구성

host files

로드 밸런서 서버 인스턴스를 비활성화하려면 host-master.xml 을 편집하고 "load-balancer" 항목을 주석 처리하거나 제거합니다.

    <servers>
        <!-- remove or comment out next line -->
        <server name="load-balancer" group="loadbalancer-group"/>
        ...
    </servers>

이 파일에 대해 주목해야 할 또 다른 흥미로운 점은 인증 서버 인스턴스를 선언하는 것입니다. port-offset 설정이 있습니다. domain.xml socket-binding-group 또는 server group에 정의된 네트워크 포트에는 port-offset 값이 추가됩니다. 이 예제 도메인 설정에서는 로드 밸런서 서버에서 열고 있는 포트가 시작된 인증 서버 인스턴스와 충돌하지 않도록 이 작업을 수행합니다.

    <servers>
        ...
        <server name="server-one" group="auth-server-group" auto-start="true">
             <socket-bindings port-offset="150"/>
        </server>
    </servers>

3.3.3. 서버 인스턴스 작업 디렉터리

호스트 파일에 정의된 각 Red Hat Single Sign-On 서버 인스턴스는 …​/domain/servers/{SERVER NAME} 에 작업 디렉터리를 생성합니다. 추가 구성이 있고 서버 인스턴스에 필요하거나 생성되는 임시, 로그 또는 데이터 파일도 배치할 수 있습니다. 서버당 이러한 구조의 구조는 다른 JBoss EAP 부팅 서버처럼 보입니다.

작업 디렉터리

domain server dir

3.3.4. Domain Boot Script

서버를 도메인 모드에서 실행하는 경우 운영 체제에 따라 서버를 부팅하기 위해 실행해야 하는 특정 스크립트가 있습니다. 이러한 스크립트는 서버 배포의 bin/ 디렉터리에 있습니다.

Domain Boot Script

domain boot files

서버를 부팅하려면 다음을 수행합니다.

Linux/Unix

$ .../bin/domain.sh --host-config=host-master.xml

Windows

> ...\bin\domain.bat --host-config=host-slave.xml

부팅 스크립트를 실행할 때 --host-config 스위치를 통해 사용할 호스트 제어 구성 파일을 전달해야 합니다.

3.3.5. 클러스터형 도메인 예

out-of-the-box domain.xml 구성을 사용하여 드라이브 클러스터링을 테스트할 수 있습니다. 이 예제 도메인은 하나의 시스템에서 실행하고 부팅하기 위한 것입니다.

  • 도메인 컨트롤러
  • HTTP 로드 밸런서
  • Red Hat Single Sign-On 서버 인스턴스 2개

두 시스템에서 클러스터 실행을 시뮬레이션하기 위해 domain.sh 스크립트를 두 번 실행하여 두 개의 별도의 호스트 컨트롤러를 시작합니다. 첫 번째는 도메인 컨트롤러, HTTP 로드 밸런서 및 하나의 Red Hat Single Sign-On 인증 서버 인스턴스를 시작하는 마스터 호스트 컨트롤러입니다. 두 번째는 인증 서버 인스턴스만 시작하는 슬레이브 호스트 컨트롤러가 됩니다.

3.3.5.1. 도메인 컨트롤러에 슬라브 연결 설정

그러나 작업을 부팅하려면 먼저 슬레이브 호스트 컨트롤러를 구성하여 도메인 컨트롤러에 안전하게 통신할 수 있습니다. 이 작업을 수행하지 않으면 슬레이브 호스트에서 도메인 컨트롤러에서 중앙 집중식 구성을 가져올 수 없습니다. 보안 연결을 설정하려면 마스터와 슬레이브 간에 공유할 서버 admin 사용자와 시크릿을 생성해야 합니다. …​/bin/add-user.sh 스크립트를 실행하여 이 작업을 수행합니다.

스크립트를 실행하면 Management User 를 선택하고 yes 로 응답하면 하나의 AS 프로세스가 다른 프로세스에 연결할 때 새 사용자를 사용할지 묻는 메시지가 표시됩니다. 이렇게 하면 …​/domain/configuration/host-slave.xml 파일을 잘라내어 붙여넣어야 하는 보안이 생성됩니다.

앱 서버 관리자 추가

$ 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
 Password recommendations are listed below. To modify these restrictions edit the add-user.properties configuration file.
  - The password should not be one of the following restricted values {root, admin, administrator}
  - The password should contain at least 8 characters, 1 alphabetic character(s), 1 digit(s), 1 non-alphanumeric symbol(s)
  - The password should be different from the username
 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 '/.../standalone/configuration/mgmt-users.properties'
 Added user 'admin' to file '/.../domain/configuration/mgmt-users.properties'
 Added user 'admin' with groups to file '/.../standalone/configuration/mgmt-groups.properties'
 Added user 'admin' with groups to file '/.../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="bWdtdDEyMyE=" />

참고

add-user.sh는 Red Hat Single Sign-On 서버에 사용자를 추가하지 않고 기본 JBoss Enterprise Application Platform에 사용자를 추가합니다. 위 스크립트에서 사용되고 생성된 인증 정보는 예시용으로만 사용됩니다. 시스템에서 생성된 항목을 사용하십시오.

이제 다음과 같이 보안 값을 잘라내어 …​/domain/configuration/host-slave.xml 파일에 붙여넣습니다.

     <management>
         <security-realms>
             <security-realm name="ManagementRealm">
                 <server-identities>
                     <secret value="bWdtdDEyMyE="/>
                 </server-identities>

3.3.5.2. 부팅 스크립트 실행

하나의 개발 시스템에서 두 노드 클러스터를 시뮬레이션하므로 부팅 스크립트를 두 번 실행합니다.

마스터 부팅

$ domain.sh --host-config=host-master.xml

슬레이브 부팅

$ domain.sh --host-config=host-slave.xml

이를 시도하려면 브라우저를 열고 http://localhost:8080/auth으로 이동합니다.