データ永続化は、クラスターの再起動後も有効になるように、重要な MQTT ブローカー データをディスクに書き込みます。 MQTT ブローカーのデータ永続化が必要かどうかをデプロイ前に決定します。
永続化は、ブローカーのレプリケーション システムを補完します。 レプリケーションはノード間でデータの可用性を維持しますが、クラスター全体のシャットダウンではそれでもデータ損失が発生する可能性があります。永続化はそれを防ぎます。 永続化は、メモリの拡張機能としてディスクを使用し、持続性の保証を提供しない、ディスク ベースのメッセージ バッファーとは異なります。
ディスクへのデータの書き込みには、パフォーマンス コストが大きくなります。 正確なコストは、基になるストレージの種類と速度によって異なります。
Important
永続化はデプロイ時に有効になり、後でオフにすることはできません。 関連するオプションの一部は、後で変更できます。 「ランタイム永続化オプション」を参照してください。
永続ボリュームの設定
MQTT ブローカーは、永続ボリューム (PV) を使用してディスクにデータを格納します。 このボリュームのプロビジョニング方法は、次の 2 つの設定で制御されます。
maxSize(必須): ブローカー データを格納するための永続ボリュームの最大サイズを設定します。 カスタム ボリューム要求を指定した場合でも、このフィールドは常に必須です。 値は 100 MB 以上である必要があります。例:
10GipersistentVolumeClaimSpec(省略可能): 永続ボリュームのプロビジョニング方法を制御するカスタム 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 ブローカーの永続性の構成を参照してください。