데이터 지속성은 중요한 MQTT 브로커 데이터를 클러스터가 다시 시작되어도 유지되도록 디스크에 저장합니다. 배포 전에 MQTT 브로커에 대한 데이터 지속성이 필요한지 여부를 결정합니다.
지속성은 브로커의 복제 시스템을 보완합니다. 복제는 노드 간에 데이터를 계속 사용할 수 있지만 클러스터 전체 종료로 인해 여전히 데이터 손실이 발생할 수 있습니다. 지속성은 이를 방지합니다. 지속성은 디스크를 메모리의 확장으로 사용하고 영속성을 보장하지 않는 디스크 기반 메시지 버퍼와는 다릅니다.
디스크에 데이터를 쓰면 상당한 성능 비용이 듭니다. 정확한 비용은 기본 스토리지의 유형과 속도에 따라 달라집니다.
Important
지속성은 배포 시 사용하도록 설정되며 나중에 해제할 수 없습니다. 몇 가지 관련 옵션은 나중에 변경할 수 있습니다. 런타임 지속성 옵션을 참조하세요.
영구 볼륨 설정
MQTT 브로커는 디스크에 데이터를 저장하기 위해 영구 볼륨(PV)을 사용합니다. 두 가지 설정을 통해 이 볼륨이 어떤 방식으로 프로비저닝되는지가 결정됩니다.
maxSize(필수): 브로커 데이터를 저장하기 위한 영구 볼륨의 최대 크기를 설정합니다. 이 필드는 사용자 지정 볼륨 클레임을 제공하는 경우에도 항상 필수로 지정해야 합니다. 값은 100MB 이상이어야 합니다.예:
10GipersistentVolumeClaimSpec(선택 사항): 영구 볼륨 프로비전 방법을 제어하는 사용자 지정 PVC(PersistentVolumeClaim) 템플릿을 정의합니다. 이 옵션을 설정하지 않으면 브로커는maxSize값과 클러스터의 기본 스토리지 클래스를 사용하여 기본 PVC를 생성합니다.최상의 성능을 위해 로컬 경로 프로비저닝자가 백업하는 스토리지 클래스를 사용합니다. 기본 스토리지 클래스는 그렇지 않은 경우가 많으며, 이로 인해 성능이 저하될 수 있습니다.
Important
persistentVolumeClaimSpec을 지정하는 경우에는 접근 모드를 ReadWriteOncePod로 설정해야 합니다.
지속성 구성
명령을 사용하여 배포 시 지속성을 구성합니다 az iot ops create . 최소한 영구 볼륨 크기를 설정합니다.
az iot ops create ... --persist-max-size 10Gi
스토리지 클래스 또는 지속 모드를 사용자 지정하려면 --persist-pvc-sc 및 --persist-mode 플래그를 추가하세요:
az iot ops create ... --persist-max-size 10Gi --persist-pvc-sc <MYSTORAGECLASS> --persist-mode retain=All stateStore=None
전체 옵션을 사용하려면 --broker-config-file와 함께 구성 파일을 전달하세요. 자세한 내용은 고급 MQTT 브로커 구성을 위한 Azure CLI 지원 및 지속성 API 참조를 참조하세요.
다음 예제에서는 최대 크기 10GiB 및 사용자 지정 스토리지 클래스를 설정합니다.
{
"persistence": {
"maxSize": "10G",
"persistentVolumeClaimSpec": {
"storageClassName": "example-storage-class",
"accessModes": [
"ReadWriteOncePod"
]
}
}
}
Encryption
기본적으로 MQTT 브로커는 AES-256-GCM 암호화를 사용하여 디스크의 모든 지속성 데이터를 암호화합니다. 암호화는 공격자가 기본 볼륨에 대한 액세스 권한을 얻는 경우 브로커 상태 및 세션 데이터를 보호합니다.
암호화는 기본적으로 설정됩니다. 사용하지 않도록 설정할 수 있지만 암호화는 미사용 데이터만 보호합니다. 메모리의 데이터는 암호화되지 않습니다. 성능 비용은 최소화되지만 키 회전은 아직 지원되지 않습니다.
암호화를 비활성화하려면 브로커 구성 파일에 다음 내용을 추가한 다음, 플래그와 함께 --broker-config-file에 전달합니다.
{
"persistence": {
"encryption": {
"mode": "Disabled"
}
}
}
런타임 지속성 옵션
일부 지속성 옵션(보존된 메시지, 구독자 큐 및 상태 저장소)은 배포 후에 구성할 수 있습니다. 이러한 옵션에 대한 자세한 내용은 MQTT broker 지속성 구성을 참조하세요.