部署規劃 - 持久性

資料持久化會將關鍵的 MQTT 代理資料寫入磁碟,使其能在叢集重啟時存活。 部署前先決定是否需要 MQTT 代理資料持久化。

持久化是對代理程式複寫系統的補充。 複寫能讓資料在節點間保持可用,但整個叢集關閉仍可能導致資料遺失——持久性可防止這種情況。 持久性不同於磁碟 備份訊息緩衝區,後者將磁碟作為記憶體的延伸,且不提供持久性保證。

將資料寫入磁碟會帶來顯著的效能成本。 具體費用取決於底層儲存的類型與速度。

Important

持久性是在部署時啟用,之後無法關閉。 部分相關選項可稍後更改——參見 執行時持久化選項。

持續音量設定

MQTT 代理程式使用持續性磁碟區 (PV) 將資料儲存在磁碟上。 有兩個設定可控制此磁碟區的佈建方式:

  • 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 設定檔中停用加密。

要停用加密,請將以下程式碼加入你的經紀人設定檔,然後用旗標傳給 az iot ops create--broker-config-file:

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

執行時持久化選項

部分持久化選項——保留訊息、訂閱者佇列及狀態儲存——可在部署後設定。 關於這些選項的詳細資訊,請參見 「配置 MQTT 經紀人持久化」。

下一步