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',
        },

总结

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

原文发布于微信公众号 - 磨磨谈(momotan1987)

原文发表时间:2016-12-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java成长之路

IntelliJ IDEA如何导入Gradle项目

最近学习Gradle,本文来重点介绍一下,如何使用IntelliJ IDEA导入`Gradle项目的一种方法。

61740
来自专栏Hongten

hadoop2-elasticsearch的安装

17320
来自专栏大数据智能实战

ERROR 2002 (HY000): Can't connect to local MySQL server 问题解决

由于网络IP重新进行切换,一下子发现之前的HIVE一直连接不上,一步步发现,原来问题在于MYSQL的问题。 于是重新进入mysql,mysql -u ** -p...

22390
来自专栏北京马哥教育

linux rpm包管理

一、概要 RPM:RPM Package Manager(rpm软件包管理器)的缩写。它能将编译好的程序打包一个文件或有限的几个文件,可用于实现安装、卸...

54670
来自专栏Laoqi's Linux运维专列

shell项目-分发系统-expect

36480
来自专栏IT笔记

SpringBoot开发案例之配置静态资源文件路径

SpringBoot本质上是为微服务而生的,以JAR的形式启动运行,但是有时候静态资源的访问是必不可少的,比如:image、js、css 等资源的访问。

459100
来自专栏用户2442861的专栏

MyBatis学习总结(三)——优化MyBatis配置文件中的配置

  之前,我们是直接将数据库的连接配置信息写在了MyBatis的conf.xml文件中,如下:

11710
来自专栏大魏分享(微信公众号:david-share)

干货分享:基于JBoss的七个Java应用场景

声明 本文主要是针对EAP7的相关实验的记录,本文仅供参考。仅代表作者的个人观点。 在实验过程中,笔者得到了舒服力和Kylin的大力帮助,很多代码的revie...

37150
来自专栏JackieZheng

Spring Boot系列——如何集成Log4j2

上篇《Spring Boot系列——日志配置》介绍了Spring Boot如何进行日志配置,日志系统用的是Spring Boot默认的LogBack。

17420
来自专栏Python

linux每日命令(29):chown命令

chown将指定文件的拥有者改为指定的用户或组,用户可以是用户名或者用户ID;组可以是组名或者组ID;文件是以空格分开的要改变权限的文件列表,支持通配符。系统管...

23040

扫码关注云+社区

领取腾讯云代金券