• 如何替换Ceph的Journal


    很多人会提出这样的问题:

    • 能不能够将 Ceph journal 分区从一个磁盘替换到另一个磁盘?
    • 怎样替换 Ceph 的 journal 分区?

    有两种方法来修改Ceph的journal:

    • 创建一个journal分区,在上面创建一个新的journal
    • 转移已经存在的journal分区到新的分区上,这个适合整盘替换

    Ceph 的journal是基于事务的日志,所以正确的下刷journal数据,然后重新创建journal并不会引起数据丢失,因为在下刷journal的数据的时候,osd是停止的,一旦数据下刷后,这个journal是不会再有新的脏数据进来的

    第一种方法

    在开始处理前,最开始要设置OSD状态为noout

    [root@lab8106 ~]# ceph osd set noout
    set noout
    

    停止需要替换journal的osd(这里是osd.1)

    [root@lab8106 ~]# systemctl stop ceph-osd@1
    

    我的版本是jewel的,如果是hammer版本,就使用 /etc/init.d/ceph stop osd.1

    下刷journal到osd,使用 -i 指定需要替换journal的 osd的编号

    [root@lab8106 ~]# ceph-osd -i 1 --flush-journal
    SG_IO: bad/missing sense data, sb[]:  70 00 05 00 00 00 00 0a 00 00 00 00 20 00 01 cf 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    SG_IO: bad/missing sense data, sb[]:  70 00 05 00 00 00 00 0a 00 00 00 00 20 00 01 cf 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    2016-07-26 22:47:20.185292 7fc54a6c3800 -1 flushed journal /var/lib/ceph/osd/ceph-1/journal for object store /var/lib/ceph/osd/ceph-1
    

    创建一个新的journal

    删除原来的journal

    [root@lab8106 ~]# ll /var/lib/ceph/osd/ceph-1/journal
    lrwxrwxrwx 1 ceph ceph 58 Jul 25 09:25 /var/lib/ceph/osd/ceph-1/journal -> /dev/disk/by-partuuid/872f8b40-a750-4be3-9150-033b990553f7
    [root@lab8106 ~]# rm -rf /var/lib/ceph/osd/ceph-1/journal
    

    准备一个新的分区

    我的环境准备使用/dev/sdd1,分区大小为10G,这个注意磁盘大小比参数设置的要大一点即可

    [root@lab8106 ~]# ls -l /dev/disk/by-partuuid/
    total 0
    lrwxrwxrwx 1 root root 10 Jul 25 14:25 4766ce93-a476-4e97-9aac-894d461b367e -> ../../sdb2
    lrwxrwxrwx 1 root root 10 Jul 26 22:51 5bb48687-6be6-4aef-82f6-5af822c3fad8 -> ../../sdd1
    lrwxrwxrwx 1 root root 10 Jul 26 22:47 872f8b40-a750-4be3-9150-033b990553f7 -> ../../sdc2
    

    我的新的journal的uuid的路径为 /dev/disk/by-partuuid/5bb48687-6be6-4aef-82f6-5af822c3fad8

    将这个磁盘的分区链接到原始路径

    [root@lab8106 ~]# ln -s /dev/disk/by-partuuid/5bb48687-6be6-4aef-82f6-5af822c3fad8 /var/lib/ceph/osd/ceph-1/journal
    [root@lab8106 ~]# chown ceph:ceph /var/lib/ceph/osd/ceph-1/journal
    [root@lab8106 ~]# echo 5bb48687-6be6-4aef-82f6-5af822c3fad8 > /var/lib/ceph/osd/ceph-1/journal_uuid
    

    创建journal

    [root@lab8106 ~]# ceph-osd -i 1 --mkjournal
    

    启动进程

    [root@lab8106 ~]# systemctl restart ceph-osd@1
    

    去除 noout 的标记

    [root@lab8106 ~]# ceph osd unset noout
    

    启动后检查集群的状态

    第二种方法

    这个属于备份和转移分区表的方法
    首先进行上面方法的停进程,下刷journal

    备份需要替换journal的分区表

    [root@lab8106 ~]# sgdisk --backup=/tmp/backup_journal_sdd /dev/sdd
    

    还原分区表

    [root@lab8106 ~]# sgdisk --load-backup=/tmp/backup_journal_sde /dev/sde
    [root@lab8106 ~]# parted -s /dev/sde print
    

    新的journal磁盘现在跟老的journal的磁盘的分区表一样的了。这意味着新的分区的UUID和老的相同的。如果选择的是这种备份还原分布的方法,那么journal的那个软连接是不需要进行修改的,因为两个磁盘的uuid是一样的,所以需要注意将老的磁盘拔掉或者清理掉分区,以免冲突

    在做完这个以后同样跟上面的方法一样需要重建journal

    创建journal

    [root@lab8106 ~]# chown ceph:ceph /var/lib/ceph/osd/ceph-1/journal
    [root@lab8106 ~]# ceph-osd -i 1 --mkjournal
    

    启动进程

    [root@lab8106 ~]# systemctl restart ceph-osd@1
    

    去除 noout 的标记

    [root@lab8106 ~]# ceph osd unset noout
    

    变更记录

    Why Who When
    创建 武汉-运维-磨渣 2016-07-27
  • 相关阅读:
    Python 6 socket编程
    Python 5 面向对象进阶
    Python 4 面向对象
    Python 3 常用模块
    Python基础 2
    Python基础 1
    Django之会议室预预订
    vscode 修改快捷键 (回到上一处光标位置,下一处光标位置)
    C 库函数
    C 库函数
  • 原文地址:https://www.cnblogs.com/zphj1987/p/13575361.html
Copyright © 2020-2023  润新知