.. _ceph_os_upgrade_ubuntu_22.04: ================================== Ceph底层Ubuntu操作系统升级到22.04 ================================== 为提升软硬件性能,我尝试将 :ref:`priv_cloud_infra` 的虚拟机数据层,也就是运行Ceph集群的 :ref:`kvm` 虚拟机操作系统 :ref:`upgrade_ubuntu_20.04_to_22.04` : 升级方式 ========== 理想的ceph升级方式建议采用 Ceph 官方文档 `UPGRADING CEPH `_ 将整个升级过程控制在Ceph集群软件,而不是以操作系统发行版进行升级。 .. warning:: 我的个人测试环境没有严格按照标准升级方案,所以本文记录仅供个人参考,切勿用于生产环境。 **数据存在丢失风险!!!** 我为了偷懒,直接采用发行版升级,同时携带ceph升级,但是整个升级采用: - 单个节点完整完成操作系统升级以及ceph升级,然后再进行下一个节点升级 - 如果遇到不可测宕机,则销毁虚拟机重建故障节点 - 升级过程前后观察 ``ceph status`` 以及监控,并在 :ref:`ceph_rbd_libvirt` 虚拟机内部发起操作系统升级(并发10+虚拟机),作为Ceph存储压力验证 .. note:: 经过验证,Ubuntu发行版提供的 ``20.04 LTS`` 升级到 ``22.04 LTS`` 可以完美完成Ceph的大版本升级15.2.16到17.2.0,整个过程无需停止Ceph客户端存储读写,未发现数据丢失和错误。 至少以我个人小规模数据验证,Ubuntu LTS跨版本升级是成功的,对Ceph的跨版本兼容有保障。 以下仅供参考 升级OS ========== .. _libvirt_lvm_grow_vm_disk: libvirt LVM卷扩容VM磁盘 ------------------------- 升级前需要确保操作系统根目录有足够空间,我的第一次升级OS版本就因为根目录打爆导致部分(内核)软件包安装失败。通过 :ref:`libvirt_lvm_pool_resize_vm_disk` 解决VM磁盘空间才最终完成升级。 以下以 ``z-b-data-3`` 虚拟机根磁盘扩容为例: - 在物理主机 ``zcloud`` 上完成以下操作扩容libvirt的对应虚拟机LVM卷: .. literalinclude:: ceph_os_upgrade_ubuntu_22.04/libvirt_resize_lvm :language: bash :caption: 在物理主机上对libvirt对应虚拟机LVM卷扩容 - 登录 ``z-b-data-3`` 虚拟机内部: .. literalinclude:: ceph_os_upgrade_ubuntu_22.04/vm_growpart_xfs_growfs :language: bash :caption: 在虚拟机内部使用growpart和xfs_growfs扩展根目录文件系统 升级操作 ----------- - 升级前检查ceph版本:: # ceph version ceph version 15.2.16 (d46a73d6d0a67a79558054a3a5a72cb561724974) octopus (stable) - 采用 :ref:`upgrade_ubuntu_20.04_to_22.04` 相同方法升级操作系统: .. literalinclude:: ceph_os_upgrade_ubuntu_22.04/ubuntu_release_upgrade :language: bash :caption: 执行ubuntu release upgrade 我在升级Ceph集群的一个工作节点操作系统同时对运行在Ceph存储上的KVM虚拟机(大约10+ VM)同时升级操作系统,目测对Ceph集群的IO操作大约达到100MB/s流量,IOPS约上千,整个过程非常平滑,没有出现过hang机现象。 .. figure:: ../../../_static/ceph/deploy/install_ceph_manual/ceph_upgrade_os.jpg :scale: 30 升级后检查 -------------- - 升级后服务器上的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`` 就不会有告警了