Ceph底层Ubuntu操作系统升级到22.04¶
为提升软硬件性能,我尝试将 私有云架构 的虚拟机数据层,也就是运行Ceph集群的 KVM Atlas 虚拟机操作系统 升级Ubuntu 22.04 LTS到22.04 LTS :
升级方式¶
理想的ceph升级方式建议采用 Ceph 官方文档 UPGRADING CEPH 将整个升级过程控制在Ceph集群软件,而不是以操作系统发行版进行升级。
警告
我的个人测试环境没有严格按照标准升级方案,所以本文记录仅供个人参考,切勿用于生产环境。 数据存在丢失风险!!!
我为了偷懒,直接采用发行版升级,同时携带ceph升级,但是整个升级采用:
单个节点完整完成操作系统升级以及ceph升级,然后再进行下一个节点升级
如果遇到不可测宕机,则销毁虚拟机重建故障节点
升级过程前后观察
ceph status
以及监控,并在 Libvirt集成Ceph RBD 虚拟机内部发起操作系统升级(并发10+虚拟机),作为Ceph存储压力验证
备注
经过验证,Ubuntu发行版提供的 20.04 LTS
升级到 22.04 LTS
可以完美完成Ceph的大版本升级15.2.16到17.2.0,整个过程无需停止Ceph客户端存储读写,未发现数据丢失和错误。
至少以我个人小规模数据验证,Ubuntu LTS跨版本升级是成功的,对Ceph的跨版本兼容有保障。
以下仅供参考
升级OS¶
libvirt LVM卷扩容VM磁盘¶
升级前需要确保操作系统根目录有足够空间,我的第一次升级OS版本就因为根目录打爆导致部分(内核)软件包安装失败。通过 在libvirt LVM卷管理存储池中扩展虚拟机磁盘 解决VM磁盘空间才最终完成升级。
以下以 z-b-data-3
虚拟机根磁盘扩容为例:
在物理主机
zcloud
上完成以下操作扩容libvirt的对应虚拟机LVM卷:
lvresize -L 16G /dev/vg-libvirt/z-b-data-3
virsh blockresize z-b-data-3 --path /dev/vg-libvirt/z-b-data-3 --size 16G
登录
z-b-data-3
虚拟机内部:
#安装growpart
apt install cloud-guest-utils
#扩展分区2
growpart /dev/vda 2
#扩展XFS根分区
xfs_growfs /
升级操作¶
升级前检查ceph版本:
# ceph version ceph version 15.2.16 (d46a73d6d0a67a79558054a3a5a72cb561724974) octopus (stable)
采用 升级Ubuntu 22.04 LTS到22.04 LTS 相同方法升级操作系统:
sudo apt update && sudo apt upgrade -y
sudo apt autoremove -y
sudo reboot
sudo apt install update-manager-core
sudo do-release-upgrade -d
我在升级Ceph集群的一个工作节点操作系统同时对运行在Ceph存储上的KVM虚拟机(大约10+ VM)同时升级操作系统,目测对Ceph集群的IO操作大约达到100MB/s流量,IOPS约上千,整个过程非常平滑,没有出现过hang机现象。
升级后检查¶
升级后服务器上的ceph版本从 15.2.16 升级到 17.2.0
观察Ceph集群状态,升级过程中可以看到只有在升级节点重启接管出现过集群unhealth,重启完成后Ceph集群回复到health状态:
ceph status
显示运行正常:
cluster:
id: 0e6c8b6f-0d32-4cdb-a45d-85f8c7997c17
health: HEALTH_OK
services:
mon: 3 daemons, quorum z-b-data-1,z-b-data-2,z-b-data-3 (age 7m)
mgr: z-b-data-1(active, since 8d)
osd: 3 osds: 3 up (since 7m), 3 in (since 5w)
data:
pools: 2 pools, 33 pgs
objects: 30.87k objects, 120 GiB
usage: 361 GiB used, 1.0 TiB / 1.4 TiB avail
pgs: 33 active+clean
io:
client: 6.7 KiB/s rd, 247 KiB/s wr, 0 op/s rd, 15 op/s wr
但是,升级完成后,虽然整体上节点工作正常,但是存在WARNING
OSD_UPGRADE_FINISHED: all OSDs are running quincy or later but require_osd_release < quincy
解决 require_osd_release < quincy
问题¶
quincy
是Ceph最新release版本,参考 upgraded to 1.9.0 and ceph 17.1 and require_osd_release not updated automatically #10084
当Ceph的OSD完成升级后,需要将 osd 版本的最小要求设置成新版本 quincy
,所以执行以下命令进行修正:
ceph osd require-osd-release quincy
然后再观察 ceph status
就不会有告警了