注意
本文档适用于 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
以这种方式暂停自动缩放器活动时,每个存储池模式(off、on 或 warn)的现有值预计会保持不变。如果新版本更改了上述目标值,则在升级后取消设置时可能会发生 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
- 这将:
使 CephFS 文件系统失败,使活动 MDS 守护程序处于
up:standby状态。安全地升级 MDS 守护程序。
使 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 #67329 和 ceph-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_types、services、hosts 和 limit。daemon_types 接受一个逗号分隔的守护程序类型列表,并且只会升级这些类型的守护程序。services 与 daemon_types 互斥,一次只接受一种类型的服务(例如,不能同时提供 OSD 和 RGW 服务),并且只会升级属于这些服务的守护程序。hosts 可以与 daemon_types 或 services 结合使用,也可以单独提供。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 严格执行守护程序升级的顺序,这在交错升级场景中仍然存在。当前的升级顺序是:
mgrmoncrashosdmdsrgwrbd-mirrorcephfs-mirrorceph-exporteriscsinfsnvmeofsmbnode-exporterprometheusalertmanagergrafanalokipromtail
如果您指定的参数会导致守护程序乱序升级,升级命令将受阻并指出如果您继续,将错过哪些守护程序。
注意
具有限制参数的升级命令将在开始升级之前验证选项,这可能需要拉取新的容器镜像。如果在提供限制参数时升级启动命令需要一段时间才能返回,请不要感到惊讶。
注意
在交错升级场景中(提供限制参数时),包括 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