다음을 통해 공유


MQTT broker 지속성 구성

데이터 지속성 기능은 복제 시스템에 대한 보완 메커니즘으로 설계되었습니다. broker는 여러 노드에서 데이터를 복제하지만 클러스터 전체 종료로 인해 여전히 데이터가 손실될 수 있습니다.

이러한 위험을 완화하기 위해 MQTT broker는 영구 스토리지를 지원하므로 중요한 데이터를 디스크에 쓰고 다시 시작할 때 유지됩니다. 이 데이터 지속성 기능은 디스크를 메모리 확장으로 사용하지만 임시이며 내구성을 보장하지 않는 디스크 지원 메시지 버퍼와 다릅니다.

디스크에 데이터를 저장하면 성능 비용이 발생합니다. 영향은 기본 스토리지 매체의 유형과 속도에 따라 달라집니다.

Azure Portal 또는 Azure CLI를 사용하여 초기 배포 중에 데이터 지속성을 구성할 수 있습니다. 배포 후 몇 가지 지속성 옵션을 변경할 수도 있습니다.

구성 방법

다음 방법 중 하나를 사용하여 MQTT broker에 대한 데이터 지속성을 구성합니다.

  • Azure Portal: IoT Operations를 배포하는 동안 그래픽 사용자 인터페이스를 통해 지속성 설정을 구성합니다.
  • Azure CLI: 명령을 사용하여 IoT 작업을 배포할 때 플래그와 함께 --broker-config-file JSON 구성 파일을 사용합니다 az iot ops create .

사용 가능한 설정의 전체 목록은 Azure IoT Operations API 설명서를 참조하세요.

배포 시간 구성 옵션

배포하는 동안 이러한 옵션을 설정해야 하며 나중에 변경할 수 없습니다.

중요합니다

배포 중에 지속성을 설정하고 나중에 해제할 수 없습니다. 배포 후 몇 가지 지속성 관련 옵션을 변경할 수 있습니다.

볼륨 및 볼륨 크기

MQTT 브로커는 PV(영구 볼륨)를 사용하여 디스크에 데이터를 저장합니다. 두 설정은 이 볼륨을 프로비전하는 방법을 제어합니다.

  • maxSize (필수): broker 데이터를 저장하기 위한 영구 볼륨의 최대 크기를 설정합니다. 사용자 지정 볼륨 클레임을 제공하는 경우에도 이 필드는 항상 필요합니다. 값은 100MB보다 커야 합니다.

    예제10GiB:

  • persistentVolumeClaimSpec (선택 사항): 영구 볼륨 프로비전 방법을 제어하는 사용자 지정 PVC(PersistentVolumeClaim) 템플릿을 정의할 수 있습니다. 이 옵션을 설정하지 않으면 broker는 지정된 maxSize 스토리지 클래스와 기본 스토리지 클래스를 사용하여 기본 PVC를 만듭니다. 이 경우 기본 클래스가 로컬 경로 프로비저닝기에서 지원되지 않는 경우 최적이 아닌 성능이 발생할 수 있습니다.

중요합니다

지정 persistentVolumeClaimSpec하면 액세스 모드를 .로 ReadWriteOncePod설정해야 합니다.

Azure Portal에서 볼륨 설정을 구성하려면 다음을 수행합니다.

  1. IoT 작업 배포 중에 MQTT Broker 구성 섹션으로 이동합니다.

  2. 데이터 지속성 설정에서:

    • 영구 볼륨의 최대 크기 (필수)를 설정합니다.
    • 필요에 따라 사용자 지정 스토리지 클래스 요구 사항에 대한 영구 볼륨 클레임 사양 설정을 구성합니다.

    [Azure Portal에서 배포하는 동안 데이터 지속성 옵션을 보여 주는 스크린샷]

암호화

MQTT broker는 데이터를 보호하기 위해 기본적으로 강력한 AES-256-GCM 암호화를 사용하여 디스크의 모든 지속성 데이터를 암호화합니다. 이렇게 하면 공격자가 기본 볼륨에 액세스할 수 있더라도 중요한 브로커 상태 또는 세션 데이터가 보호됩니다.

암호화는 선택 사항이며 기본적으로 설정됩니다. 필요한 경우 암호화를 해제할 수 있습니다. 암호화는 미사용 데이터만 보호합니다. 메모리의 데이터는 암호화되지 않습니다. 암호화를 사용하면 성능 비용이 최소화되지만 키 회전은 아직 지원되지 않습니다.

암호화는 Azure Portal을 사용하여 배포할 때 기본적으로 사용하도록 설정됩니다. Azure CLI를 사용하여 배포하는 경우 broker 구성 파일에서 암호화를 사용하지 않도록 설정할 수 있습니다.

런타임 구성 옵션

이러한 옵션은 Azure IoT Operations MQTT Broker를 배포한 후에 업데이트할 수 있습니다.

유지된 메시지 지속성

보존된 메시지는 브로커가 토픽에 연결할 때 새 구독자에게 저장하고 전달하는 MQTT 메시지입니다. 이러한 메시지는 구독자가 메시지가 처음 게시되었을 때 연결되지 않은 경우에도 최신 데이터를 수신하도록 하는 데 도움이 됩니다. 이는 새 구독자가 연결 시 즉시 필요한 상태 업데이트, 구성 데이터 또는 마지막으로 알려진 값에 특히 유용합니다.

유지된 메시지를 디스크에 유지하면 이러한 중요한 메시지가 broker 다시 시작에서 유지되고 유지 관리 또는 예기치 않은 종료 중에 손실되지 않습니다. 지속성이 없으면 유지된 메시지는 메모리에만 존재하며 broker가 다시 시작될 때 손실됩니다. 이렇게 하면 중요한 초기 데이터가 없는 새 구독자가 남을 수 있습니다.

이 설정은 유지된 메시지가 디스크에 유지되는 것을 제어합니다.

  • mode (설정된 경우 retain 필수): 옵션은 None, All또는 Custom.

    • None: 보존된 메시지는 유지되지 않습니다.
    • All: 보존된 모든 메시지가 유지됩니다.
    • Custom: 나열된 retainSettings.topics 항목만 유지됩니다.
  • 다음을 선택하는 Custom경우:

    • retainSettings.topics (선택 사항): 유지할 토픽 패턴 목록입니다. 와일드카드 #+가 지원됩니다.

    • retainSettings.dynamic.mode (선택 사항, 기본값: Enabled): MQTT 클라이언트가 MQTT v5 사용자 속성을 사용하여 보존된 메시지에 대한 디스크 지속성을 요청할 수 있습니다.

Azure Portal에서 보존된 메시지 지속성을 구성하려면 다음을 수행합니다.

  1. IoT Operations 인스턴스로 이동합니다.

  2. MQTT Broker>데이터 지속성으로 이동합니다.

  3. 보존된 메시지 섹션에서 다음을 수행합니다.

    • 모드: 없음, 모두 또는 사용자 지정을 선택합니다.
    • 사용자 지정을 선택한 경우 토픽 패턴 및 동적 모드 설정을 지정합니다.

    [Azure Portal에서 데이터 지속성 유지 메시지 옵션을 변경하는 스크린샷]

구독자 큐 지속성

구독자 큐에는 QoS(서비스 품질) 1 구독이 있는 MQTT 클라이언트에 배달되기를 기다리는 메시지가 저장됩니다. 클라이언트가 QoS 1을 구독하면 브로커는 클라이언트가 수신을 승인할 때까지 메시지를 큐에 대기시켜 메시지 배달을 보장합니다. 이러한 큐는 일시적으로 연결이 끊어지거나 메시지를 느리게 처리할 수 있는 클라이언트에 특히 중요합니다.

구독자 큐를 디스크에 유지하면 브로커를 다시 시작하는 동안 배달 대기 중인 메시지가 손실되지 않습니다. 이 기능은 디바이스가 브로커를 다시 시작할 때 메시지 배달 보장을 유지해야 하는 일시적인 연결, 느린 처리 또는 영구 세션을 가질 수 있는 IoT 시나리오에 매우 중요합니다. 지속성이 없으면 큐에 대기 중인 메시지가 손실되어 중요한 디바이스 통신에 대한 데이터 손실이 발생할 수 있습니다.

구독자 큐 및 메시지 배달에 대한 자세한 내용은 broker MQTT 클라이언트 옵션 구성을 참조하세요.

이 설정은 디스크에 유지되는 구독자 메시지 큐를 제어합니다. 세션 상태 메타데이터는 이러한 설정에 관계없이 항상 유지됩니다.

  • mode (설정된 경우 subscriberQueue 필수): 옵션은 None, All또는 Custom.

  • 다음을 선택하는 Custom경우:

    • subscriberQueueSettings.subscriberClientIds (선택 사항): 유지할 구독자 클라이언트 ID 목록입니다. 와일드카드가 * 지원됩니다.

    • subscriberQueueSettings.dynamic.mode (선택 사항, 기본값: Enabled): MQTT 클라이언트가 지속성을 동적으로 요청할 수 있습니다.

Azure Portal에서 구독자 큐 지속성을 구성하려면 다음을 수행합니다.

  1. IoT Operations 인스턴스로 이동합니다.

  2. MQTT Broker>데이터 지속성으로 이동합니다.

  3. 구독자 큐 섹션에서 다음을 수행합니다.

    • 모드: 없음, 모두 또는 사용자 지정을 선택합니다.
    • 사용자 지정을 선택한 경우 구독자 클라이언트 ID 및 동적 모드 설정을 지정합니다.

    [Azure Portal에서 데이터 지속성 구독자 옵션을 변경하는 스크린샷]

중요합니다

이전에 지속되지 않은 클라이언트는 언제든지 지속될 수 있습니다. 그러나 해당 특정 클라이언트에 대해 지속성을 사용하도록 설정한 후에 받은 게시된 메시지만 디스크에 저장됩니다. 나중에 클라이언트에 대해 지속성을 사용하지 않도록 설정하면 클라이언트가 MQTT 정리 시작 = true 플래그와 다시 연결될 때까지 해당 변경 내용이 적용되지 않습니다.

세션 만료 및 구독자 큐 지속성

구독자 메시지 큐를 디스크에 유지하려면 세션 만료 간격과 브로커의 지속성 구성을 모두 정렬해야 합니다. 특히:

  • MQTTv5 클라이언트: CONNECT 또는 DISCONNECT 패킷의 세션 만료 간격 속성을 사용하여 세션 만료 간격을 지정할 수 있습니다. 지정된 사용자 속성을 사용하여 디스크 지속성 동작을 요청할 수도 있습니다.

  • MQTTv3 클라이언트: 클린 세션 플래그가 true이면 세션 만료 간격이 0으로 설정됩니다. 그렇지 않으면 broker의 maxSessionExpirySeconds 구성 값이 사용됩니다.

브로커는 구성 모드 및 세션 만료 간격에 따라 구독자 큐 지속성을 다르게 처리합니다.

모드가 다음으로 None설정된 경우:

  • 세션 만료 간격에 관계없이 모든 구독자 큐는 메모리 내로만 유지됩니다.

모드가 다음으로 All설정된 경우:

  • 세션 만료 간격 = 0인 경우: 큐가 메모리 내로 유지됩니다.
  • 세션 만료 간격 > 0인 경우: 큐는 간격 기간 동안 디스크에 유지됩니다.

모드가 다음으로 Custom설정된 경우:

  • 세션 만료 간격 = 0인 경우: 큐가 메모리 내로 유지됩니다.
  • 세션 만료 간격 > 0인 경우: 큐는 다음 경우에만 간격 기간 동안 디스크에 유지됩니다.
    • 클라이언트 ID는 OR에서 구성된 목록과 일치합니다.subscriberQueueSettings.subscriberClientIds
    • 동적 모드가 활성화되고 MQTTv5 클라이언트가 CONNECT 패킷에 일치하는 사용자 속성을 제공했습니다.

구독자 큐가 디스크에 유지되도록 하려면 다음 주요 사항에 유의하세요.

  • 구독자 큐는 세션 만료 간격이 0보다 큰 경우에만 유지됩니다.
  • 모드의 경우 Custom 클라이언트 ID를 명시적으로 나열해야 하거나 올바른 사용자 속성을 사용하여 동적 지속성을 사용하도록 설정해야 합니다.
  • MQTTv5 클라이언트는 구성된 사용자 속성(기본값: aio-persistence=true)을 CONNECT 패킷에 포함하여 동적 지속성을 사용할 수 있습니다.

상태 저장소 지속성

상태 저장소는 표준 MQTT 메시지 이외의 다양한 유형의 운영 데이터 및 메타데이터를 유지하는 MQTT broker의 내부 구성 요소입니다. 여기에는 broker 구성 상태, 세션 정보, 구독 세부 정보 및 Broker가 클라이언트 연결 및 메시지 라우팅을 효율적으로 관리하는 데 사용하는 기타 내부 데이터 구조가 포함됩니다.

상태 저장소 데이터를 디스크에 유지하면 브로커가 다시 시작할 때 운영 연속성을 유지할 수 있습니다. 이는 브로커가 내부 데이터 구조를 처음부터 다시 빌드할 때 내부 상태가 손실되면 연결 문제, 구독 손실 또는 성능 저하가 발생할 수 있는 복잡한 IoT 배포에 특히 중요합니다.

상태 저장소 지속성은 복구 시간을 최소화하고 서비스 일관성을 유지하는 것이 중요한 프로덕션 환경에서 특히 중요합니다. 지속성이 없으면 broker는 다시 시작할 때 모든 내부 상태를 다시 빌드해야 하므로 일시적인 서비스 중단 및 성능 영향을 초래할 수 있습니다.

상태 저장소에 대한 자세한 내용은 MQTT broker 상태 저장소 프로토콜에 대한 자세한 내용을 참조하세요.

이 설정은 내부 상태 저장소에서 유지되는 키를 제어합니다.

  • mode (stateStore가 설정된 경우 필수): 옵션은 None, All또는 Custom.

  • 다음을 선택하는 Custom경우:

    • stateStoreSettings.stateStoreResources (선택 사항): 유지할 키 유형 및 키 목록입니다.

      • keyType: 패턴, 문자열 또는 이진

      • keys: 유지할 키/패턴 목록입니다.

    • stateStoreSettings.dynamic.mode (선택 사항, 기본값: Enabled): MQTT 클라이언트가 지속성을 동적으로 요청할 수 있습니다.

Azure Portal에서 상태 저장소 지속성을 구성하려면 다음을 수행합니다.

  1. IoT Operations 인스턴스로 이동합니다.
  2. MQTT Broker>데이터 지속성으로 이동합니다.
  3. State Store 섹션에서 다음을 수행합니다.
    • 모드: 없음, 모두 또는 사용자 지정을 선택합니다.
    • 사용자 지정을 선택한 경우 키 유형, 키 및 동적 모드 설정을 사용하여 상태 저장소 리소스를 지정합니다. [Azure Portal에서 데이터 지속성 상태 저장소 옵션을 변경하는 스크린샷]

동적 지속성 설정을 사용하여 클라이언트에서 지속성 요청

클라이언트는 메시지에 MQTT v5 사용자 속성을 전송하여 데이터에 대한 지속성을 요청할 수 있습니다. 이를 통해 클라이언트는 broker 구성을 변경하지 않고 메시지, 구독자 큐 또는 상태 저장소 항목에 대한 지속성을 동적으로 사용하도록 설정할 수 있습니다.

클라이언트가 지속성을 요청하면 broker는 현재 지속성 설정을 확인하고 적용합니다. 요청된 지속성 모드를 사용하도록 설정하고 동적 요청을 허용하도록 설정된 경우 broker는 구성에 지정된 대로 클라이언트의 데이터를 유지합니다.

각 구성 섹션에서 설정하여 각 데이터 형식(보존된 메시지, 구독자 큐 및 상태 저장소 항목)에 대한 동적 지속성 설정을 dynamic.modeEnabled 사용하거나 사용하지 않도록 설정할 수 있습니다. 동적 지속성 요청에 사용되는 MQTT 사용자 속성 키와 값은 broker 수준에서 별도로 구성됩니다.

Azure Portal에서 동적 지속성 설정을 구성하려면 다음을 수행합니다.

  1. IoT Operations 인스턴스로 이동합니다.

  2. MQTT Broker>데이터 지속성으로 이동합니다.

  3. 전역 MQTT 사용자 속성 설정을 구성합니다.

    • 사용자 속성 키 설정(기본값: aio-persistence)
    • User 속성 값 설정(기본값: true)
  4. 각 지속성 섹션(보존된 메시지, 구독자 큐, 상태 저장소):

    • 클라이언트가 해당 데이터 형식에 대한 지속성을 요청할 수 있도록 동적 지속 성을 사용하도록 설정합니다.

    [Azure Portal에서 데이터 지속성 동적 옵션을 변경하는 스크린샷]

고급 MQTT broker 구성에 대한 Azure CLI 지원에 대한 자세한 내용은 고급 MQTT broker 구성에 대한 Azure CLI 지원을 참조하세요.