ceph 升级(hammer to luminous)

前言

升级ceph hammer 0.94.10到luminous 12.2.x,分两次升级,第一次hammer to jewel ,第二次jewel to luminous,升级中不中断业务并保证升级后ceph pool中的块设备不发生变化(主要是校验文件哈希值是否发生变化)
系统:ubuntu 16.04

准备

先在pool中创建块设备,把块设备map到主机上,创建文件系统并挂载分区,使用debootstrap往分区里生成一个操作系统

debootstrap --arch=amd64 xenial /ubuntu_xenial_1604 http://archive.ubuntu.com/ubuntu/

这样一个小型的ubuntu系统就有了,chroot进去axel下载一个linux kernel压缩包,解压之后把内核编译一下,这样整个分区里面大约有8万8千多个文件,把这些文件作为样本,使用MD5把整个目录所有文件哈希值收集排序之后写入文件。

upgrade ceph from hammer to jewel

以下操作没有节点之间的顺序,服务一般先升级ceph-mon再升级ceph-osd

  • 设置noout flagceph osd set noout
  • 添加ceph源sed -i 's/hammer/jewel/' /etc/apt/sources.list.d/ceph.list
  • 升级软件apt update && apt install ceph
  • 关闭服务killall ceph-mon && killall ceph-osd
    ceph jewel运行服务不再使用root身份,以后版本服务都以ceph用户运行
  • 修改文件权限
    chown ceph: -R /var/lib/ceph/
    chown ceph: -R /var/log/ceph/
    chown ceph: /dev/sdx*
  • 启动服务

    systemctl start ceph-mon@<MON-ID>
    systemctl start ceph-osd@<OSD-ID>
  • 关闭noout flag ceph osd unset noout

jewel 升级后续操作

这样ceph hammer to jewel差不多就结束了,ceph -s可以发现一些警告

  • legacy tunables警告
    解决:ceph osd crush tunables hammer

    Do not set tunable to optimal because then krbd will not work. Set it to hammer it you want to use krbd

  • require jewel osds警告
    解决:ceph osd set require_jewel_osds
  • sortbitwise flag警告
    解决:ceph osd set sortbitwise

upgrade ceph from jewel to luminous

和上面升级顺序有点区别,这次升级需要先把所有节点上的ceph-mon程序先升级重启服务,不然osd会无法启动,日志出现monmap REQUIRE_LUMINOUS is NOT set; must upgrade all monitors to Luminous or later before Luminous OSDs will boot

  • nooutflag 设置上ceph osd set noout
  • Luminous版默认不可以删除pool,如果需要的话在ceph.conf文件里添加
    mon allow pool delete = true
  • 修改软件源 sed -i 's/jewel/luminous/' /etc/apt/sources.list.d/ceph.list
  • 升级软件 apt update && apt install ceph
  • 重启服务

    systemctl restart ceph-mon@<MON-ID>
    systemctl restart ceph-osd@<OSD-ID>
  • 取消noout flag ceph osd unset noout

  • 哈希效验

luminous升级后续操作

  • 解决一些警告
    ceph osd require-osd-release luminous
    ceph osd pool application enable <POOL-NAME> rbd
    ceph osd set-require-min-compat-client jewel
    ceph osd crush tunables optimal

可以不修改tunables,修改tunables后集群会大规模rebalance

一定要注意内核版本对tunables值的支持 参考:http://docs.ceph.com/docs/master/rados/operations/crush-map/#tunables

  • 添加osd class信息,luminous在增加osd时会自动识别osd class并归类,从旧版本升级并没有进行归类,可以手动对osd进行归类

    ceph osd crush set-device-class ssd osd.2 osd.3
    ceph osd crush set-device-class hdd osd.0 osd.1
    ceph osd crush set-device-class nvme osd.4 osd.5
  • 配置ceph-mgr
    ceph-mgr 设计上采用主备模式,可以在两台上部署实现一主一备

    ceph auth get-or-create mgr.<MGR-ID> mon 'allow profile mgr' osd 'allow *' mds 'allow *'
    ceph auth get mgr.<MGR-ID> > /var/lib/ceph/mgr/ceph-<MGR-ID>/keyring
    systemctl start ceph-mgr@<MGR-ID>
  • 哈希效验

总结

ceph 升级比想象中简单,过程很顺利,不过如果出现问题就比较恶心了,除了rbd mirror之外就没想到其他什么可靠的备份方案,风险较大,属于背水一战式升级:stuck_out_tongue_closed_eyes:

参考

Ceph Hammer to Jewel: https://pve.proxmox.com/wiki/Ceph_Hammer_to_Jewel
Ceph Jewel to Luminous: https://pve.proxmox.com/wiki/Ceph_Jewel_to_Luminous

文章作者: j0ck1e
文章链接: https://blog.j0ck1e.com/2018/09/14/hammer-to-luminous/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 j0ck1e's blog