• Ceph数据盘怎样实现自动挂载


    前言

    在Centos7 下,现在采用了 systemctl来控制服务,这个刚开始用起来可能不太习惯,不过这个服务比之前的服务控制要强大的多,可以做更多的控制,本节将来介绍下关于 Ceph的 osd 磁盘挂载的问题

    很多人部署以后,发现在Centos7下用Jewel的时候没有去写fstab也没有写配置文件,重启服务器一样能够挂载起来了,关于这个有另外一篇文章:「ceph在centos7下一个不容易发现的改变

    还有一些人发现自己的却启动不起来,需要写配置文件或者fstab

    本篇就是来解决这个疑惑的,以及在不改变原配置方法的情况下如何加入这种自启动

    实践过程

    首先来第一种部署的方法

    ceph-deploy osd prepare lab8106:/dev/sde
    ceph-deploy osd activate lab8106:/dev/sde1
    

    这个方法会把/dev/sde自动分成两个分区,一个分区给journal使用,一个分区给osd的数据使用,这种方法部署以后,是可以自动起来的,启动的挂载过程就是这个服务

    systemctl start ceph-disk@/dev/sde1
    

    再来看第二种方法

    [root@lab8106 ceph]# parted -s /dev/sdf mklabel gpt
    [root@lab8106 ceph]# parted -s /dev/sdf mkpart primary 1 100%
    [root@lab8106 ceph]# parted -s /dev/sdf print
    Model: SEAGATE ST3300657SS (scsi)
    Disk /dev/sdf: 300GB
    Sector size (logical/physical): 512B/512B
    Partition Table: gpt
    Disk Flags: 
    
    Number  Start   End    Size   File system  Name     Flags
     1      1049kB  300GB  300GB               primary
    

    提前做好了分区的工作

    ceph-deploy osd prepare lab8106:/dev/sdf1
    ceph-deploy osd activate lab8106:/dev/sdf1
    

    可以看到prepare的时候是对着分区去做的
    这种方法journal是以文件的方式在数据目录生成的,可以看到两个目录的 df 看到的就是不一样的,多的那个是 journal 文件的大小

    /dev/sde1       279G   34M  279G   1% /var/lib/ceph/osd/ceph-6
    /dev/sdf1       280G  1.1G  279G   1% /var/lib/ceph/osd/ceph-7
    

    重启服务器
    可以看到上面的sde1挂载了而自己分区的sdf1没有挂载

    我们去手动执行下:

    [root@lab8106 ~]#  systemctl start ceph-disk@/dev/sdf1
    Job for ceph-disk@-dev-sdf1.service failed because the control process exited with error code. See "systemctl status ceph-disk@-dev-sdf1.service" and "journalctl -xe" for details.
    

    看下报错

    [root@lab8106 ~]# systemctl status ceph-disk@-dev-sdf1.service
    ● ceph-disk@-dev-sdf1.service - Ceph disk activation: /dev/sdf1
       Loaded: loaded (/usr/lib/systemd/system/ceph-disk@.service; static; vendor preset: disabled)
       Active: failed (Result: exit-code) since Thu 2016-12-22 10:15:52 CST; 46s ago
      Process: 16334 ExecStart=/bin/sh -c flock /var/lock/ceph-disk /usr/sbin/ceph-disk --verbose --log-stdout trigger --sync %f (code=exited, status=1/FAILURE)
     Main PID: 16334 (code=exited, status=1/FAILURE)
    
    Dec 22 10:15:52 lab8106 sh[16334]: main(sys.argv[1:])
    Dec 22 10:15:52 lab8106 sh[16334]: File "/usr/lib/python2.7/site-packages/ceph_disk/main.py", line 4962, in main
    Dec 22 10:15:52 lab8106 sh[16334]: args.func(args)
    Dec 22 10:15:52 lab8106 sh[16334]: File "/usr/lib/python2.7/site-packages/ceph_disk/main.py", line 4394, in main_trigger
    Dec 22 10:15:52 lab8106 sh[16334]: raise Error('unrecognized partition type %s' % parttype)
    Dec 22 10:15:52 lab8106 sh[16334]: ceph_disk.main.Error: Error: unrecognized partition type 0fc63daf-8483-4772-8e79-3d69d8477de4
    Dec 22 10:15:52 lab8106 systemd[1]: ceph-disk@-dev-sdf1.service: main process exited, code=exited, status=1/FAILURE
    Dec 22 10:15:52 lab8106 systemd[1]: Failed to start Ceph disk activation: /dev/sdf1.
    Dec 22 10:15:52 lab8106 systemd[1]: Unit ceph-disk@-dev-sdf1.service entered failed state.
    Dec 22 10:15:52 lab8106 systemd[1]: ceph-disk@-dev-sdf1.service failed.
    

    关键在这句

    raise Error('unrecognized partition type %s' % parttype)

    检查分区情况,可以看到确实跟另外一种方法部署的OSD情况不同

    [root@lab8106 ceph]# ceph-disk list
    ···
    /dev/sde2 ceph journal, for /dev/sde1
     /dev/sde1 ceph data, active, cluster ceph, osd.6, journal /dev/sde2
    dev/sdf :
     /dev/sdf1 other, xfs, mounted on /var/lib/ceph/osd/ceph-7
    

    这里要如何处理,才能实现自动挂载,方法是有的

    这个地方需要做一步这个操作(注意下面的1:后面是写死的字符串固定的值)

    /usr/sbin/sgdisk --typecode=1:4fbd7e29-9d25-41b8-afd0-062c0ceff05d -- /dev/sdi
    
    /dev/sdi :
     /dev/sdi1 ceph data, active, cluster ceph, osd.7
    

    我们来验证一下:

    [root@lab8106 ceph]# systemctl stop ceph-osd@7
    [root@lab8106 ceph]# umount /dev/sdi1 
    [root@lab8106 ceph]# systemctl start ceph-disk@/dev/sdi1
    [root@lab8106 ceph]# df -h|grep sdi
    /dev/sdi1       280G  1.1G  279G   1% /var/lib/ceph/osd/ceph-7
    

    可以用服务挂载了
    这个是代码里面写死的判断值,来判断osd是ready的了

    /usr/lib/python2.7/site-packages/ceph_disk/main.py
    
    'osd': {
                'ready': '4fbd7e29-9d25-41b8-afd0-062c0ceff05d',
                'tobe': '89c57f98-2fe5-4dc0-89c1-f3ad0ceff2be',
            },
    

    总结

    通过本篇的介绍,应该能够清楚什么情况下不自动挂载,什么情况下自动挂载,怎么去实现自动挂载,虽然上面只用了一调命令就实现了,不过我找了很久才定位到这个命令的,当然自己也掌握了这个知识点,公众号已经可以留言了,欢迎留言

  • 相关阅读:
    简单二分求解(木板补漏问题)
    switch语句和for循环
    JAVA运算符和优先级
    JAVA数据类型
    JAVA基础
    JAVA开发环境
    linux配置IP地址
    LVM逻辑分区
    用户和用户组
    第一天
  • 原文地址:https://www.cnblogs.com/zphj1987/p/13575397.html
Copyright © 2020-2023  润新知