展開計画 - 永続化

データ永続化は、クラスターの再起動後も有効になるように、重要な MQTT ブローカー データをディスクに書き込みます。 MQTT ブローカーのデータ永続化が必要かどうかをデプロイ前に決定します。

永続化は、ブローカーのレプリケーション システムを補完します。 レプリケーションはノード間でデータの可用性を維持しますが、クラスター全体のシャットダウンではそれでもデータ損失が発生する可能性があります。永続化はそれを防ぎます。 永続化は、メモリの拡張機能としてディスクを使用し、持続性の保証を提供しない、ディスク ベースのメッセージ バッファーとは異なります。

ディスクへのデータの書き込みには、パフォーマンス コストが大きくなります。 正確なコストは、基になるストレージの種類と速度によって異なります。

Important

永続化はデプロイ時に有効になり、後でオフにすることはできません。 関連するオプションの一部は、後で変更できます。 「ランタイム永続化オプション」を参照してください。

永続ボリュームの設定

MQTT ブローカーは、永続ボリューム (PV) を使用してディスクにデータを格納します。 このボリュームのプロビジョニング方法は、次の 2 つの設定で制御されます。

  • maxSize (必須): ブローカー データを格納するための永続ボリュームの最大サイズを設定します。 カスタム ボリューム要求を指定した場合でも、このフィールドは常に必須です。 値は 100 MB 以上である必要があります。

    例:10Gi

  • persistentVolumeClaimSpec (省略可能): 永続ボリュームのプロビジョニング方法を制御するカスタム PersistentVolumeClaim (PVC) テンプレートを定義します。 このオプションを設定しない場合、ブローカーは、 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

Note

これらの永続化設定は、Azureポータルの展開段階で設定することもできます。

オプション全セットを知りたい場合は、 --broker-config-fileを使って設定ファイルを渡してください。 詳細については、「Azure CLI高度な MQTT ブローカー構成のサポートおよび Persistence API リファレンスを参照してください。

次の例では、10 GiB の最大サイズとカスタム ストレージ クラスを設定します。

{
  "persistence": {
    "maxSize": "10G",
    "persistentVolumeClaimSpec": {
      "storageClassName": "example-storage-class",
      "accessModes": [
        "ReadWriteOncePod"
      ]
    }
  }
}

Encryption

既定では、MQTT ブローカーは、AES-256-GCM 暗号化を使用して、ディスク上のすべての永続化データを暗号化します。 暗号化は、攻撃者が基になるボリュームにアクセスした場合にブローカーの状態とセッション データを保護します。

暗号化は既定でオンになっています。 無効にすることはできますが、暗号化は静止したデータのみを保護し、メモリ内のデータは暗号化されていません。 パフォーマンス コストは最小限ですが、キーのローテーションはまだサポートされていません。

Note

Azureポータルを使ったデプロイ時には、暗号化がデフォルトで有効化されています。 Azure CLIを使ってデプロイする場合は、ブローカー設定ファイルで暗号化を無効にできます。

暗号化を無効にするには、ブローカー設定ファイルに以下のコードを追加し、フラグで--broker-config-fileに渡してください:

{
  "persistence": {
    "encryption": {
      "mode": "Disabled"
    }
  }
}

ランタイム永続化オプション

一部の永続化オプション (保持メッセージ、サブスクライバー キュー、および状態ストア) は、デプロイ後に構成できます。 これらのオプションの詳細については、 MQTT ブローカーの永続性の構成を参照してください。

次のステップ