6.5. HA Singleton 배포

애플리케이션을 Singleton 배포로 배포할 수 있습니다. 클러스터된 서버 그룹에 배포하면 Singleton 배포는 지정된 시간에 단일 노드에만 배포됩니다. 배포가 활성 상태인 노드가 중지되거나 실패하면 다른 노드에서 배포가 자동으로 시작됩니다.

다음과 같은 상황에서 Singleton 배포를 여러 노드에 배포할 수 있습니다.

  • 지정된 노드의 클러스터된 서버 그룹은 구성 문제나 네트워크 문제로 인해 연결을 설정할 수 없습니다.
  • 다음 구성 파일과 같이 HA가 아닌 구성이 사용됩니다.

    • Jakarta EE 8 Web Profile 또는 standalone -full.xml 구성을 지원하는 standalone.xml 구성으로 Jakarta EE 8 Full Platform 프로파일을 지원합니다.
    • domain.xml 구성 - 기본 도메인 프로필 또는 전체 도메인 프로필로 구성됩니다.
중요

비 HA 구성에는 기본적으로 Singleton 하위 시스템이 활성화되어 있지 않습니다. 이 기본 구성을 사용하는 경우 애플리케이션의 성공적인 배포를 촉진하기 위해 Singleton-deployment.xml 파일이 무시됩니다.

그러나 비HA 구성을 사용하면 jboss-all.xml 설명자 파일에 오류가 발생할 수 있습니다. 이러한 오류를 방지하려면 Singleton-deployment.xml 설명자에 단일 배포를 추가합니다. 그런 다음 모든 프로필 유형을 사용하여 애플리케이션을 배포할 수 있습니다.

HA Singleton 동작 제어 정책은 새 Singleton 하위 시스템에서 관리합니다. 배포는 특정 Singleton 정책을 지정하거나 기본 하위 시스템 정책을 사용할 수 있습니다.

배포는 기존 배포에 배포 오버레이로 적용되는 META-INF/singleton-deployment.xml 배포 설명자를 사용하여 Singleton 배포로 식별합니다. 또는 기존의 jboss-all.xml 파일에 필요한 Singleton 구성을 포함할 수 있습니다.

Singleton 배포 정의 또는 선택

배포를 Singleton 배포로 정의하려면 애플리케이션 아카이브에 META-INF/singleton-deployment.xml 설명자를 포함합니다.

Maven WAR 플러그인이 이미 있는 경우 플러그인을 META-INF 디렉토리: **/src/main/webapp/META- INF 로 마이그레이션할 수 있습니다.

절차

  • 애플리케이션이 EAR 파일에 배포된 경우 jboss -all.xml 파일에 있는 singleton-deployment.xml 설명자 또는 singleton- deployment 요소를 META-INF 디렉터리의 최상위 레벨로 이동합니다.

    예제: Singleton 배포 설명자

    <?xml version="1.0" encoding="UTF-8"?>
    <singleton-deployment xmlns="urn:jboss:singleton-deployment:1.0"/>

  • 애플리케이션 배포를 WAR 파일 또는 JAR 파일로 추가하려면 singleton-deployment.xml 설명자를 애플리케이션 아카이브의 /META-INF 디렉터리의 최상위 레벨로 이동합니다.

    예제: 특정 Singleton 정책이 있는 Singleton 배포 설명자

    <?xml version="1.0" encoding="UTF-8"?>
    <singleton-deployment policy="my-new-policy" xmlns="urn:jboss:singleton-deployment:1.0"/>

  • 선택 사항: jboss -all.xml 파일에서 singleton- deployment 을 정의하려면 jboss-all.xml 설명자를 애플리케이션 아카이브의 /META-INF 디렉터리의 최상위 레벨로 이동합니다.

    예제: jboss -all.xml에서 singleton- deployment정의

    <?xml version="1.0" encoding="UTF-8"?>
    <jboss xmlns="urn:jboss:1.0">
        <singleton-deployment xmlns="urn:jboss:singleton-deployment:1.0"/>
    </jboss>

  • 선택 사항: singleton 정책을 사용하여 jboss -all.xml 파일에서 singleton- deployment 을 정의합니다. jboss-all.xml 설명자를 애플리케이션 아카이브의 /META-INF 디렉터리의 최상위 레벨로 이동합니다.

    예제: 특정 Singleton 정책을 사용하여 jboss-all.xml 에 Singleton-deployment 정의

    <?xml version="1.0" encoding="UTF-8"?>
    <jboss xmlns="urn:jboss:1.0">
        <singleton-deployment policy="my-new-policy" xmlns="urn:jboss:singleton-deployment:1.0"/>
    </jboss>

Singleton 배포 생성

JBoss EAP는 다음 두 가지 선택 정책을 제공합니다.

  • 단순 선택 정책

    simple-election-policy 는 지정된 애플리케이션이 배포될 position 특성으로 표시된 특정 멤버를 선택합니다. position 속성은 사용 기간이 내림차순으로 정렬된 후보 목록에서 선택할 노드의 인덱스를 결정합니다. 여기서 0 은 가장 오래된 노드를 나타내고, -1 은 가장 오래된 노드를 나타내고, -2 는 가장 오래된 노드를 나타냅니다. 지정된 위치가 후보 수를 초과하는 경우 모듈러스 작업이 적용됩니다.

    예제: 관리 CLI를 사용하여 간단한election-policy 및 위치가 -1 로 설정된 새 Singleton 정책 생성

    batch
    /subsystem=singleton/singleton-policy=my-new-policy:add(cache-container=server)
    /subsystem=singleton/singleton-policy=my-new-policy/election-
    policy=simple:add(position=-1)
    run-batch

    참고

    새로 생성된 정책 my-new-policy 를 기본값으로 설정하려면 다음 명령을 실행합니다.

    /subsystem=singleton:write-attribute(name=default, value=my-new-policy)

    예제: standalone -ha.xml을 사용하여 위치가 -1 로 설정된 simple-election- policy구성

    <subsystem xmlns="urn:jboss:domain:singleton:1.0">
       <singleton-policies default="my-new-policy">
          <singleton-policy name="my-new-policy" cache-container="server">
             <simple-election-policy position="-1"/>
          </singleton-policy>
       </singleton-policies>
    </subsystem>

  • 임의 선택 정책

    random-election-policy 는 지정된 애플리케이션이 배포될 임의 멤버를 선택합니다.

    예제: random-election-policy 를 사용하여 새 Singleton 정책 생성, 관리 CLI 사용

    batch
    /subsystem=singleton/singleton-policy=my-other-new-policy:add(cache-container=server)
    /subsystem=singleton/singleton-policy=my-other-new-policy/election-policy=random:add()
    run-batch

    예제: standalone -ha.xml을 사용하여 random-election- policy구성

    <subsystem xmlns="urn:jboss:domain:singleton:1.0">
       <singleton-policies default="my-other-new-policy">
          <singleton-policy name="my-other-new-policy" cache-container="server">
             <random-election-policy/>
          </singleton-policy>
       </singleton-policies>
    </subsystem>

    참고

    cache -container의 default- cache 특성은 정책을 추가하기 전에 정의해야 합니다. 이렇게 하지 않으면 사용자 정의 캐시 컨테이너를 사용하는 경우 오류 메시지가 표시될 수 있습니다.

환경 설정

또한 Singleton 선택 정책은 클러스터의 하나 이상의 구성원에 대한 기본 설정을 나타낼 수 있습니다. 기본 설정은 노드 이름을 사용하거나 아웃바운드 소켓 바인딩 이름을 사용하여 정의할 수 있습니다. 노드 기본 설정은 항상 선택 정책 결과에 우선합니다.

예제: 관리 CLI를 사용하여 기존 Singleton 정책의 기본 설정 표시

/subsystem=singleton/singleton-policy=foo/election-policy=simple:list-add(name=name-preferences, value=nodeA)

/subsystem=singleton/singleton-policy=bar/election-policy=random:list-add(name=socket-binding-preferences, value=binding1)

예제: 관리 CLI를 사용하여 단순election-policy 및 name- preferences 를 사용하여 새 Singleton 정책 생성

batch
/subsystem=singleton/singleton-policy=my-new-policy:add(cache-container=server)
/subsystem=singleton/singleton-policy=my-new-policy/election-policy=simple:add(name-preferences=[node1, node2, node3, node4])
run-batch

참고

새로 생성된 정책 my-new-policy 를 기본값으로 설정하려면 다음 명령을 실행합니다.

/subsystem=singleton:write-attribute(name=default, value=my-new-policy)

예제: standalone -ha.xml을 사용하여 socket-binding-preferences 를 사용하여 random- election-policy구성

<subsystem xmlns="urn:jboss:domain:singleton:1.0">
   <singleton-policies default="my-other-new-policy">
      <singleton-policy name="my-other-new-policy" cache-container="server">
         <random-election-policy>
            <socket-binding-preferences>binding1 binding2 binding3 binding4</socket-binding-preferences>
         </random-election-policy>
      </singleton-policy>
   </singleton-policies>
</subsystem>

쿼럼 정의

네트워크 파티션은 동일한 배포에 대해 여러 Singleton 프로바이더를 트리거하여 동시에 실행될 수 있으므로 Singleton 배포에 특히 문제가 있습니다. 이 시나리오에 대해 보호하기 위해 Singleton 정책은 Singleton 공급자 선택을 수행하기 전에 최소 노드 수가 있어야 하는 쿼럼을 정의할 수 있습니다. 일반적인 배포 시나리오에서는 N/2 + 1의 쿼럼을 사용합니다. 여기서 N은 예상되는 클러스터 크기입니다. 이 값은 런타임 시 업데이트할 수 있으며 해당 Singleton 정책을 사용하여 Singleton 배포에 즉시 영향을 미칩니다.

예제: standalone-ha.xml 파일의 쿼럼 선언

<subsystem xmlns="urn:jboss:domain:singleton:1.0">
   <singleton-policies default="default">
      <singleton-policy name="default" cache-container="server" quorum="4">
         <simple-election-policy/>
      </singleton-policy>
   </singleton-policies>
</subsystem>

예제: 관리 CLI를 사용한 쿼럼 선언

/subsystem=singleton/singleton-policy=foo:write-attribute(name=quorum, value=3)

Singleton 배포를 사용하여 애플리케이션에 패키지된 서비스의 전체 작업 예는 JBoss EAP와 함께 제공되는 ha-singleton-deployment 빠른 시작을 참조하십시오.

CLI를 사용하여 기본 Singleton 서비스 공급자 결정

Singleton 하위 시스템은 특정 Singleton 정책에서 생성된 각 Singleton 배포 또는 서비스에 대한 런타임 리소스를 노출합니다. 이렇게 하면 CLI를 사용하여 기본 Singleton 공급자를 확인하는 데 도움이 됩니다.

Singleton 공급자 역할을 하는 클러스터 구성원의 이름을 볼 수 있습니다. 예를 들면 다음과 같습니다.

/subsystem=singleton/singleton-policy=default/deployment=singleton.jar:read-attribute(name=primary-provider)
{
    "outcome" => "success",
    "result" => "node1"
}

Singleton 배포 또는 서비스가 설치된 노드의 이름을 볼 수도 있습니다. 예를 들면 다음과 같습니다.

/subsystem=singleton/singleton-policy=default/deployment=singleton.jar:read-attribute(name=providers)
{
    "outcome" => "success",
    "result" => [
        "node1",
        "node2"
    ]
}