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. 如果使用镜像,则收集详细的状态信息,以便在两个镜像成员都进入"needs-resync"状态时识别原始主目标:

      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 加密。

备注

客户端 TLS 配置将在升级 BeeGFS 客户端后稍后完成。在此阶段,仅在文件节点上为管理服务和 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. 对于运行管理服务的每个文件节点,为管理服务的 gRPC 通信打开端口 8010。

  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"部分。

    备注

    TLS 不是 beegfs-client 服务装载 BeeGFS 文件系统所必需的。TLS 仅在使用 BeeGFS CLI 工具和其他管理服务时才需要。

  5. 启动 BeeGFS 客户端服务:

    systemctl start beegfs-client

    如果安装 BeeGFS 失败,请检查系统日志是否有错误。如果您看到"Unable to proceed without a working root metadata node"或"Remote I/O error"等消息,则 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
    备注

    如果"Available Capacity"检查警告目标可用空间不足,您可以调整 beegfs-mgmtd.toml 文件中定义的"capacity pool"阈值,使其更适合您的环境。