注意

本文档适用于 Ceph 的开发版本。

升级 Ceph

Cephadm 可以安全地将 Ceph 从一个点发行版升级到下一个点发行版。例如,您可以从 v15.2.0(第一个 Octopus 发行版)升级到下一个点发行版 v15.2.1。

自动升级过程遵循 Ceph 最佳实践。例如:

  • 升级顺序从管理器(mgr)开始,然后是监视器(mon),接着是其他守护程序。

  • 只有在 Ceph 指示集群将保持可用之后,才会重新启动每个守护程序。

注意

在升级过程中,Ceph 集群的健康状态很可能会切换到 HEALTH_WARNING

注意

如果集群主机不可用或变得不可用,升级将暂停,直到主机恢复为止。

注意

当**任意**存储池的 PG 自动缩放器模式设置为 on 时,我们建议在升级期间禁用自动缩放器。这样做是为了避免在升级过程中进行 PG 分裂或合并,从而不必要地延迟升级进度。在一个非常大的集群中,这很容易将完成时间增加一天或更长时间,特别是如果升级恰好改变了 PG 自动缩放器行为,例如改变 mon_target_pg_per_osd 的默认值。

ceph osd pool set noautoscale
# Perform the upgrade
ceph osd pool unset noautoscale

以这种方式暂停自动缩放器活动时,每个存储池模式(offonwarn)的现有值预计会保持不变。如果新版本更改了上述目标值,则在升级后取消设置时可能会发生 PG 分裂或合并。

开始升级

注意

注意

可能需要对监视器和管理器进行交错升级才能使用下面的 CephFS 升级功能。

Cephadm 默认将 max_mds 减少到 1。这对于大型 CephFS 部署可能会造成干扰,因为集群无法快速将活动 MDS 减少到 1,而且单个活动 MDS 即使在短时间内也难以处理所有客户端的负载。因此,要在不减少 max_mds 的情况下升级 MDS,必须在启动升级之前将 fail_fs 选项设置为 true(默认值为 false)。

ceph config set mgr mgr/orchestrator/fail_fs true
这将:
  1. 使 CephFS 文件系统失败,使活动 MDS 守护程序处于 up:standby 状态。

  2. 安全地升级 MDS 守护程序。

  3. 使 CephFS 文件系统恢复,使活动 MDS 守护程序的状态从 up:standby 变为 up:active`

在使用 cephadm 升级 Ceph 之前,通过运行以下命令来验证所有主机当前是否在线以及集群是否健康:

ceph -s

要升级到特定版本,请运行以下格式的命令:

ceph orch upgrade start --ceph-version <version>

例如,要升级到 v16.2.6,请运行以下格式的命令:

ceph orch upgrade start --ceph-version 16.2.6

注意

从 v16.2.6 版本开始,不再使用 Docker Hub 注册表,因此如果您使用 Docker,则必须将其指向 quay.io 注册表中的镜像

ceph orch upgrade start --image quay.io/ceph/ceph:v16.2.6

监控升级

通过运行以下命令确定 (1) 升级是否正在进行中以及 (2) 集群正在升级到哪个版本:

ceph orch upgrade status

在 Ceph 升级过程中观看进度条

在升级过程中,进度条在 ceph status 输出中可见。它看起来像这样:

# ceph -s

[...]
  progress:
    Upgrade to docker.io/ceph/ceph:v15.2.1 (00h 20m 12s)
      [=======.....................] (time remaining: 01h 43m 31s)

在升级过程中观看 cephadm 日志

通过运行以下命令观看 cephadm 日志:

ceph -W cephadm

取消升级

您可以随时通过运行以下命令停止升级过程:

ceph orch upgrade stop

升级后操作

如果新版本基于 cephadm,一旦升级完成,用户必须将 cephadm 包(如果用户不使用 cephadm shell,则为 ceph-common 包)更新到与新版本兼容的版本。

潜在问题

错误:ENOENT:未找到模块

如果编排器崩溃,命令 ceph orch upgrade status 会显示消息 Error ENOENT: Module not found

ceph orch upgrade status
Error ENOENT: Module not found

这可能是由 mgr config-key 中的无效 JSON 引起的。请参阅 Redmine tracker Issue #67329ceph-users 邮件列表上的此讨论

UPGRADE_NO_STANDBY_MGR

此警报(UPGRADE_NO_STANDBY_MGR)表示 Ceph 未检测到活动的备用管理器守护程序。为了继续升级,Ceph 需要一个活动的备用管理器守护程序(在这种情况下,您可以将其视为“第二个管理器”)。

您可以通过运行以下命令确保 Cephadm 配置为运行两个(或更多)管理器:

ceph orch apply mgr 2  # or more

您可以通过运行以下命令检查现有管理器守护程序的状态:

ceph orch ps --daemon-type mgr

如果现有管理器守护程序已停止,您可以尝试通过运行以下命令重新启动它:

ceph orch daemon restart <name>

UPGRADE_FAILED_PULL

此警报(UPGRADE_FAILED_PULL)表示 Ceph 无法拉取目标版本的容器镜像。如果您指定了不存在的版本或容器镜像(例如“1.2.3”),或者集群中的一个或多个主机无法访问容器注册表,则可能会发生这种情况。

要取消现有升级并指定不同的目标版本,请运行以下命令:

ceph orch upgrade stop
ceph orch upgrade start --ceph-version <version>

使用自定义容器镜像

对于大多数用户来说,升级只需要指定要升级到的 Ceph 版本即可。在这种情况下,cephadm 通过将 container_image_base 配置选项(默认值:docker.io/ceph/ceph)与 vX.Y.Z 标签结合起来,找到要使用的特定 Ceph 容器镜像。

但如果有需要,可以升级到任意容器镜像。例如,以下命令升级到开发版本:

ceph orch upgrade start --image quay.ceph.io/ceph-ci/ceph:recent-git-branch-name

有关可用容器镜像的更多信息,请参阅 Ceph 容器镜像

交错升级

有些用户可能更喜欢分阶段升级组件,而不是一次性全部升级。从 16.2.11 和 17.2.1 开始,升级命令允许使用参数来限制单个升级命令升级哪些守护程序。选项包括 daemon_typesserviceshostslimitdaemon_types 接受一个逗号分隔的守护程序类型列表,并且只会升级这些类型的守护程序。servicesdaemon_types 互斥,一次只接受一种类型的服务(例如,不能同时提供 OSD 和 RGW 服务),并且只会升级属于这些服务的守护程序。hosts 可以与 daemon_typesservices 结合使用,也可以单独提供。hosts 参数遵循与 守护程序部署 命令行选项相同的格式。limit 接受一个大于 0 的整数,并对 cephadm 将升级的守护程序数量提供数值限制。limit 可以与任何其他参数结合使用。例如,如果您指定在主机 Host1 上升级类型为 osd 的守护程序,并将 limit 设置为 3,cephadm 将在 Host1 上升级(最多)3 个 osd 守护程序。

示例:指定守护程序类型和主机

ceph orch upgrade start --image <image-name> --daemon-types mgr,mon --hosts host1,host2

示例:指定服务并使用 limit

ceph orch upgrade start --image <image-name> --services rgw.example1,rgw.example2 --limit 2

注意

Cephadm 严格执行守护程序升级的顺序,这在交错升级场景中仍然存在。当前的升级顺序是:

  • mgr

  • mon

  • crash

  • osd

  • mds

  • rgw

  • rbd-mirror

  • cephfs-mirror

  • ceph-exporter

  • iscsi

  • nfs

  • nvmeof

  • smb

  • node-exporter

  • prometheus

  • alertmanager

  • grafana

  • loki

  • promtail

如果您指定的参数会导致守护程序乱序升级,升级命令将受阻并指出如果您继续,将错过哪些守护程序。

注意

具有限制参数的升级命令将在开始升级之前验证选项,这可能需要拉取新的容器镜像。如果在提供限制参数时升级启动命令需要一段时间才能返回,请不要感到惊讶。

注意

在交错升级场景中(提供限制参数时),包括 Prometheus 和 node-exporter 在内的监控堆栈守护程序将在管理器守护程序升级后刷新。因此,如果管理器升级花费的时间比预期长,请不要感到惊讶。请注意,监控堆栈守护程序的版本在 Ceph 版本之间可能不会改变,在这种情况下,它们只会重新部署。

从不支持交错升级的版本升级到支持的版本

从已经支持交错升级的版本升级时,过程只需要提供必要的参数。但是,如果您希望从不支持交错升级的版本升级到支持交错升级的版本,则有一个变通方法。它要求首先手动升级管理器守护程序,然后像往常一样传递限制参数。

警告

在尝试此过程之前,请确保您有多个正在运行的 mgr 守护程序。

首先,确定哪个管理器是活动的,哪些是备用的。这可以通过多种方式完成,例如查看 ceph -s 输出。然后,手动升级每个备用 mgr 守护程序:

ceph orch daemon redeploy mgr.example1.abcdef --image <new-image-name>

注意

如果您使用的是非常早期的 cephadm 版本(早期的 Octopus),orch daemon redeploy 命令可能没有 --image 标志。在这种情况下,您必须手动设置管理器容器镜像 ceph config set mgr container_image <new-image-name>,然后重新部署管理器 ceph orch daemon redeploy mgr.example1.abcdef

此时,管理器故障转移应该允许我们拥有运行新版本的活动管理器。

ceph mgr fail

验证活动管理器现在是运行新版本的管理器。要完成管理器升级:

ceph orch upgrade start --image <new-image-name> --daemon-types mgr

您现在应该所有管理器守护程序都已升级到新版本,并且能够为其余升级指定限制参数。

使用自定义镜像更新非 Ceph 镜像服务

要更新非 Ceph 镜像服务,请运行以下格式的命令:

ceph orch update service <service_type> <image>

例如

ceph orch update service prometheus quay.io/prometheus/prometheus:v2.55.1

由 Ceph 基金会为您呈现

Ceph 文档是由非营利性 Ceph 基金会 资助和托管的社区资源。如果您希望支持这项工作和我们的其他努力,请考虑 立即加入