Ceph OSD从filestore 转换到 bluestore的方法
前言
前段时间看到豪迈的公众号上提到了这个离线转换工具,最近看到群里有人问,找了下没什么相关文档,就自己写了一个,供参考
实践步骤
获取代码并安装
git clone https://github.com/ceph/ceph.git
cd ceph
git submodule update --init --recursive
./make-dist
rpm -bb ceph.spec
生成rpm安装包后进行安装,这个过程就不讲太多,根据各种文档安装上最新的版本即可,这个代码合进去时间并不久,大概是上个月才合进去的
配置集群
首先配置一个filestore的集群,这个也是很简单的,我的环境配置一个单主机三个OSD的集群
[root@lab8106 ceph]# ceph -s
cluster 3daaf51a-eeba-43a6-9f58-c26c5796f928
health HEALTH_WARN
mon.lab8106 low disk space
monmap e2: 1 mons at {lab8106=192.168.8.106:6789/0}
election epoch 4, quorum 0 lab8106
mgr active: lab8106
osdmap e16: 3 osds: 3 up, 3 in
pgmap v34: 64 pgs, 1 pools, 0 bytes data, 0 objects
323 MB used, 822 GB / 822 GB avail
64 active+clean
[root@lab8106 ceph]# ceph osd tree
ID WEIGHT TYPE NAME UP/DOWN REWEIGHT PRIMARY-AFFINITY
-1 0.80338 root default
-2 0.80338 host lab8106
0 0.26779 osd.0 up 1.00000 1.00000
1 0.26779 osd.1 up 1.00000 1.00000
2 0.26779 osd.2 up 1.00000 1.00000
写入少量数据
[root@lab8106 ~]# rados -p rbd bench 10 write --no-cleanup
设置noout
[root@lab8106 ~]# ceph osd set noout
noout is set
停止OSD.0
[root@lab8106 ~]# systemctl stop ceph-osd@0
[root@lab8106 ~]# ceph osd down 0
osd.0 is already down.
将数据换个目录挂载,换个新盘挂载到原路径
[root@lab8106 ~]# mkdir /var/lib/ceph/osd/ceph-0.old/
[root@lab8106 ~]# umount /var/lib/ceph/osd/ceph-0
[root@lab8106 ~]# mount /dev/sdb1 /var/lib/ceph/osd/ceph-0.old/
[root@lab8106 ~]# mount /dev/sde1 /var/lib/ceph/osd/ceph-0/
[root@lab8106 ~]# df -h|grep osd
/dev/sdc1 275G 833M 274G 1% /var/lib/ceph/osd/ceph-1
/dev/sdd1 275G 833M 274G 1% /var/lib/ceph/osd/ceph-2
/dev/sdb1 275G 759M 274G 1% /var/lib/ceph/osd/ceph-0.old
/dev/sde1 280G 33M 280G 1% /var/lib/ceph/osd/ceph-0
在配置文件/etc/ceph/ceph.conf中添加
enable_experimental_unrecoverable_data_corrupting_features = bluestore
如果需要指定osd的block的路径需要写配置文件
在做ceph-objectstore-tool --type bluestore --data-path --op mkfs
这个操作之前,在配置文件的全局里面添加上
bluestore_block_path = /dev/sde2
然后再创建的时候就可以是链接到设备了,这个地方写全局变量,然后创建完了后就删除掉这项配置文件,写单独的配置文件的时候发现没读取成功,生成后应该是这样的
[root@lab8106 ceph]# ll /var/lib/ceph/osd/ceph-0
total 20
lrwxrwxrwx 1 root root 9 May 3 17:40 block -> /dev/sde2
-rw-r--r-- 1 root root 2 May 3 17:40 bluefs
-rw-r--r-- 1 root root 37 May 3 17:40 fsid
-rw-r--r-- 1 root root 8 May 3 17:40 kv_backend
-rw-r--r-- 1 root root 4 May 3 17:40 mkfs_done
-rw-r--r-- 1 root root 10 May 3 17:40 type
如果不增加这个就是以文件形式的存在
获取osd.0的fsid
[root@lab8106 ~]# cat /var/lib/ceph/osd/ceph-0.old/fsid
b2f73450-5c4a-45fb-9c24-8218a5803434
创建一个bluestore的osd.0
[root@lab8106 ~]# ceph-objectstore-tool --type bluestore --data-path /var/lib/ceph/osd/ceph-0 --fsid b2f73450-5c4a-45fb-9c24-8218a5803434 --op mkfs
转移数据
[root@lab8106 ~]# ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-0.old --target-data-path /var/lib/ceph/osd/ceph-0 --op dup
[root@lab8106 ~]# chown -R ceph:ceph /var/lib/ceph/osd/ceph-0
这个操作是将之前的filestore的数据转移到新的bluestore上了
启动OSD.0
[root@lab8106 osd]# systemctl restart ceph-osd@0
检查状态
[root@lab8106 osd]# ceph -s
2017-05-03 17:05:13.119492 7f20a501b700 -1 WARNING: the following dangerous and experimental features are enabled: bluestore
2017-05-03 17:05:13.150181 7f20a501b700 -1 WARNING: the following dangerous and experimental features are enabled: bluestore
cluster 3daaf51a-eeba-43a6-9f58-c26c5796f928
health HEALTH_WARN
noout flag(s) set
mon.lab8106 low disk space
monmap e2: 1 mons at {lab8106=192.168.8.106:6789/0}
election epoch 4, quorum 0 lab8106
mgr active: lab8106
osdmap e25: 3 osds: 3 up, 3 in
flags noout
pgmap v80: 64 pgs, 1 pools, 724 MB data, 182 objects
3431 MB used, 555 GB / 558 GB avail
64 active+clean
成功转移
不同的block方式
[root@lab8106 ceph]# ll /var/lib/ceph/osd/ceph-0/ -al|grep block
-rw-r--r-- 1 ceph ceph 10737418240 May 3 17:32 block
[root@lab8106 ceph]# ll /var/lib/ceph/osd/ceph-4/ -al|grep block
lrwxrwxrwx 1 ceph ceph 58 May 3 17:16 block -> /dev/disk/by-partuuid/846e93a2-0f6d-47d4-8a90-85ab3cf4ec4e
-rw-r--r-- 1 ceph ceph 37 May 3 17:16 block_uuid
可以看到直接创建的时候的block是以链接的方式链接到一个分区的,而不改配置文件的转移的方式里面是一个文件的形式,根据需要进行选择
总结
转移工具的出现方便了以后从filestore到bluestore的转移,可以采取一个个osd的转移方式将整个集群进行转移,而免去了剔除osd,再添加的方式,减少了迁移量,可以一个个的离线进行操作
ceph的工具集越来越完整了
变更记录
Why | Who | When |
---|---|---|
创建 | 武汉-运维-磨渣 | 2017-05-03 |
Ceph OSD从filestore 转换到 bluestore的方法的更多相关文章
- Ceph osd故障恢复
1 调高osd的日志等级 加上红框那一行就可以了 osd的日志路径:/var/log/ceph/ceph-osd.3.log 注意:加上了这一行后日志会刷很多,所以要特别注意日志容量的变化,以防把v ...
- Ceph osd启动报错osd init failed (36) File name too long
在Ceph的osd节点上,启动osd进程失败,查看其日志/var/log/ceph/ceph-osd.{osd-index}.log日志,报错如下: 2017-02-14 16:26:13.55853 ...
- 怎样禁止Ceph OSD的自动挂载
前言 本篇来源于群里一个人的问题,有没有办法让ceph的磁盘不自动挂载,一般人的问题都是怎样让ceph能够自动挂载,在centos 7 平台下 ceph jewel版本以后都是有自动挂载的处理的,这个 ...
- 处理Ceph osd的journal的uuid问题
前言 之前有一篇文章介绍的是,在centos7的jewel下面如果自己做的分区如何处理自动挂载的问题,当时的环境对journal的地方采取的是文件的形式处理的,这样就没有了重启后journal的磁盘偏 ...
- ceph osd 自动挂载的N种情况
直接上干货: ceph自动挂载原理 系统启动后,ceph 通过扫描所有磁盘及分区的 ID_PART_ENTRY_TYPE 与自己main.py中写死的osd ready 标识符来判断磁盘(及其分区)是 ...
- 分布式存储ceph——(5)ceph osd故障硬盘更换
正常状态:
- ceph osd 批量删除
ceph osd 批量删除,注意删除的是当前节点正在使用的osd,数据删除有风险,所以最后一步没有去format磁盘,给你留下一剂后悔药. #!/bin/bash osd_list=`mount|gr ...
- Ceph osd故障硬盘更换
正常状态: 故障状态: 实施更换步骤: (1)关闭ceph集群数据迁移: osd硬盘故障,状态变为down.在经过mod osd down out interval 设定的时间间隔后,ceph将其标记 ...
- ceph osd tree的可视化
前言 很久没有处理很大的集群,在接触一个新集群的时候,如果集群足够大,需要比较长的时间才能去理解这个集群的结构,而直接去看ceph osd tree的结果,当然是可以的,这里是把osd tree的结构 ...
随机推荐
- spring-boot-route(十七)使用aop记录操作日志
在上一章内容中--使用logback管理日志,我们详细讲述了如何将日志生成文件进行存储.但是在实际开发中,使用文件存储日志用来快速查询问题并不是最方便的,一个优秀系统除了日志文件还需要将操作日志进行持 ...
- 【C++学习笔记】C++经典十二道笔试题!你能做出几道?
1. 运行下面的C++代码,得到的结果是什么? #include "stdafx.h" #include<iostream> using namespace std; ...
- 【图论】USACO07NOV Cow Relays G
题目大意 洛谷链接 给定一张\(T\)条边的无向连通图,求从\(S\)到\(E\)经过\(N\)条边的最短路长度. 输入格式 第一行四个正整数\(N,T,S,E\),意义如题面所示. 接下来\(T\) ...
- 【原创】xenomai内核解析--xenomai与普通linux进程之间通讯XDDP(二)--实时与非实时关联(bind流程)
版权声明:本文为本文为博主原创文章,转载请注明出处.如有问题,欢迎指正.博客地址:https://www.cnblogs.com/wsg1100/ 1.概述 上篇文章介绍了实时端socket创建和配置 ...
- centos平台scp通过密钥远程复制文件(免密登录)
一,说明:两台机器的平台和ip 1,a服务器: centos8:ip:121.122.123.47 版本 [root@yjweb ~]# cat /etc/redhat-release CentOS ...
- 2019-2020-1 20209313《Linux内核原理与分析》第二周作业
2019-2020-1 20209313<Linux内核原理与分析>第二周作业 零.总结 阐明自己对"计算机是如何工作的"理解. 一.myod 步骤 复习c文件处理内容 ...
- docker是个啥?
docker 第一问:什么是容器 容器就是在一个隔离的环境中运行的一个进程.注意关键词,隔离和进程.如果进程停止,那么容器就销毁.因为具有隔离的特点,所以每个容器都拥有自己的文件系统:包括IP地址.主 ...
- Android面试题收录及解答10月刊
前言 嗨,大家好,好久不见.这里跟大家侃侃这中间发生了什么. 一个月前呢,想准备面试,就网上随便找找面试题什么的,发现要么就是卖课的,要么就是不给详细回答的或者回答不够深的(也许是我没找到).反正稍微 ...
- python的多线程和java的多线程之间的区别
在python中,由于Cpython解释器的全局解释器的存在,那么多线程的话在同一时刻只能有一个线程执行,意思就是python中的多线程只能并发执行, 没有办法实现真正的并行,也就是无法利用多核CPU ...
- Linux下如何使用X86 CPU的GPIO
目录 1.前言 2.linux pinctrl子系统 3. pin controller driver 4.手动构造device 1.前言 在arm嵌入式开发中,各个外设具有固定的物理地址,我们可以直 ...