9.4. 고정 세션
일반적인 클러스터 배포는 로드 밸런서(reverse proxy)와 사설 네트워크의 Red Hat Single Sign-On 서버 2개로 구성됩니다. 성능을 위해 로드 밸런서에서 특정 브라우저 세션과 관련된 모든 요청을 동일한 Red Hat Single Sign-On 백엔드 노드로 전달하는 경우 유용할 수 있습니다.
그 이유는 Red Hat Single Sign-On이 현재 인증 세션 및 사용자 세션과 관련된 데이터를 저장하기 위해 적용 대상에서 Infinispan 분산 캐시를 사용하고 있기 때문입니다. Infinispan 분산 캐시는 기본적으로 하나의 소유자로 구성됩니다. 즉, 특정 세션이 하나의 클러스터 노드에만 저장되고 다른 노드는 액세스하려는 경우 원격으로 세션을 조회해야 합니다.
예를 들어 ID 123 이 있는 인증 세션이 node1 의 Infinispan 캐시에 저장된 다음 node2 에서 이 세션을 조회해야 하는 경우 특정 세션 엔터티를 반환하려면 네트워크를 통해 node1 에 요청을 보내야 합니다.
특정 세션 엔터티를 로컬에서 항상 사용할 수 있는 경우 유용합니다. 이 경우 고정 세션의 도움을 받아 수행할 수 있습니다. 공용 프런트 엔드 로드 밸런서가 있는 클러스터 환경의 워크플로우와 Red Hat Single Sign-On 노드 두 개는 다음과 같을 수 있습니다.
- Red Hat Single Sign-On 로그인 화면을 보려면 초기 요청 전송
- 이 요청은 프런트 엔드 로드 밸런서에서 제공하며 일부 임의 노드(예: node1)로 전달합니다. 엄격하게 말하면, 노드는 임의적 일 필요는 없지만 다른 기준 (클라이언트 IP 주소 등)에 따라 선택할 수 있습니다. 모두 기본 로드 밸런서(reverse proxy)의 구현 및 구성에 따라 달라집니다.
- Red Hat Single Sign-On은 임의의 ID(예: 123)를 사용하여 인증 세션을 생성하여 Infinispan 캐시에 저장합니다.
-
Infinispan 분산 캐시는 세션 ID의 해시를 기반으로 세션의 기본 소유자를 할당합니다. 이에 대한 자세한 내용은 Infinispan 문서를 참조하십시오. Infinispan이 이 세션의 소유자가
node2로 할당되었다고 가정하겠습니다. -
Red Hat Single Sign-On은 <
session-id>.<owner-node-id>와 같은 형식으로AUTH_SESSION_ID쿠키를 생성합니다. 이 예에서는123.node2입니다. - 브라우저에서 Red Hat Single Sign-On 로그인 화면과 AUTH_SESSION_ID 쿠키를 사용하여 응답이 사용자에게 반환됩니다.
이 시점에서 로드 밸런서가 ID 123 이 있는 인증 세션의 소유자이므로 모든 다음 요청을 node2 로 전달하는 경우 유용합니다. 따라서 Infinispan은 이 세션을 로컬로 조회할 수 있습니다. 인증이 완료되면 인증 세션이 사용자 세션으로 변환되며 ID 123 이 동일하기 때문에 node2 에도 저장됩니다.
고정 세션은 클러스터 설정에 필수는 아니지만 위에서 언급한 이유로 성능에 적합합니다. AUTH_SESSION_ID 쿠키를 고정하도록 로드 밸런서를 구성해야 합니다. 이 작업은 로드 밸런서에 따라 어떻게 됩니까.
시작 중에 시스템 속성 jboss.node.name 을 경로 이름에 해당하는 값과 함께 사용하려면 Red Hat Single Sign-On 측에서 사용하는 것이 좋습니다. 예를 들어 -Djboss.node.name=node1 은 node1 을 사용하여 경로를 식별합니다. 이 경로는 노드가 특정 키의 소유자인 경우 Infinispan 캐시에서 사용되며 AUTH_SESSION_ID 쿠키 에 연결됩니다. 다음은 이 시스템 속성을 사용하는 시작 명령의 예입니다.
cd $RHSSO_NODE1
./standalone.sh -c standalone-ha.xml -Djboss.socket.binding.port-offset=100 -Djboss.node.name=node1
일반적으로 프로덕션 환경에서 경로 이름은 백엔드 호스트와 동일한 이름을 사용해야 하지만 필수는 아닙니다. 다른 경로 이름을 사용할 수 있습니다. 예를 들어 사설 네트워크 내에서 Red Hat Single Sign-On 서버의 호스트 이름을 숨기려면 다음을 수행합니다.
9.4.1. 경로 추가 비활성화 링크 복사링크가 클립보드에 복사되었습니다!
일부 로드 밸런서는 백엔드 Red Hat Single Sign-On 노드를 사용하는 대신 경로 정보를 직접 추가하도록 구성할 수 있습니다. 그러나 위에서 설명한 대로 Red Hat Single Sign-On에서 경로를 추가하는 것이 좋습니다. 이는 Red Hat Single Sign-On은 특정 세션의 소유자인 엔티티를 인식하고 해당 노드로 라우팅할 수 있기 때문에 성능이 향상됩니다. 이는 반드시 로컬 노드가 아닙니다.
Red Hat Single Sign-On의 AUTH_SESSION_ID 쿠키의 경로 정보를 원하는 경우 Red Hat Single Sign-On의 RHSSO_HOME/standalone/configuration/standalone-ha.xml 파일에 추가하여 다음을 비활성화할 수 있습니다.
<subsystem xmlns="urn:jboss:domain:keycloak-server:1.1">
...
<spi name="stickySessionEncoder">
<provider name="infinispan" enabled="true">
<properties>
<property name="shouldAttachRoute" value="false"/>
</properties>
</provider>
</spi>
</subsystem>