검색

14.7. 클라이언트 연결 파티셔닝

download PDF

클라이언트 연결을 분할하려면 클라이언트가 연결을 시작할 때마다 개별 클라이언트의 라우팅 연결이 동일한 브로커로 연결됩니다.

클라이언트 연결을 분할하는 두 가지 사용 사례는 다음과 같습니다.

  • subscriber가 항상 도달할 수 있는 구독자 큐가 있는 브로커에 연결할 수 있도록 서브스크립션의 클라이언트를 분할합니다.
  • 클라이언트를 데이터 전송이라고도 하는 위치로 끌어들이는 방식으로 데이터를 이동할 필요성을 최소화합니다.

Cryostat 서브스크립션

Cryostat 서브스크립션은 브로커의 큐로 표시되며, 지속성 구독자가 브로커에 처음 연결할 때 생성됩니다. 이 대기열은 브로커에 남아 있으며 클라이언트가 구독을 취소할 때까지 메시지를 수신합니다. 따라서 클라이언트가 구독자 큐에 있는 메시지를 사용하기 위해 동일한 브로커에 반복적으로 연결하려고 합니다.

ScanSetting 서브스크립션 큐를 위해 클라이언트를 파티셔닝하려면 클라이언트 연결에서 클라이언트 ID를 필터링할 수 있습니다.

데이터 가시성

데이터 심각도를 고려하지 않고 사용자 환경의 브로커 수를 확장하면 브로커 간에 메시지를 이동해야 하므로 성능상의 이점이 손실됩니다. 날짜 분대성을 지원하려면 클라이언트 소비자가 소비해야 하는 메시지가 생성되는 브로커에 연결되도록 클라이언트 연결을 분할해야 합니다.

클라이언트 연결을 파티셔닝하여 데이터 저하를 지원하려면 클라이언트 연결의 다음 특성을 필터링할 수 있습니다.

  • 연결 사용자에게 할당된 역할(ROLE_NAME)
  • 사용자 사용자 이름(USER_NAME)
  • 클라이언트의 호스트 이름(SNI_HOST)
  • 클라이언트의 IP 주소(SOURCE_IP)

14.7.1. ScanSetting 서브스크립션을 지원하기 위해 클라이언트 연결 파티셔닝

ScanSetting 서브스크립션을 위해 클라이언트를 파티셔닝하려면 일관된 해시 알고리즘 또는 정규식을 사용하여 들어오는 연결에서 클라이언트 ID를 필터링할 수 있습니다.

사전 요구 사항

클라이언트는 예를 들어 로드 밸런서를 사용하거나 연결 URL에 모든 브로커 인스턴스를 구성하여 클러스터의 모든 브로커에 연결할 수 있도록 구성됩니다. 클라이언트 세부 정보가 해당 브로커의 파티션 구성과 일치하지 않기 때문에 브로커가 연결을 거부하는 경우 클라이언트는 클러스터의 다른 브로커에 연결하여 연결을 수락하는 브로커를 찾을 수 있어야합니다.

14.7.1.1. 일관된 해시 알고리즘을 사용하여 클라이언트 ID 필터링

일관된 해시 알고리즘을 사용하여 각 클라이언트 연결에서 클라이언트 ID를 해시하도록 클러스터의 각 브로커를 구성할 수 있습니다. 브로커가 클라이언트 ID를 해시한 후 해시된 값에 대한 modulo 작업을 수행하여 클라이언트 연결에 대한 대상 브로커를 식별하는 정수 값을 반환합니다. 브로커는 반환 된 정수 값을 브로커에 구성된 고유 값과 비교합니다. 일치하는 항목이 있는 경우 브로커는 연결을 수락합니다. 값이 일치하지 않으면 브로커가 연결을 거부합니다. 이 프로세스는 일치 항목이 발견되고 브로커가 연결을 수락할 때까지 클러스터의 각 브로커에서 반복됩니다.

프로세스

  1. 첫 번째 브로커의 <broker_instance_dir> /etc/broker.xml 구성 파일을 엽니다.
  2. connection-routers 요소를 만들고 일관된 해시 알고리즘을 사용하여 클라이언트 ID를 필터링하는 connection-route 를 생성합니다. 예를 들면 다음과 같습니다.

    <configuration>
       <core>
          ...
          <connection-routers>
             <connection-route name=”consistent-hash-routing”>
                <key>CLIENT_ID</target-key>
                <local-target-filter>NULL|0</local-target-filter>
                <policy name="CONSISTENT_HASH_MODULO">
                   <property key="modulo" value="<number_of_brokers_in_cluster>">
                   </property>
                </policy>
             </connection-route>
          </connection-routers>
          ...
       </core>
    </configuration>
    connection-route
    connection-route 이름 의 경우 이 연결 라우팅 구성에 대해 식별 문자열을 지정합니다. 일관된 해시 필터를 적용하려면 이 이름을 각 브로커 수락자에 추가해야 합니다.
    key
    필터를 적용할 키 유형입니다. 클라이언트 ID를 필터링하려면 필드에 CLIENT_ID 를 지정합니다.
    local-target-filter
    브로커가 modulo 작업에서 반환된 정수 값과 비교하여 일치하는 항목이 있는지 확인하고 브로커가 연결을 수락할 수 있는지 확인합니다. 예제의 NULL|0 값은 클라이언트 ID(NULL)가 없는 연결에 대해 일치하고 modulo 작업에서 반환된 숫자가 0 인 연결을 제공합니다.
    policy

    해시된 클라이언트 ID에서 modulo 작업을 수행하여 대상 브로커를 식별하는 modulo 속성 키를 허용합니다. modulo 속성 키의 값은 클러스터의 브로커 수와 같아야 합니다.

    중요

    정책 이름은 CONSISTENT_HASH_MODULO 여야 합니다.

  3. 두 번째 브로커의 <broker_instance_dir> /etc/broker.xml 구성 파일을 엽니다.
  4. connection-routers 요소를 만들고 일관된 해시 알고리즘을 사용하여 클라이언트 ID를 필터링하는 연결 경로를 만듭니다.

    다음 예에서 NULL|1local-target-filter 값은 NULL(클라이언트 ID)이 없는 연결과 modulo 작업에서 반환된 값이 1 인 연결에 대해 일치를 제공합니다.

    <configuration>
       <core>
          ...
          <connection-routers>
             <connection-route name=”consistent-hash-routing”>
                <key>CLIENT_ID</target-key>
                <local-target-filter>NULL|1</local-target-filter>
                <policy name="CONSISTENT_HASH_MODULO">
                   <property key="modulo" value="<number_of_brokers_in_cluster>">
                   </property>
                </policy>
             </connection-route>
          </connection-routers>
          ...
       </core>
    </configuration>
  5. 클러스터의 각 추가 브로커에 대해 일관된 해시 필터를 생성하려면 이 절차를 반복합니다.

14.7.1.2. 정규식을 사용하여 클라이언트 ID 필터링

클라이언트 연결에서 클라이언트 ID 부분에 정규식 필터를 적용하도록 브로커를 구성하여 클라이언트 연결을 분할할 수 있습니다. 브로커는 정규식 필터의 결과가 브로커에 대해 구성된 로컬 대상 필터와 일치하는 경우에만 연결을 허용합니다. 일치 항목이 없으면 브로커가 연결을 거부합니다. 이 프로세스는 일치 항목이 발견되고 브로커가 연결을 수락할 때까지 클러스터의 각 브로커에서 반복됩니다.

사전 요구 사항

  • 정규식으로 필터링할 수 있는 각 클라이언트 ID의 일반 문자열입니다.

프로세스

  1. 첫 번째 브로커의 <broker_instance_dir> /etc/broker.xml 구성 파일을 엽니다.
  2. connection-routers 요소를 생성하고 클라이언트 ID의 일부를 필터링하는 connection-route 를 생성합니다. 예를 들면 다음과 같습니다.

    <configuration>
        <core>
            ...
            <connection-routers>
                <connection-route name=”regex-routing”>
                    <key>CLIENT_ID</target-key>
                    <key-filter>^.{3}</key-filter>
                    <local-target-filter>NULL|CL1</local-target-filter>
                </connection-route>
        </connection-routers>
            ...
        </core>
    </configuration>
    connection-route
    connection-route 이름 의 경우 이 라우팅 구성에 대한 식별 문자열을 지정합니다. 정규식 필터를 적용하려면 이 이름을 각 브로커 수락자에 추가해야 합니다.
    key
    필터를 적용할 키입니다. 클라이언트 ID를 필터링하려면 필드에 CLIENT_ID 를 지정합니다.
    key-filter

    키 값을 추출하기 위해 정규식이 적용되는 클라이언트 ID 문자열의 일부입니다. 위의 첫 번째 브로커의 예에서 브로커는 클라이언트 ID의 처음 3자인 키 값을 추출합니다. 예를 들어 클라이언트 ID 문자열이 CL100.consumer 인 경우 브로커는 CL1 키 값을 추출합니다. 브로커가 키 값을 추출한 후 local-target-filter 의 값과 비교합니다.

    들어오는 연결에 클라이언트 ID가 없거나 브로커가 키 필터링 에 지정된 정규식을 사용하여 키 값을 추출할 수 없는 경우 키 값이 NULL로 설정됩니다.

    local-target-filter
    브로커가 키 값과 비교하여 일치하는 항목이 있는지 확인하고 브로커가 해당 연결을 수락할 수 있는지 확인합니다. 위의 첫 번째 브로커에 대한 예에 표시된 것처럼 NULL|CL1 값은 클라이언트 ID(NULL)가 없거나 클라이언트 ID에 CL1 의 3자 접두사를 갖는 연결과 일치합니다.
  3. 두 번째 브로커의 <broker_instance_dir> /etc/broker.xml 구성 파일을 엽니다.
  4. connection-routers 요소를 만들고 클라이언트 ID의 일부를 기반으로 연결을 필터링하는 연결 경로를 만듭니다.

    다음 필터 예에서 브로커는 정규식을 사용하여 클라이언트 ID의 처음 3자인 키 값을 추출합니다. 브로커는 NULLCL2 의 값을 키 값과 비교하여 일치하는 항목이 있는지 확인하고 브로커가 연결을 수락할 수 있는지 확인합니다.

    <configuration>
        <core>
            ...
            <connection-routers>
                <connection-route name=”regex-routing”>
                    <key>CLIENT_ID</target-key>
                    <key-filter>^.{3}</key-filter>
                    <local-target-filter>NULL|CL2</local-target-filter>
                </connection-route>
            </connection-routers>
            ...
        </core>
    </configuration>
  5. 이 절차를 반복하고 클러스터의 추가 브로커마다 적절한 연결 라우팅 필터를 생성합니다.

14.7.2. 데이터 가시성을 지원하기 위해 클라이언트 연결 파티셔닝

클라이언트 소비자가 소비해야 하는 메시지가 생성되는 브로커에 연결되도록 클라이언트 연결을 분할할 수 있습니다. 예를 들어 생산자 및 소비자 애플리케이션에서 사용하는 주소 세트가 있는 경우 특정 브로커에서 주소를 구성할 수 있습니다. 그런 다음 해당 주소를 사용하는 생산자와 소비자 모두에 대한 클라이언트 연결을 분할하여 해당 브로커에만 연결할 수 있습니다.

연결된 사용자에게 할당된 역할, 사용자의 사용자 이름 또는 클라이언트의 호스트 이름 또는 IP 주소와 같은 특성을 기반으로 클라이언트 연결을 분할할 수 있습니다. 이 섹션에서는 클라이언트 사용자에게 할당된 사용자 역할을 필터링하여 클라이언트 연결을 분할하는 방법의 예를 보여줍니다. 클라이언트가 브로커에 연결하기 위해 인증해야 하는 경우 역할 기준과 일치하는 사용자만 브로커에 연결할 수 있도록 클라이언트 사용자에게 역할을 할당하고 연결을 필터링할 수 있습니다.

사전 요구 사항

  • 클라이언트는 예를 들어 로드 밸런서를 사용하거나 연결 URL에 모든 브로커 인스턴스를 구성하여 클러스터의 모든 브로커에 연결할 수 있도록 구성됩니다. 클라이언트가 해당 브로커에 대해 구성된 파티션 필터 기준과 일치하지 않기 때문에 연결을 거부하는 경우 클라이언트는 클러스터의 다른 브로커에 연결하여 연결을 수락하는 브로커를 찾을 수 있어야합니다.

프로세스

  1. 첫 번째 브로커의 <broker_instance_dir> /etc/artemis-roles.properties 파일을 엽니다. broker1users 역할을 추가하고 사용자를 역할에 추가합니다.
  2. 첫 번째 브로커의 <broker_instance_dir> /etc/broker.xml 구성 파일을 엽니다.
  3. connection-routers 요소를 생성하고 사용자에게 할당된 역할에 따라 연결을 필터링하는 connection-route 를 생성합니다. 예를 들면 다음과 같습니다.

    <configuration>
        <core>
            ...
            <connection-routers>
                <connection-route name=”role-based-routing”>
                    <key>ROLE_NAME</target-key>
                    <key-filter>broker1users</key-filter>
                    <local-target-filter>broker1users</local-target-filter>
                </connection-route>
            </connection-routers>
            ...
        </core>
    </configuration>
    connection-route
    connection-route 이름 의 경우 이 라우팅 구성에 대한 식별 문자열을 지정합니다. 역할 필터를 적용하려면 이 이름을 각 브로커 수락자에 추가해야 합니다.
    key
    필터를 적용할 키입니다. 역할 기반 필터링을 구성하려면 필드에 ROLE_NAME 을 지정합니다.
    key-filter
    브로커가 사용자 역할을 필터링하고 키 값을 추출하는 데 사용하는 문자열 또는 정규식입니다. 브로커가 일치하는 역할을 발견하면 키 값을 해당 역할로 설정합니다. 일치하는 역할을 찾지 못하면 브로커는 키 값을 NULL로 설정합니다. 위의 예에서 브로커는 broker1users 필터를 클라이언트 사용자의 역할에 적용합니다. 브로커가 키 값을 추출한 후 local-target-filter 의 값과 비교합니다.
    local-target-filter
    브로커가 키 값과 비교하여 일치하는 항목이 있는지 확인하고 브로커가 해당 연결을 수락할 수 있는지 확인합니다. 이 예에서 브로커는 broker1users 값을 키 값과 비교합니다. 일치하는 항목이 있습니다. 즉, 사용자에게 broker1users 역할이 있고 브로커가 연결을 수락합니다.
  4. 이 절차를 반복하고 필터에서 적절한 역할을 지정하여 클러스터의 다른 브로커의 클라이언트를 분할합니다.

14.7.3. 어셉터에 연결 경로 추가

브로커에 연결 경로를 구성한 후 클라이언트 연결을 파티셔닝하기 위해 브로커의 승인자 중 하나에 경로를 추가해야 합니다. 수락자에 연결 경로를 추가한 후 브로커는 연결 경로에 구성된 필터를 수락자가 수신한 연결에 적용합니다.

프로세스

  1. 첫 번째 브로커의 <broker_instance_dir> /etc/broker.xml 구성 파일을 엽니다.
  2. 파티셔닝을 활성화할 각 수락자에 대해 라우터 키를 추가하고 connection-route 이름을 지정합니다. 다음 예에서 consistent-hash -routing 의 연결 경로 이름이 Artemis acceptor에 추가됩니다.

    <configuration>
        <core>
            ...
            <acceptors>
            ...
            <!-- Acceptor for every supported protocol -->
            <acceptor name="artemis">tcp://0.0.0.0:61616?tcpSendBufferSize=1048576;tcpReceiveBufferSize=1048576;protocols=CORE,AMQP,STOMP,HORNETQ,MQTT,OPENWIRE;useEpoll=true;amqpCredits=1000;amqpLowCredits=300;router="consistent-hash-routing" </acceptor>
          </acceptors>
            ...
        </core>
    </configuration>
  3. 이 절차를 반복하여 클러스터의 각 브로커에 적절한 연결 경로 필터를 지정합니다.
Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.