3.3. 도메인 클러스터 모드 사용
도메인 모드는 서버의 구성을 중앙에서 관리하고 게시하는 방법입니다.
표준 모드에서 클러스터를 실행하면 클러스터 크기가 증가함에 따라 빠르게 증가할 수 있습니다. 구성을 변경해야 할 때마다 클러스터의 각 노드에서 수행합니다. 도메인 모드는 구성을 저장하고 게시할 중앙 위치를 제공하여 이 문제를 해결합니다. 설정하는 것은 매우 어려울 수 있지만 결국 가치가 있습니다. 이 기능은 Red Hat Single Sign-On이 파생한 JBoss EAP Application Server에 내장되어 있습니다.
이 가이드에서는 도메인 모드의 기본 사항을 설명합니다. 클러스터에서 도메인 모드를 설정하는 방법에 대한 자세한 단계는 JBoss EAP 구성 가이드를 통해 가져와야 합니다.
다음은 도메인 모드에서 실행하는 몇 가지 기본 개념입니다.
- 도메인 컨트롤러
- 도메인 컨트롤러는 클러스터의 각 노드에 대한 일반 구성을 저장, 관리 및 게시하는 프로세스입니다. 이 프로세스는 클러스터의 노드를 구성하는 중심 지점입니다.
- 호스트 컨트롤러
- 호스트 컨트롤러는 특정 시스템에서 서버 인스턴스를 관리합니다. 하나 이상의 서버 인스턴스를 실행하도록 구성합니다. 도메인 컨트롤러는 각 시스템의 호스트 컨트롤러와 상호 작용하여 클러스터를 관리할 수도 있습니다. 실행 중인 프로세스 수를 줄이기 위해 도메인 컨트롤러는 실행되는 시스템에서 호스트 컨트롤러 역할을 합니다.
- 도메인 프로필
- 도메인 프로필은 서버가 부팅하기 위해 사용할 수 있는 이름 지정된 구성 집합입니다. 도메인 컨트롤러는 다른 서버에서 사용하는 여러 도메인 프로필을 정의할 수 있습니다.
- 서버 그룹
- 서버 그룹은 서버의 컬렉션입니다. 관리되고 하나로 구성됩니다. 서버 그룹과 해당 그룹의 모든 서비스에 도메인 프로필을 해당 구성으로 할당할 수 있습니다.
도메인 모드에서 도메인 컨트롤러가 마스터 노드에서 시작됩니다. 클러스터의 구성은 도메인 컨트롤러에 있습니다. 다음으로 호스트 컨트롤러가 클러스터의 각 시스템에서 시작됩니다. 각 호스트 컨트롤러 배포 구성은 해당 시스템에서 시작되는 Red Hat Single Sign-On 서버 인스턴스 수를 지정합니다. 호스트 컨트롤러가 부팅되면 구성된 만큼의 Red Hat Single Sign-On 서버 인스턴스가 시작됩니다. 이러한 서버 인스턴스는 도메인 컨트롤러에서 구성을 가져옵니다.
Microsoft Azure와 같은 일부 환경에서는 도메인 모드를 적용할 수 없습니다. JBoss EAP 설명서를 참조하십시오.
3.3.1. 도메인 구성
이 가이드의 다른 여러 장에서는 데이터베이스, HTTP 네트워크 연결, 캐시 및 기타 인프라와 관련된 다양한 측면을 구성하는 방법을 안내합니다. 독립 실행형 모드는 standalone.xml 파일을 사용하여 이러한 항목을 구성하지만 도메인 모드는 …/domain/configuration/domain.xml 구성 파일을 사용합니다. 여기에서 Red Hat Single Sign-On 서버의 도메인 프로필 및 서버 그룹이 정의됩니다.
domain.xml
도메인 컨트롤러가 실행 중인 동안 이 파일을 변경한 경우 적용되지 않으며 서버에서 덮어쓸 수도 있습니다. 대신 명령줄 스크립팅 또는 JBoss EAP의 웹 콘솔을 사용합니다. 자세한 내용은 JBoss EAP 구성 가이드를 참조하십시오.
이 domain.xml 파일의 일부 측면을 살펴보겠습니다. auth-server-standalone
및 auth-server-clustered
프로필
XML 블록은 많은 구성 결정을 내립니다. 여기서는 네트워크 연결, 캐시 및 데이터베이스 연결과 같은 항목을 구성할 수 있습니다.
auth-server 프로필
<profiles> <profile name="auth-server-standalone"> ... </profile> <profile name="auth-server-clustered"> ... </profile>
<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 software or hardware based one --> <socket-binding-group name="load-balancer-sockets" default-interface="public"> ... </socket-binding-group> </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 software or hardware 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
$ domain.sh -Djboss.http.port=80
Red Hat Single Sign-On의 서버 그룹 정의는 서버 그룹
XML 블록에 있습니다. 호스트 컨트롤러가 인스턴스를 부팅할 때 사용되는 도메인 프로필(기본값
)과 Java VM의 기본 부팅 인수를 지정합니다. 또한 socket-binding-group
을 서버 그룹에 바인딩합니다.
서버 그룹
<server-groups> <!-- load-balancer-group should be removed in production systems and replaced with a better software or hardware 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>
<server-groups>
<!-- load-balancer-group should be removed in production systems and replaced with a better software or hardware 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.xml 및 host-slave.xml 이 함께 제공됩니다. host-master.xml 은 도메인 컨트롤러, 로드 밸런서 및 하나의 Red Hat Single Sign-On 서버 인스턴스를 부팅하도록 구성됩니다. host-slave.xml 은 도메인 컨트롤러와 통신하고 하나의 Red Hat Single Sign-On 서버 인스턴스를 부팅하도록 구성됩니다.
로드 밸런서는 필수 서비스가 아닙니다. 개발 시스템에서 드라이브 클러스터링을 쉽게 테스트할 수 있도록 합니다. 프로덕션에서 사용할 수 있는 동안 사용하려는 다른 하드웨어 또는 소프트웨어 기반 로드 밸런서가 있는 경우 프로덕션에서 사용할 수 있는 옵션이 있습니다.
호스트 컨트롤러 구성
로드 밸런서 서버 인스턴스를 비활성화하려면 host-master.xml 을 편집하고 "load-balancer"
항목을 주석 처리하거나 제거합니다.
<servers> <!-- remove or comment out next line --> <server name="load-balancer" group="loadbalancer-group"/> ... </servers>
<servers>
<!-- remove or comment out next line -->
<server name="load-balancer" group="loadbalancer-group"/>
...
</servers>
이 파일에 대해 고려해야 할 또 다른 흥미로운 사항은 인증 서버 인스턴스 선언입니다. port-offset
설정이 있습니다. domain.xml socket-binding-group
또는 서버 그룹에 정의된 모든 네트워크 포트에는 port-offset
값이 추가됩니다. 이 샘플 도메인 설정의 경우 로드 밸런서 서버에서 여는 포트가 시작된 인증 서버 인스턴스와 충돌하지 않도록 이 작업을 수행합니다.
<servers> ... <server name="server-one" group="auth-server-group" auto-start="true"> <socket-bindings port-offset="150"/> </server> </servers>
<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 부팅 서버와 유사합니다.
작업 디렉터리
3.3.4. 도메인 클러스터 모드로 부팅
도메인 모드에서 서버를 실행하는 경우 운영 체제에 따라 서버를 부팅하기 위해 를 실행해야 하는 특정 스크립트가 있습니다. 이 스크립트는 서버 배포의 bin/ 디렉터리에 있습니다.
도메인 부팅 스크립트
서버를 부팅하려면 다음을 수행합니다.
Linux/Unix
.../bin/domain.sh --host-config=host-master.xml
$ .../bin/domain.sh --host-config=host-master.xml
Windows
> ...\bin\domain.bat --host-config=host-master.xml
> ...\bin\domain.bat --host-config=host-master.xml
부팅 스크립트를 실행할 때 --host-config
스위치를 통해 사용할 호스트 제어 구성 파일을 전달해야 합니다.
Java SE 17을 사용하여 도메인 모드에서 Red Hat Single Sign-On을 실행하려면 번들 스크립트 enable-keycloak-se17-domain.cli
를 실행하여 설정을 수정해야 합니다.
Linux/Unix
./bin/jboss-cli.sh --file=docs/examples/enable-keycloak-se17-domain.cli
$ ./bin/jboss-cli.sh --file=docs/examples/enable-keycloak-se17-domain.cli
Windows
> .\bin\jboss-cli.bat --file=docs\examples\enable-keycloak-se17-domain.cli
> .\bin\jboss-cli.bat --file=docs\examples\enable-keycloak-se17-domain.cli
3.3.5. 샘플 클러스터 도메인 테스트
샘플 domain.xml 구성을 사용하여 드라이브 클러스터링을 테스트할 수 있습니다. 이 샘플 도메인은 하나의 머신에서 실행되고 부팅하기 위한 것입니다.
- 도메인 컨트롤러
- HTTP 로드 밸런서
- Red Hat Single Sign-On 서버 인스턴스 2개
절차
domain.sh
스크립트를 두 번 실행하여 별도의 호스트 컨트롤러를 두 번 시작합니다.첫 번째는 도메인 컨트롤러, HTTP 로드 밸런서 및 하나의 Red Hat Single Sign-On 인증 서버 인스턴스를 시작하는 마스터 호스트 컨트롤러입니다. 두 번째는 인증 서버 인스턴스만 시작하는 슬레이브 호스트 컨트롤러입니다.
도메인 컨트롤러와 안전하게 통신할 수 있도록 슬레이브 호스트 컨트롤러를 구성합니다. 다음 단계를 수행합니다.
이러한 단계를 생략하면 슬레이브 호스트는 도메인 컨트롤러에서 중앙 집중식 구성을 가져올 수 없습니다.
서버 admin 사용자와 마스터와 슬레이브 간에 공유되는 시크릿을 만들어 보안 연결을 설정합니다.
…/bin/add-user.sh
스크립트를 실행합니다.스크립트에서 추가할 사용자 유형에 대해 묻는 경우
Management User
를 선택합니다.이 옵션을 사용하면 …/domain/configuration/host-slave.xml 파일에 잘라내어 붙여넣는 시크릿이 생성됩니다.
앱 서버 관리자 추가
add-user.sh
$ 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=" />
Copy to Clipboard Copied! 참고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>
<management> <security-realms> <security-realm name="ManagementRealm"> <server-identities> <secret value="bWdtdDEyMyE="/> </server-identities>
Copy to Clipboard Copied! 생성된 사용자의 사용자 이름을 …/domain/configuration/host-slave.xml 파일에 추가합니다.
<remote security-realm="ManagementRealm" username="admin">
<remote security-realm="ManagementRealm" username="admin">
Copy to Clipboard Copied! 부팅 스크립트를 두 번 실행하여 한 개발 시스템에서 두 개의 노드 클러스터를 시뮬레이션합니다.
마스터 부팅
domain.sh --host-config=host-master.xml
$ domain.sh --host-config=host-master.xml
Copy to Clipboard Copied! 부팅 슬레이브
domain.sh --host-config=host-slave.xml
$ domain.sh --host-config=host-slave.xml
Copy to Clipboard Copied! - 브라우저를 열고 http://localhost:8080/auth 로 이동하여 사용해 보십시오.