问题

通过对我们的启动流程看了下,目前是穿到一个脚本里面的,然后这个脚本是用无限循环的方式去执行一些事情,这个地方不符合松耦合的设计,一个模块做一个事情,两个并不相关的功能不要嵌入另一个脚本,否则出现问题的时候,不好更改不好优化

解决方式

首先分析ceph自身的启动方式

ceph的启动方式是通过去enable的一个service的方式这个enable会传入参数,osd的id和osd的fsid,这两个都是集群的定值,也就是每个osd的这块都是各自独立的,所以就是一个总控脚本去通过调用参数的方式进行服务的启动和挂载

那么最佳的处理方式应该也是近似处理,我们做结合启动的时候,先禁用相关的服务,这个后面脚本里面内部会处理,我们先写出来怎么禁用ceph的挂载和启动

systemctl stop ceph-osd@$osd_id
systemctl disable ceph-osd@$osd_id
systemctl disable ceph-volume@lvm-$osd_id-$osd_dev
umount /var/lib/ceph/osd/ceph-0/

上面一个是osd id 一个是fsid

fsid可以从ceph osd dump|grep osdid获得

初始部署成功后,机器的上面的磁盘也会打上上面的相关的标签

启动禁止了,开始写我们的启动服务

我们看下原生的服务

[root@lab101 ~]# cat /usr/lib/systemd/system/ceph-volume@.service
[Unit]
Description=Ceph Volume activation: %i
After=local-fs.target
Wants=local-fs.target [Service]
Type=oneshot
KillMode=none
Environment=CEPH_VOLUME_TIMEOUT=10000
ExecStart=/bin/sh -c 'timeout $CEPH_VOLUME_TIMEOUT /usr/sbin/ceph-volume-systemd %i'
TimeoutSec=0 [Install]
WantedBy=multi-user.target

我们写我们自己的服务

[root@lab101 ~]# cat /usr/lib/systemd/system/ceph-volume-flashcache@.service
[Unit]
Description=Ceph flash cache Volume activation: %i
After=local-fs.target
Wants=local-fs.target [Service]
Type=oneshot
KillMode=none
ExecStart=/bin/sh -c 'timeout 10000 /usr/lib/ceph/ceph-load-flashcache.sh %i'
TimeoutSec=0 [Install]
WantedBy=multi-user.target

这是总控服务,我们传参进去,用加载脚本处理

[root@lab101 ~]# cat  /usr/lib/ceph/ceph-load-flashcache.sh
#! /usr/bin/sh startflashcache(){
ssd_dev=`echo $1|awk -F '--' '{print $1}'`
osd_id=`echo $1|awk -F '--' '{print $2}'`
osd_dev=`echo $1|awk -F '--' '{print $3}'` echo $ssd_dev
echo "$osd_id"
echo "$osd_dev" # 先停掉osd
systemctl disable ceph-volume@lvm-0-bcdb55b0-e95b-4833-8362-18f633782632
systemctl stop ceph-osd@$osd_id
systemctl disable ceph-osd@$osd_id
systemctl disable ceph-volume@lvm-$osd_id-$osd_dev
# umount osd
umount /var/lib/ceph/osd/ceph-$osd_id #remove 原来的虚拟设备 我们确定arond的
if [ ! -f "/dev/mapper/$osd_id" ]; then
dmsetup remove osd$osd_id
echo "remove old flashcache /dev/mapper/$osd_id"
fi # if osd exit
ssd_path="/dev/disk/by-partuuid/$ssd_dev"
osd_lv_path=`lvdisplay |grep $osd_dev |grep "LV Path"|awk '{print $3}'` #if path exist
ls -al $ssd_path
ls -al $osd_lv_path #创建 around flashcache
flashcache_create -p around osd$osd_id $ssd_path $osd_lv_path ls -al /dev/mapper/osd$osd_id
flashcache_dev_dm=/dev/`ls -al /dev/mapper/osd0|awk '{print $11}'|cut -d "/" -f 2` echo $flashcache_dev_dm mount -t tmpfs tmpfs /var/lib/ceph/osd/ceph-$osd_id
restorecon /var/lib/ceph/osd/ceph-$osd_id
chown -R ceph:ceph $flashcache_dev_dm
chown -R ceph:ceph /var/lib/ceph/osd/ceph-$osd_id #进入部署流程 ceph-bluestore-tool --cluster=ceph prime-osd-dir --dev /dev/mapper/osd$osd_id --path /var/lib/ceph/osd/ceph-$osd_id
ln -snf /dev/mapper/osd$osd_id /var/lib/ceph/osd/ceph-0/block
chown -h ceph:ceph /var/lib/ceph/osd/ceph-0/block
chown ceph:ceph -R /var/lib/ceph/osd/ceph-0
chown -R ceph:ceph /dev/mapper/osd$osd_id
systemctl start ceph-osd@$osd_id
} startflashcache $1

脚本内容的内容全部是从ceph内部启动流程给剥离出来的,也就是全部按照ceph的自身的启动方式处理,只是加入了flashcache的处理,每次启动前,去掉缓存设备,这个flashcache的arond的模式是每次新加载的

怎么用

预制前提是部署好了一个osd

我们准备添加flashcache

获取缓存设备的uuid,就是PARTUUID

[root@lab101 ~]# blkid /dev/sdc1
/dev/sdc1: PARTLABEL="primary" PARTUUID="3b3546e5-65e5-426e-9659-f2e0d37a0895"

获取准备加缓存的osd id

[root@lab101 ~]# cat /var/lib/ceph/osd/ceph-0/whoami
0
[root@lab101 ~]# cat /var/lib/ceph/osd/ceph-0/fsid
bcdb55b0-e95b-4833-8362-18f633782632

得到0 和bcdb55b0-e95b-4833-8362-18f633782632

我们写入启动服务

systemctl enable ceph-volume-flashcache@3b3546e5-65e5-426e-9659-f2e0d37a0895--0--bcdb55b0-e95b-4833-8362-18f633782632.service

注意@后面有三个值,第一个是cache盘的uuid,第二个值为0,就是osd的id,第三个值就是osd的fsid,中间用--相连

如果想查询本机做了多少个flashcache的自启动

[root@lab101 ~]#ls /etc/systemd/system/multi-user.target.wants/ceph-volume-flashcache*
/etc/systemd/system/multi-user.target.wants/ceph-volume-flashcache@3b3546e5-65e5-426e-9659-f2e0d37a0895--0--bcdb55b0-e95b-4833-8362-18f633782632.service

执行加缓存的操作

systemctl start ceph-volume-flashcache@3b3546e5-65e5-426e-9659-f2e0d37a0895--0--bcdb55b0-e95b-4833-8362-18f633782632.service
[root@lab101 ~]# ll /var/lib/ceph/osd/ceph-0
total 24
lrwxrwxrwx. 1 ceph ceph 16 Oct 25 14:13 block -> /dev/mapper/osd0
-rw-------. 1 ceph ceph 37 Oct 25 14:13 ceph_fsid
-rw-------. 1 ceph ceph 37 Oct 25 14:13 fsid
-rw-------. 1 ceph ceph 55 Oct 25 14:13 keyring
-rw-------. 1 ceph ceph 6 Oct 25 14:13 ready
-rw-------. 1 ceph ceph 10 Oct 25 14:13 type
-rw-------. 1 ceph ceph 2 Oct 25 14:13 whoami

检查可以看到block的路径变更了

如果想去掉缓存,恢复没有缓存怎么处理,很简单

systemctl disable ceph-volume-flashcache@3b3546e5-65e5-426e-9659-f2e0d37a0895--0--bcdb55b0-e95b-4833-8362-18f633782632.service
systemctl stop ceph-osd@0
umount /var/lib/ceph/osd/ceph-0 systemctl start ceph-volume@lvm-0-bcdb55b0-e95b-4833-8362-18f633782632
systemctl enable ceph-volume@lvm-0-bcdb55b0-e95b-4833-8362-18f633782632
systemctl start ceph-osd@0
systemctl enable ceph-osd@0

总结

用这种方式每个osd的服务自己记录自己的,没有配置文件,启动服务就是记录配置的地方,需要就启动,不需要disable,都是通用标准操作

并且不干扰其它没有配置flashcache的osd

限制

目前这个只适用于arond的模式的,因为这个模式的cache设备是随时可分离的,随时新建,少了很多盘符续用的问题

更新历史

why when
创建 2019年09月04日
更新 2019年12月9日

ceph与flashcache的around模式结合启动问题的更多相关文章

  1. 简单读!zookeeper单机模式的启动逻辑

    zk用处如此之多,以至于每个地方都要你理解zk原理! 请按如下操作姿势打开: 1. 打开zk的git仓库地址:https://github.com/apache/zookeeper , 确认过眼神,它 ...

  2. IDEA Debug模式下启动慢的解决办法

    工程没有做什么大的改动,近期Idea在debug模式下启动耗时800s +,run模式下200s.Idea debug模式启动的时候会有这样的提示: 方法断点会戏剧性的降低debug的速度.当时并没有 ...

  3. lesson - 2 yum /单用户/救援模式/Linux 启动

    课程大纲:1.  yum使用yum 是一个在线安装软件包的工具,它可以帮我们解决软件包的依赖,这个日后会详细介绍.我们介绍了以下几个用法:yum list    这个命令可以列出所有安装过和未安装的软 ...

  4. Linux忘记root密码 单用户模式 及启动加密

    单用户模式: 在系统启动引导读秒时,按任意键进入系统选项 再按  e  键   选择第二项  按 e  进入编辑  输入  空格  1 然后回车  再按B  键 不需要密码即可进入系统 再passwd ...

  5. myeclipse的debug模式启动不了,但run模式可以启动

    一.问题 在用myeclipse的开发web项目时,经常会打断点,然后利用debug模式启动.但是,今天debug模式启动不了,run模式又可以.这给调试带来了很大的麻烦. 二.解决办法 1.点击de ...

  6. eclipse的debug模式下启动不了tomcat

    使用eclipse启动tomcat,正常模式下可以启动tomcat,却在debug模式下无法启动tomcat. 这个问题可能是由于eclipse和tomcat的交互而产生的,在以debug模式启动to ...

  7. Mac单机模式安装启动Kafka

    1.下载kafka,网址: https://www.apache.org/dyn/closer.cgi?path=/kafka/2.0.0/kafka_2.12-2.0.0.tgz 2.移动tar包到 ...

  8. Compatibility模式安装windows7后改为AHCI模式无法启动Windows7的解决办法

    在用Compatibility模式安装Windows 7后,再在BIOS中去开启SATA硬盘的AHCI功能的话,就会出现无法启动的情况.只有改回Compatibility模式后,系统才恢复正常.经过试 ...

  9. Linux mint 启动文本模式(不启动图形界面)

    Linux Mint 系统用了很久,很顺手,赞一个! 有一天想同时运行多个虚拟机linux系统做实验,想着只启动文本模式可以省点内存资源,结果试了多种方法都不成功,网上现有针对Ubuntu原版和Cen ...

随机推荐

  1. 【C语言程序设计】—最近超火的小游戏—【数字炸弹】!

    ✍  准备工作和建议 一.程序的原理 在动手编程之前,得先跟大家说一下这个程序是干什么的. 我们可以称呼这个游戏为<数字炸弹>. 游戏的原理是这样: 每一轮电脑从 1 到 100 中随机抽 ...

  2. spring boot:解决cors跨域问题的两种方法(spring boot 2.3.2)

    一,什么是CORS? 1,CORS(跨域资源共享)(CORS,Cross-origin resource sharing), 它是一个 W3C 标准中浏览器技术的规范, 它允许浏览器向非同一个域的服务 ...

  3. linux(centos8):查看操作系统的当前版本(os/kernel/bash)

    一,查看redhat系操作系统的版本: 适用于centos/fedora/rhel等 [root@centos8 ~]# cat /etc/redhat-release CentOS Linux re ...

  4. RedisManager2020.4最最最最简单的破解方式

    前言 redis manager是一款很优秀的redis数据库可视化工具,果然优秀的软件最终都走向了收费,贫民玩家越来越难了.赶时间的直接拉到最后,有下载方式. 破解 无需破解,已是破解版 安装 下载 ...

  5. 没事学些KVM(三)虚拟机基础管理

    创建完成虚拟机后,需要对虚拟机进行基础管理学习 virsh list #查看虚拟机列表 改命令只能查看正在运行或挂起的虚拟机 如果需要查看所有的虚拟机需要添加--all 参数 virsh start ...

  6. Paillier同态加密的介绍以及c++实现

    我们先来简短认识一下Paillier同态加密算法: 如果就这么按照定义来用最简朴的c++程序写 就像这样: #include <iostream> #include <math.h& ...

  7. 涨知识的一个pwn题:de1ctf_2019_weapon

    没做出来,wtcl,看了师傅们的wp才找到思路,收获了很多 怎么说呢,这个题很简单但是很巧妙,逆起来几乎无难度 漏洞点位于free函数,一个简单的UAF漏洞 然后接下来说说我一开始的思路 由于程序没有 ...

  8. Java 中的 Lambda 表达式

    Lambda表达式 Lambda 表达式是 JDK1.8 的一个新特性,又称特殊的匿名内部类,可以取代大部分的匿名内部类,语法更简洁,可以写出更优雅的 Java 代码,可以极大地优化代码结构. Lam ...

  9. E. Enemy is weak 解析(思維、離散化、BIT、線段樹)

    Codeforce 61 E. Enemy is weak 解析(思維.離散化.BIT.線段樹) 今天我們來看看CF61E 題目連結 題目 給一個數列\(a\),求有多少\((i,j,k)\),\(i ...

  10. 浅析软件测试人员如何对JVM进行内存溢出检测

    一.什么是JVM,检测JVM的意义 JVM是java virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各 ...