升级到 BeeGFS 8
按照下面的步骤将您的 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 集群
在开始升级之前,请仔细准备您的环境,以确保平稳过渡并最大限度地减少停机时间。
-
验证所有服务器和客户端是否都在使用 "支持的 Linux 发行版和内核版本" 用于 BeeGFS 8。
-
确保集群处于健康状态,所有 BeeGFS 服务都在其首选节点上运行。从运行 BeeGFS 服务的文件节点中,验证所有 Pacemaker 资源都在其首选节点上运行:
pcs status -
记录并备份集群配置。BeeGFS 管理服务数据将在稍后作为管理数据库升级过程的一部分进行备份。
-
在 BeeGFS 客户端上运行以下命令并保存输出以供参考:
beegfs-ctl --getentryinfo --verbose /path/to/beegfs/mountpoint -
如果使用镜像,则收集详细的状态信息,以便在两个镜像成员都进入"needs-resync"状态时识别原始主目标:
beegfs-ctl --listtargets --longnodes --state --spaceinfo --mirrorgroups --nodetype=meta beegfs-ctl --listtargets --longnodes --state --spaceinfo --mirrorgroups --nodetype=storage -
如果使用镜像,请在继续升级之前验证所有好友组都处于
GOOD状态。
-
-
按以下顺序停止 BeeGFS 系统:
-
在每个客户端上,卸载 BeeGFS 文件系统并停止
beegfs-client服务。对于每个客户端,运行:systemctl stop beegfs-client -
对于每个 Pacemaker 集群,禁用 STONITH,以便您可以在升级后验证集群完整性,而不会触发不必要的节点重启:
pcs property set stonith-enabled=false -
在所有 Pacemaker 集群上,停止集群:
pcs cluster stop --all
-
升级 BeeGFS 管理包
在集群中的所有文件节点上,为您的 Linux 发行版添加 BeeGFS 8 包存储库。有关为您的 Linux 发行版添加官方 BeeGFS 存储库的说明,请参阅 "BeeGFS 下载页面"。否则,请相应地配置本地 BeeGFS 镜像存储库。
-
在集群的前两个文件节点上,仅将 BeeGFS 管理守护程序包更新为 BeeGFS 8:
对于 RHEL,配置 BeeGFS 存储库后,运行以下命令:
dnf clean all dnf update beegfs-mgmtd
升级管理数据库
在运行 BeeGFS 管理服务的其中一个文件节点上,按照以下步骤将管理数据库从 BeeGFS 7 迁移到 BeeGFS 8。
-
列出所有 NVMe 设备并标识管理目标:
nvme netapp smdevices | grep mgmt_tgt注意输出中的设备路径(例如,
/dev/nvmeXnY)。-
将管理目标设备装载到现有管理目标装载点(将
/dev/nvmeXnY替换为您的设备路径):mount /dev/nvmeXnY /mnt/mgmt_tgt_mgmt01/
-
-
执行管理数据目录的备份:
tar --force-local -cpzf /mnt/mgmt_tgt_mgmt01/data_beegfs_7_backup_$(date +'%F_%T').tar.gz /mnt/mgmt_tgt_mgmt01/data -
通过运行以下命令,将您的 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。
-
将生成的 SQLite 文件移动到管理服务装载:
mv /var/lib/beegfs/mgmtd.sqlite /mnt/mgmt_tgt_mgmt01/data/ -
将生成的
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
配置许可
-
在运行 BeeGFS 管理服务的所有节点上安装 BeeGFS 许可证包。这通常是集群的前两个文件节点:
dnf install libbeegfs-license -
将您的 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 管理服务配置文件。
-
在装载了管理目标的管理节点上,引用
/mnt/mgmt_tgt_mgmt01/mgmt_config/beegfs-mgmtd.confBeeGFS 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 配置。
-
在运行管理服务的每个文件节点上,修改 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-
重新加载 systemd:
systemctl daemon-reload
-
-
对于运行管理服务的每个文件节点,为管理服务的 gRPC 通信打开端口 8010。
-
将 TCP 端口 8010 添加到 beegfs 区域:
sudo firewall-cmd --zone=beegfs --permanent --add-port=8010/tcp-
重新加载防火墙以应用更改:
sudo firewall-cmd --reload
-
更新 BeeGFS 监控脚本
Pacemaker beegfs-monitor Open Cluster Framework (OCF) 脚本需要更新,以支持新的 TOML 配置格式和 systemd 服务管理。更新集群中一个节点上的脚本,然后将更新后的脚本复制到所有其他节点。
-
创建当前脚本的备份:
cp /usr/lib/ocf/resource.d/eseries/beegfs-monitor /usr/lib/ocf/resource.d/eseries/beegfs-monitor.bak.$(date +%F) -
将管理配置文件路径从
.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" ;; -
更新
get_interfaces()和get_subnet_ips()函数以支持 TOML 配置:-
在文本编辑器中打开脚本:
vi /usr/lib/ocf/resource.d/eseries/beegfs-monitor -
找到两个函数:
get_interfaces()和get_subnet_ips()。 -
删除两个完整函数,从
get_interfaces()开始到get_subnet_ips()结束。 -
复制并粘贴以下更新的函数来替换它们:
# 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 } -
保存并退出文本编辑器。
-
运行以下命令来检查脚本是否存在语法错误,然后再继续。如果没有显示输出,则脚本在语法上是正确的。
bash -n /usr/lib/ocf/resource.d/eseries/beegfs-monitor
-
-
将更新的
beegfs-monitorOCF 脚本复制到集群中的所有其他节点:scp /usr/lib/ocf/resource.d/eseries/beegfs-monitor user@node:/usr/lib/ocf/resource.d/eseries/beegfs-monitor
使集群恢复联机
-
完成之前的所有升级步骤后,通过在所有节点上启动 BeeGFS 服务,使集群恢复联机状态。
pcs cluster start --all -
验证
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 配置文件传输了所有值。
-
运行 `pcs status`并验证集群是否正常运行,服务是否在其首选节点上启动。
-
验证集群是否正常后,重新启用 STONITH:
pcs property set stonith-enabled=true -
继续下一节以升级 BeeGFS 客户端并验证群集的运行状况。
升级 BeeGFS 客户端
将群集升级到 BeeGFS 8 后,还必须升级所有 BeeGFS 客户端。
-
如果您尚未停止 BeeGFS 客户端服务,请立即停止:
systemctl stop beegfs-client -
为您的 Linux 发行版添加 BeeGFS 8 包存储库。有关添加官方 BeeGFS 存储库的说明,请参阅 "BeeGFS 下载页面"。否则,请相应地配置本地 BeeGFS 镜像存储库。
-
升级 BeeGFS 客户端软件包:
对于 Ubuntu/Debian:
apt-get update apt-get install --only-upgrade beegfs-client -
为客户端配置 TLS。要从客户端节点使用 BeeGFS CLI,需要使用 TLS。请参阅 TLS 部署指南中的"为 BeeGFS 8 客户端配置 TLS"部分。
TLS 不是
beegfs-client服务装载 BeeGFS 文件系统所必需的。TLS 仅在使用 BeeGFS CLI 工具和其他管理服务时才需要。 -
启动 BeeGFS 客户端服务:
systemctl start beegfs-client如果安装 BeeGFS 失败,请检查系统日志是否有错误。如果您看到"Unable to proceed without a working root metadata node"或"Remote I/O error"等消息,则 BeeGFS 7 导入可能尚未成功完成。请联系 NetApp 支持以获得帮助。
-
(可选)在要运行 BeeGFS 管理命令的客户端节点或其他系统上安装和配置新的
beegfsCLI 工具:-
安装
beegfs-tools软件包:对于 Ubuntu/Debian:
apt-get install beegfs-tools-
为
beegfs工具配置 TLS。要从客户端节点使用 BeeGFS CLI,需要使用 TLS。请参阅 TLS 部署指南中的"为 BeeGFS 8 客户端配置 TLS"部分。
-
验证升级
完成升级到 BeeGFS 8 后,运行以下命令以验证升级是否成功。
-
验证根 inode 是否由与之前相同的元数据节点所有。如果您使用了管理服务中的 `import-from-v7`功能,则应自动执行此操作:
beegfs entry info /mnt/beegfs -
验证所有节点和目标均处于联机状态并处于正常状态:
beegfs health check如果"Available Capacity"检查警告目标可用空间不足,您可以调整
beegfs-mgmtd.toml文件中定义的"capacity pool"阈值,使其更适合您的环境。