简介
ceph 升级有多种方法,apt 软件包更新、cephadm 升级等,本次实践是根据 pve 官网的 Ceph Pacific to Quincy 升级指南采用的是 apt 软件包更新的方式升级。如果有其他更好用的升级方法欢迎交流。
重要版本内容
- Filestore OSDs 被弃用。在继续之前销毁你的 Filestore OSDs 并且一个个的重建他们到 Bluestore OSDs。
- Quincy 已放弃对 LevelDB 的支持。Bluestore OSD 应始终使用 RocksDB,但在 Luminous (v 12) 之前设置的旧监视器仍然可以使用 LevelDB。通过在监控主机上运行
head /var/lib/ceph/mon/*/kv_backend
如下命令验证它。结果应该是“rocksdb”。如果不是,则销毁并重新创建该监视器。 - device_health_metrics pool 被重命名为 . Mgr. 它现在用作所有 ceph-mgr 模块的公共存储。升级到 Quincy 后,现有集群上的 device_health_metrics 池将重命名为 . Mgr。
- 现在如果在集群升级后未将 require-osd-release 标志设置为适当的版本,则会报告运行状况警告。
更多有关信息,请参阅 Release Notes
前提
我们假设所有的 node 版本为最新的 Proxmox VE 7.2(or higher),ceph 版本为 Pacific (16.2.9-pve1 or higher),如果不是请参阅Ceph Octopus to Pacific升级。
- 阅读 Known Issues 部分避免遇到已知问题。例如执行本指南中未描述的步骤时。
虽然理论上可以直接从 Ceph Octopus 升级到 Quincy,但我们强烈建议首先升级到 Pacific
集群必须健康且工作!
开始更新~
启用 msgrv2 协议并更新 Ceph 配置
如果您在升级到 Nautilus、Octopus 或 Pacific 时尚未执行此操作,则必须启用新的 v2 网络协议。输入以下命令:
ceph mon enable-msgr2
这将指示所有绑定到旧版 v1 协议的旧默认端口 6789 的监视器也绑定到新的 3300 v2 协议端口。要查看所有监视器是否已更新,请运行
ceph mon dump
并验证每个监视器是否都列出了 v2: 和 v1: 地址。
每个 Ceph 集群节点上的准备工作
将当前 Ceph repo 从 Pacific 更改为 Quincy。
sed -i 's/pacific/quincy/' /etc/apt/sources.list.d/ceph.list
检查:/etc/apt/sources.list.d/ceph.list 应该像下面一样
#download.proxmox.com应该已经被替换成国内的源
deb [http://download.proxmox.com/debian/ceph-quincy](http://download.proxmox.com/debian/ceph-quincy) bullseye main
设置“noout”标志
在升级期间设置 noout 标志(可选,但是推荐)
ceph osd set noout
或者通过 OSD 选项卡中的 GUI(管理全局标志)。
在每个 Ceph 集群节点上升级
用如下命令升级所有节点,或者通过 GUI 安装最新更新。它将把节点上的 Ceph 升级到 Quincy。
apt update && apt full-upgrade
更新后,您的设置仍将运行旧的 Pacific 二进制文件。
重启 Monitor Daemon
您可以使用 Web 界面或命令行来重新启动 ceph 服务。
在升级完所有节点之后,你必须在每个节点上重启 monitor 服务
systemctl restart ceph-mon.target
启动所有 monitors 后,验证 monitor 是否更新完成。在 mon map 中查找 Quincy 字符串。
ceph mon dump | grep min_mon_release
更新完成后应当报告:
min_mon_release 17 (quincy)
如果没有,这意味着一个或多多个的 monitor 尚未升级成功和重新启动,并且/或者 quorum 并没有包含所有 monitor。
重新启动所有节点上的管理器守护进程
如果管理器没有被 monitor 自动重新启动,请立即在所有节点上重新启动它们。
systemctl restart ceph-mgr.target
通过 ceph -s 验证 ceph-mgr 守护进程是否正在运行:
ceph -s
#...
# services:
# mon: 3 daemons, quorum foo,bar,baz
# mgr: foo(active), standbys: bar, baz
#...
在所有节点上重新启动 OSD 守护进程
重新启动所有 OSD。一次仅在一个节点上重新启动 OSD,以避免数据冗余丢失。要重新启动节点上的所有 OSD,请运行以下命令
systemctl restart ceph-osd.target
每次重启后等待并定期检查集群状态:
ceph status
它应该处于 HEALTH_OK 或
HEALTH_WARN
noout flag(s) set
所有 OSD 以最新版本运行后,可能会出现以下警告:
all OSDs are running quincy or later but require_osd_release < quincy
禁止 pre-QuincyOSD 并启用 Quincy-only 功能
ceph osd require-osd-release quincy
升级所有的 CephFS MDS Daemons
对于每个 CephFS 文件系统
- 禁用 standby_replay
- 将 Rank 数量减少到 1(如果您打算稍后恢复,请先记下 MDS 守护进程的原始数量):
- 通过定期检查 Ceph 的状态,等待集群停用任何非零等级:
- 使用以下命令使相应主机上的所有备用 MDS 守护程序脱机:
- 确认只有一个 MDS 在线并且您的 FS 的等级为 0:
- 通过重新启动守护程序来升级最后剩余的 MDS 守护程序:
- 重新启动所有脱机的备用 MDS 守护进程
- 恢复卷的 max_mds 的原始值
ceph fs set <fs_name> allow_standby_replay false
ceph status
ceph fs get <fs_name> | grep max_mds
ceph fs set <fs_name> max_mds 1
ceph status
#The number of active MDS should go down to the number of file systems you have
#Alternatively, check in the CephFS panel in the GUI that each Ceph filesystem has only one active MDS
systemctl stop ceph-mds.target
ceph status
systemctl restart ceph-mds.target
systemctl start ceph-mds.target
ceph fs set <fs_name> max_mds <original_max_mds>
取消设置“noout”标志
升级过程完成后,不要忘记取消设置 noout 标志
ceph osd unset noout
或者通过 OSD 选项卡中的 GUI(管理全局标志)。
注意
重新启动 MGR 时,可以忽略包含“缺少 NOTIFY_TYPES 成员”的日志行