Skip to main content
BeeGFS on NetApp with E-Series Storage
本繁體中文版使用機器翻譯,譯文僅供參考,若與英文版本牴觸,應以英文版本為準。

升級至 BeeGFS 8

貢獻者 mcwhiteside

請依照以下步驟將您的 BeeGFS HA 叢集從 BeeGFS 7.4 升級到 BeeGFS 8。

總覽

BeeGFS 8 引入了一些重大變化,從 BeeGFS 7 升級之前需要額外的設定。本文檔將指導您如何為 BeeGFS 8 的新要求準備叢集,以及如何升級到 BeeGFS 8。

重要 在升級到 BeeGFS 8 之前,請確保您的系統至少運作的是 BeeGFS 7.4。任何運行 BeeGFS 7.4 之前版本的叢集都必須先 "升級至 BeeGFS 7.4" 再升級到 BeeGFS 8。

BeeGFS 8 的主要變化

BeeGFS 8 引入了以下主要變化:

  • 授權強制執行: BeeGFS 8 需要授權才能使用進階功能,例如儲存資源池、遠端儲存目標、BeeOND 等。在升級之前,請為您的 BeeGFS 叢集取得有效的授權。如有需要,您可以從 "BeeGFS 授權入口網站" 取得臨時 BeeGFS 8 評估授權。

  • 管理服務資料庫遷移: 若要啟用 BeeGFS 8 中基於 TOML 的新格式的配置,您必須手動將 BeeGFS 7 管理服務資料庫遷移到更新的 BeeGFS 8 格式。

  • TLS 加密: BeeGFS 8 引入了 TLS 加密,用於服務之間的安全通訊。升級過程中,您需要為 BeeGFS 管理服務和 beegfs 命令列公用程式產生並分發 TLS 憑證。

有關 BeeGFS 8 的更多詳細資訊和其他更改,請參閱 "BeeGFS 8.0.0 升級指南"

重要

升級到 BeeGFS 8 需要叢集停機維護,且 BeeGFS 7 用戶端無法連線到 BeeGFS 8 叢集。請仔細協調升級時間,以最大程度地減少對運作的影響。

準備好 BeeGFS 叢集以進行升級

在開始升級之前,請仔細準備您的環境,以確保平穩過渡並最大限度地減少停機時間。

  1. 確認所有伺服器和客戶端都使用 "支援的 Linux 發行版本和核心版本" 用於 BeeGFS 8。

  2. 確保叢集處於健康狀態,所有 BeeGFS 服務都在其首選節點上運行。從執行 BeeGFS 服務的檔案節點,驗證所有 Pacemaker 資源是否都在其首選節點上執行:

    pcs status
  3. 請記錄並備份您的叢集配置。BeeGFS 管理服務資料將在稍後作為管理資料庫升級過程的一部分進行備份。

    1. 在 BeeGFS 用戶端上執行以下命令、並儲存輸出結果以供參考:

      beegfs-ctl --getentryinfo --verbose /path/to/beegfs/mountpoint
    2. 如果使用鏡像、請收集詳細的狀態資訊、以便在兩個鏡像成員都進入「需要重新同步」狀態時、能夠識別原始主要目標:

      beegfs-ctl --listtargets --longnodes --state --spaceinfo --mirrorgroups --nodetype=meta
      beegfs-ctl --listtargets --longnodes --state --spaceinfo --mirrorgroups --nodetype=storage
    3. 如果使用鏡像,請在升級之前驗證所有夥伴群組是否處於 `GOOD`狀態。

  4. 請依以下順序停止 BeeGFS 系統:

    1. 在每台客戶端上,卸載 BeeGFS 檔案系統並停止 beegfs-client 服務。對每台客戶端執行以下命令:

      systemctl stop beegfs-client
    2. 對於每個 Pacemaker 叢集,停用 STONITH,以便在升級後驗證叢集完整性,而不會觸發不必要的節點重新啟動:

      pcs property set stonith-enabled=false
    3. 在所有 Pacemaker 叢集上,停止叢集:

      pcs cluster stop --all

升級 BeeGFS 管理套件

在叢集中的所有檔案節點上,新增適用於您 Linux 發行版的 BeeGFS 8 軟體包倉庫。有關如何新增適用於您 Linux 發行版的官方 BeeGFS 倉庫的說明,請造訪 "BeeGFS 下載頁面"。或者,請相應地配置您的本地 BeeGFS 鏡像倉庫。

  1. 在叢集的前兩個檔案節點上,僅將 BeeGFS 管理常駐程式套件更新至 BeeGFS 8:

    對於 RHEL 系統,配置 BeeGFS 儲存庫後,執行以下命令:

    dnf clean all
    dnf update beegfs-mgmtd

升級管理資料庫

在執行 BeeGFS 管理服務的檔案節點之一上,請依照下列步驟將管理資料庫從 BeeGFS 7 遷移到 BeeGFS 8。

  1. 列出所有 NVMe 裝置並識別管理目標:

    nvme netapp smdevices | grep mgmt_tgt

    注意輸出中的設備路徑(例如, /dev/nvmeXnY)。

    1. 將管理目標裝置掛載到現有的管理目標掛載點(將 /dev/nvmeXnY 替換為您的裝置路徑):

      mount /dev/nvmeXnY /mnt/mgmt_tgt_mgmt01/
  2. 執行管理資料目錄的備份:

    tar --force-local -cpzf /mnt/mgmt_tgt_mgmt01/data_beegfs_7_backup_$(date +'%F_%T').tar.gz /mnt/mgmt_tgt_mgmt01/data
  3. 執行以下命令,將您的 BeeGFS 7 管理資料匯入新的資料庫格式:

    /opt/beegfs/sbin/beegfs-mgmtd --import-from-v7=/mnt/mgmt_tgt_mgmt01/data/

    預期輸出:

    Created new database version 3 at "/var/lib/beegfs/mgmtd.sqlite". Successfully imported v7 management data from "/mnt/mgmt_tgt_mgmt01/data/".
    重要

    由於 BeeGFS 8 中更嚴格的驗證要求,自動導入可能無法在所有情況下成功。例如,如果目標被指派到不存在的儲存池,則匯入會失敗。若遷移失敗,請勿繼續升級。請聯絡 NetApp 支援以取得資料庫遷移問題的協助。在問題解決期間,您可以降級 BeeGFS 8 管理包並繼續運行 BeeGFS 7。

  4. 將產生的 SQLite 檔案移到管理服務掛載點:

    mv /var/lib/beegfs/mgmtd.sqlite /mnt/mgmt_tgt_mgmt01/data/
  5. 將產生的 `beegfs-mgmtd.toml`移至管理服務掛載點:

    mv /etc/beegfs/beegfs-mgmtd.toml /mnt/mgmt_tgt_mgmt01/mgmt_config/

    完成以下各節中的授權和 TLS 設定步驟後,您將準備 `beegfs-mgmtd.toml`設定檔。

升級剩餘的 BeeGFS 套件

完成管理資料庫遷移後,升級叢集中所有檔案節點上的剩餘 BeeGFS 軟體包。對於 RHEL,配置 BeeGFS 儲存庫後,執行以下命令:

dnf clean all
dnf update beegfs-storage beegfs-meta libbeegfs-ib

設定授權

  1. 在所有執行 BeeGFS 管理服務的節點上安裝 BeeGFS 授權套件。這通常是叢集的前兩個檔案節點:

    dnf install libbeegfs-license
  2. 將您的 BeeGFS 8 授權檔案下載到管理節點並放置在以下位置:

    /etc/beegfs/license.pem

設定 TLS 加密

BeeGFS 8 需要 TLS 加密才能在管理服務和 BeeGFS CLI 工具之間進行安全通訊(beegfs)。您可以選擇以下三種設定方法之一:使用受信任的憑證授權單位簽署的憑證、建立您自己的本機 CA 來為您的 BeeGFS 叢集簽署憑證,或完全停用 TLS 以進行故障排除(不建議在生產環境中使用)。

依照 "為 BeeGFS 8 設定 TLS 加密" 指南為檔案節點上的管理服務設定 TLS 加密。

註

BeeGFS 客戶端升級完成後,客戶端 TLS 設定將稍後完成。目前,只需在檔案節點上為管理服務和 beegfs-tool 配置 TLS 即可。

更新管理服務配置

手動將 BeeGFS 7 設定檔中的設定轉移到 `/mnt/mgmt_tgt_mgmt01/mgmt_config/beegfs-mgmtd.toml`檔案中,從而準備 BeeGFS 8 管理服務設定檔。

  1. 在已掛載管理目標的管理節點上,參考 /mnt/mgmt_tgt_mgmt01/mgmt_config/beegfs-mgmtd.conf BeeGFS 7 的管理服務檔案,並將所有設定傳輸至 /mnt/mgmt_tgt_mgmt01/mgmt_config/beegfs-mgmtd.toml 檔案。對於基本設定,您的 beegfs-mgmtd.toml 可能如下所示:

    beemsg-port = 8008
    grpc-port = 8010
    log-level = "info"
    node-offline-timeout = "900s"
    quota-enable = false
    auth-disable = false
    auth-file = "/etc/beegfs/<mgmt_service_ip>_connAuthFile"
    db-file = "/mnt/mgmt_tgt_mgmt01/data/mgmtd.sqlite"
    license-disable = false
    license-cert-file = "/etc/beegfs/license.pem"
    tls-disable = false
    tls-cert-file = "/etc/beegfs/mgmtd_tls_cert.pem"
    tls-key-file = "/etc/beegfs/mgmtd_tls_key.pem"
    interfaces = ['i1b:mgmt_1', 'i2b:mgmt_2']

    根據您的環境和 TLS 配置調整所有路徑。

  2. 在每個執行管理服務的檔案節點上,修改 systemd 服務檔案,使其指向新的組態檔位置。

    sudo sed -i 's|ExecStart=.*|ExecStart=nice -n -3 /opt/beegfs/sbin/beegfs-mgmtd --config-file /mnt/mgmt_tgt_mgmt01/mgmt_config/beegfs-mgmtd.toml|' /etc/systemd/system/beegfs-mgmtd.service
    1. 重新載入 systemd:

      systemctl daemon-reload
  3. 對於執行管理服務的每個檔案節點,開啟連接埠 8010 以進行管理服務的 gRPC 通訊。

  4. 將 TCP 連接埠 8010 新增至 beegfs 區域:

    sudo firewall-cmd --zone=beegfs --permanent --add-port=8010/tcp
    1. 重新載入防火牆以套用變更:

      sudo firewall-cmd --reload

更新 BeeGFS 監控腳本

Pacemaker beegfs-monitor Open Cluster Framework (OCF) 腳本需要更新以支援新的 TOML 設定格式和 systemd 服務管理。請在叢集中的一個節點上更新腳本,然後將更新後的腳本複製到所有其他節點。

  1. 建立目前腳本的備份:

    cp /usr/lib/ocf/resource.d/eseries/beegfs-monitor /usr/lib/ocf/resource.d/eseries/beegfs-monitor.bak.$(date +%F)
  2. 將管理設定檔路徑從 .conf`更新為 `.toml

    sed -i 's|mgmt_config/beegfs-mgmtd\.conf|mgmt_config/beegfs-mgmtd.toml|' /usr/lib/ocf/resource.d/eseries/beegfs-monitor

    或者,手動在腳本中找到以下程式碼區塊:

    case $type in
      management)
        conf_path="${configuration_mount}/mgmt_config/beegfs-mgmtd.conf"
        ;;

    並將其替換為:

    case $type in
      management)
        conf_path="${configuration_mount}/mgmt_config/beegfs-mgmtd.toml"
        ;;
  3. 更新 get_interfaces()get_subnet_ips() 函數以支援 TOML 配置:

    1. 在文字編輯器中開啟腳本:

      vi /usr/lib/ocf/resource.d/eseries/beegfs-monitor
    2. 找出這兩個函數: get_interfaces()get_subnet_ips()

    3. 刪除這兩個完整函數,從 get_interfaces() 開始到 get_subnet_ips() 結尾。

    4. 請將以下更新的函數複製並貼上到對應位置:

      # Return network communication interface name(s) from the BeeGFS resource's connInterfaceFile
      get_interfaces() {
        # Determine BeeGFS service network IP interfaces.
        if [ "$type" = "management" ]; then
          interfaces_line=$(grep "^interfaces =" "$conf_path")
          interfaces_list=$(echo "$interfaces_line" | sed "s/.*= \[\(.*\)\]/\1/")
          interfaces=$(echo "$interfaces_list" | tr -d "'" | tr -d " " | tr ',' '\n')
      
          for entry in $interfaces; do
            echo "$entry" | cut -d ':' -f 1
          done
        else
          connInterfacesFile_path=$(grep "^connInterfacesFile" "$conf_path" | tr -d "[:space:]" | cut -f 2 -d "=")
      
          if [ -f "$connInterfacesFile_path" ]; then
            while read -r entry; do
              echo "$entry" | cut -f 1 -d ':'
            done < "$connInterfacesFile_path"
          fi
        fi
      }
      
      # Return list containing all the BeeGFS resource's usable IP addresses. *Note that these are filtered by the connNetFilterFile entries.
      get_subnet_ips() {
        # Determine all possible BeeGFS service network IP addresses.
        if [ "$type" != "management" ]; then
          connNetFilterFile_path=$(grep "^connNetFilterFile" "$conf_path" | tr -d "[:space:]" | cut -f 2 -d "=")
      
          filter_ips=""
          if [ -n "$connNetFilterFile_path" ] && [ -e $connNetFilterFile_path ]; then
            while read -r filter; do
              filter_ips="$filter_ips $(get_ipv4_subnet_addresses $filter)"
            done < $connNetFilterFile_path
          fi
      
          echo "$filter_ips"
        fi
      }
    5. 儲存並退出文字編輯器。

    6. 執行以下命令以在繼續之前檢查腳本的語法錯誤。如果沒有輸出出現,則腳本語法正確。

      bash -n /usr/lib/ocf/resource.d/eseries/beegfs-monitor
  4. 將更新後的 beegfs-monitor OCF 腳本複製到叢集中的所有其他節點:

    scp /usr/lib/ocf/resource.d/eseries/beegfs-monitor user@node:/usr/lib/ocf/resource.d/eseries/beegfs-monitor

使叢集恢復上線

  1. 完成之前的所有升級步驟後,透過在所有節點上啟動 BeeGFS 服務,使叢集重新上線。

    pcs cluster start --all
  2. 驗證 beegfs-mgmtd 服務是否成功啟動:

    journalctl -xeu beegfs-mgmtd

    預期輸出包含如下行:

    Started Cluster Controlled beegfs-mgmtd.
    Loaded config file from "/mnt/mgmt_tgt_mgmt01/mgmt_config/beegfs-mgmtd.toml"
    Successfully initialized certificate verification library.
    Successfully loaded license certificate: TMP-113489268
    Opened database at "/mnt/mgmt_tgt_mgmt01/data/mgmtd.sqlite"
    Listening for BeeGFS connections on [::]:8008
    Serving gRPC requests on [::]:8010
    註

    如果日誌中出現錯誤,請檢查管理組態檔路徑,並驗證是否已從 BeeGFS 7 組態檔正確傳輸所有值。

  3. 執行 pcs status 並驗證叢集是否運作正常,以及各項服務是否已在首選節點上啟動。

  4. 確認叢集運作狀況正常後,重新啟用 STONITH:

    pcs property set stonith-enabled=true
  5. 進入下一節,升級 BeeGFS 用戶端並驗證叢集的健康狀況。

升級 BeeGFS 用戶端

將叢集升級至 BeeGFS 8 後,您還必須升級所有 BeeGFS 用戶端。

  1. 如果您尚未停止 BeeGFS 用戶端服務、請立即停止:

    systemctl stop beegfs-client
  2. 為您的 Linux 發行版添加 BeeGFS 8 軟體包倉庫。有關新增官方 BeeGFS 倉庫的說明,請參閱 "BeeGFS 下載頁面"。或者,請相應地配置您的本地 BeeGFS 鏡像倉庫。

  3. 升級 BeeGFS 用戶端套件:

    適用於 Ubuntu/Debian:

    apt-get update
    apt-get install --only-upgrade beegfs-client
  4. 為客戶端配置 TLS。從客戶端節點使用 BeeGFS CLI 需要 TLS。請參閱 TLS 部署指南中的 "為 BeeGFS 8 用戶端設定 TLS" 章節。

    註
    `beegfs-client` 服務掛載 BeeGFS 檔案系統不需要 TLS。TLS 僅在使用 BeeGFS CLI 工具和其他管理服務時才需要。
  5. 啟動 BeeGFS 用戶端服務:

    systemctl start beegfs-client

    如果 BeeGFS 掛載失敗,請檢查系統日誌以尋找錯誤。如果您看到類似「沒有可用的根元資料節點,無法繼續」或「遠端 I/O 錯誤」之類的訊息,則表示 BeeGFS 7 匯入可能未成功完成。請聯絡 NetApp 支援以獲取協助。

  6. (可選)在客戶端節點或其他需要執行 BeeGFS 管理命令的系統上安裝並設定新的 beegfs CLI 工具:

    1. 安裝 beegfs-tools 套件:

      適用於 Ubuntu/Debian:

    apt-get install beegfs-tools
    1. beegfs 工具配置 TLS。從客戶端節點使用 BeeGFS CLI 需要 TLS。請參閱 TLS 部署指南中的 "為 BeeGFS 8 用戶端設定 TLS" 章節。

驗證升級

完成升級至 BeeGFS 8 後,執行以下命令以驗證升級是否成功。

  1. 驗證根 inode 是否仍由先前的相同元資料節點擁有。如果您使用了管理服務中的 import-from-v7 功能,則此過程應該會自動完成:

    beegfs entry info /mnt/beegfs
  2. 確認所有節點和目標均在線上且處於正常狀態:

    beegfs health check
    註

    如果「可用容量」檢查警告目標可用空間不足,您可以調整 beegfs-mgmtd.toml 檔案中定義的「容量池」閾值,使其更適合您的環境。