ceph luminous 新功能之磁盘智能分组
前言
本篇是luminous一个新功能介绍,关于磁盘智能分组的,这个在ceph里面叫crush class,这个我自己起名叫磁盘智能分组,因为这个实现的功能就是根据磁盘类型进行属性关联,然后进行分类,减少了很多的人为操作
以前我们需要对ssd和hdd进行分组的时候,需要大量的修改crush map,然后绑定不同的存储池到不同的 crush 树上面,现在这个逻辑简化了很多
ceph crush class {create,rm,ls} manage the new CRUSH device
class feature. ceph crush set-device-class
will set the clas for a particular device.
Each OSD can now have a device class associated with it (e.g., hdd or
ssd), allowing CRUSH rules to trivially map data to a subset of devices
in the system. Manually writing CRUSH rules or manual editing of the CRUSH is normally not required.
这个是发布的公告里面关于这两个功能的说明的,本篇就来看看这个功能怎么用
实践
首先创建分类的规则
创建一个ssd的分组
[root@lab8106 ceph]# ceph osd crush class create ssd
created class ssd with id 0 to crush map
也就是一个名称,这里我认为是ssd的分组就创建名词为ssd
再创建一个hdd的分组
[root@lab8106 ceph]# ceph osd crush class create hdd
created class hdd with id 1 to crush map
查询分组规则
[root@lab8106 ceph]# ceph osd crush class ls
[
"ssd",
"hdd"
]
把osd绑定不同的属性(属性名称就是上面的分类)
[root@lab8106 ceph]# ceph osd crush set-device-class osd.0 ssd
set-device-class item id 0 name 'osd.0' device_class ssd
[root@lab8106 ceph]# ceph osd crush set-device-class osd.2 ssd
set-device-class item id 2 name 'osd.2' device_class ssd
[root@lab8106 ceph]# ceph osd crush set-device-class osd.1 hdd
set-device-class item id 1 name 'osd.1' device_class hdd
[root@lab8106 ceph]# ceph osd crush set-device-class osd.3 hdd
set-device-class item id 3 name 'osd.3' device_class hdd
查询设置以后的效果
[root@lab8106 ceph]# ceph osd tree
ID WEIGHT TYPE NAME UP/DOWN REWEIGHT PRIMARY-AFFINITY
-6 0.54559 root default~hdd
-5 0.54559 host lab8106~hdd
1 0.27280 osd.1 up 1.00000 1.00000
3 0.27280 osd.3 up 1.00000 1.00000
-4 0.54559 root default~ssd
-3 0.54559 host lab8106~ssd
0 0.27280 osd.0 up 1.00000 1.00000
2 0.27280 osd.2 up 1.00000 1.00000
-1 1.09119 root default
-2 1.09119 host lab8106
0 0.27280 osd.0 up 1.00000 1.00000
1 0.27280 osd.1 up 1.00000 1.00000
2 0.27280 osd.2 up 1.00000 1.00000
3 0.27280 osd.3 up 1.00000 1.00000
这个就是这个功能比较核心的地方,会根据磁盘类型不同,自动的创建了不同的树,并且把磁盘放入到了树里面去了
根据根创建规则(这个地方有bug,下面会提及)
[root@lab8106 ceph]# ceph osd crush rule create-simple ssd default~ssd host firstn
检查创建的rule规则:
[root@lab8106 build]# ceph osd crush rule dump ssd
{
"rule_id": 1,
"rule_name": "ssd",
"ruleset": 1,
"type": 1,
"min_size": 1,
"max_size": 10,
"steps": [
{
"op": "take",
"item": -4,
"item_name": "default~ssd"
},
{
"op": "chooseleaf_firstn",
"num": 0,
"type": "host"
},
{
"op": "emit"
}
]
}
根据rule创建存储池
ceph osd pool create testpool 64 64 ssd
ceph osd dump|grep pool
pool 3 'testpool' replicated size 3 min_size 1 crush_rule 1 object_hash rjenkins pg_num 64 pgp_num 64 last_change 27 flags hashpspool stripe_width 0
这里有个验证规则的小bug 代码在src/mon/MonCommands.h
COMMAND("osd crush rule create-simple " \
"name=name,type=CephString,goodchars=[A-Za-z0-9-_.] " \
"name=root,type=CephString,goodchars=[A-Za-z0-9-_.] " \
"name=type,type=CephString,goodchars=[A-Za-z0-9-_.] " \
默认的goodchars不包含'~',这里不清楚社区是准备去改创建的逻辑去掉这个特殊符号,还是去改创建rule相关的规则,我已经提交了issue#20446,等待社区的修改方案
功能逻辑
现在方法
创建一个磁盘类型的class,给磁盘标记class的统一标签,自动会根据class的类型创建一个树,根据树创建rule,根据rule创建存储池,整个操作没有动crushmap的操作
增加或修改盘的时候,设置下属性即可
以前的方法
先添加盘,手动创建树,新加的osd要找下原来的树的名称,然后把osd放到这个树里面去,然后创建规则,根据rule创建存储池
增加盘或修改盘的时候,需要查找下,然后根据查找的规则进行相关操作
总结
现在方法对用户操作来说更透明,直接对磁盘进行分类打标签即可,减少了一些复杂的操作逻辑,是一个很不错的功能
更新
后面会在crush rule创建的时候指定一个class的选项,就可以不改规则,也不改命令了
https://www.spinics.net/lists/ceph-devel/msg37343.html,下个版本的rc应该会解决
变更记录
| Why | Who | When |
|---|---|---|
| 创建 | 武汉-运维-磨渣 | 2017-06-28 |
| 更新进度 | 武汉-运维-磨渣 | 2017-06-28 |
ceph luminous 新功能之磁盘智能分组的更多相关文章
- ceph luminous 新功能之内置dashboard 之 mgr功能模块配置
前言 ceph luminous版本新增加了很多有意思的功能,这个也是一个长期支持版本,所以这些新功能的特性还是很值得期待的,从底层的存储改造,消息方式的改变,以及一些之前未实现的功能的完成,都让ce ...
- ceph luminous 新功能之内置dashboard
前言 ceph luminous版本新增加了很多有意思的功能,这个也是一个长期支持版本,所以这些新功能的特性还是很值得期待的,从底层的存储改造,消息方式的改变,以及一些之前未实现的功能的完成,都让ce ...
- ceph luminous 新功能之内置 dashboard
# 开启 dashboard (在任一 mon_server 节点上)ceph mgr module enable dashboard # 设置dashboard 端口和IPceph config-k ...
- crushmap磁盘智能分组
目录 简介 配置crush class 1. 创建ssd class 2. 创建基于ssd的class rule 3. 创建基于ssd_rule规则的存储池 4. 测试基于ssd的池 简介 ceph从 ...
- Ceph 12.2.0 实践osd 智能分组功能
以前我们需要对ssd和hdd进行分组的时候,需要大量的修改crush map,然后绑定不同的存储池到不同的 crush 树上面,现在这个逻辑简化了很多.以上是官方宣传听起来很不错等到12.2.0稳定版 ...
- 《photoshop cc 新功能 生成图像资源》智能切图逆天啦!
作为一个前端工程师切图这个步骤是必不可少的,方式多种多样,有和切图工具的,也有是把要切的图层元素或者组直接新建保存成文件的,现在photoshop cc2015,可以让你轻松切图,摆脱繁琐的切图步骤. ...
- CentOS以及Oracle数据库发展历史及各版本新功能介绍, 便于构造环境时有个对应关系
CentOS版本历史 版本 CentOS版本号有两个部分,一个主要版本和一个次要版本,主要和次要版本号分别对应于RHEL的主要版本与更新包,CentOS采取从RHEL的源代码包来构建.例如CentOS ...
- SQLSERVER2014中的新功能
SQLSERVER2014中的新功能 转载自:http://blog.csdn.net/maco_wang/article/details/22701087 博客人物:maco_wang SQLSER ...
- 教你轻松看懂 iOS9 新功能
2015苹果全球开发者大会在6月9日凌晨,美国旧金山举行,fir.im 整理了一部分的资料,帮助了解 iOS9 的新特性与功能,感兴趣的可以看下. 关于iOS9新增功能 在WWDC 2015上苹果介绍 ...
随机推荐
- day17 Pyhton学习 内置函数继续
1. locals 本地作用域/局部作用域 会随着位置的改变而改变 2.globals 全局作用域 永远不变,永远是全局 3.complex:复数 实数(有理数和无理数) 某一个数的平方是-1 ...
- lumen-ioc容器测试 (5)
lumen-ioc容器测试 (1) lumen-ioc容器测试 (2) lumen-ioc容器测试 (3) lumen-ioc容器测试 (4) lumen-ioc容器测试 (5) lumen-ioc容 ...
- 【Flutter 混合开发】与原生通信-MethodChannel
Flutter 混合开发系列 包含如下: 嵌入原生View-Android 嵌入原生View-iOS 与原生通信-MethodChannel 与原生通信-BasicMessageChannel 与原生 ...
- JavaSE学习笔记01注释、标识符与基本类型
1. HelloWorld 编写代码 public class Hello{ public static void main(String[] args){ System.out.println(&q ...
- LruCache缓存bitmap(三)
应用在网络连接上,onrestart后不会重新联网获取图片,省去了流量, public class MainActivity extends AppCompatActivity { ImageView ...
- javascript中的描述对象(Descriptor)
对象的每个属性都有一个描述对象(Descriptor),用来控制该属性的行为.Object.getOwnPropertyDescriptor方法可以获取该属性的描述对象. 获取对象中属性描述对象 Ob ...
- D. Road to Post Office 解析(思維)
Codeforce 702 D. Road to Post Office 解析(思維) 今天我們來看看CF702D 題目連結 題目 略,請直接看原題. 前言 原本想說會不會也是要列式子解或者二分搜,沒 ...
- Disruptor 使用简介
[开发总结]Disruptor 使用简介 在极客时间看到王宝令老师关于 Disruptor 的一篇文章,觉得很有意思.看完之后又在网上找到一些其他关于Disruptor 的资料看了一下. 现在写篇文章 ...
- 【总结】mysql调优
一.事务 1.事务的特性 (1)原子性(Atomicity),可以理解为一个事务内的所有操作要么都执行,要么都不执行. (2)一致性(Consistency),可以理解为数据是满足完整性约束的,也就是 ...
- NB-IoT应用分类与技术特点分析
NB-Iot作为一种窄带物联网技术在各大行业脱颖而出,其应用涵盖多个领域.此文计讯小编将讲解NB-IoT的主要应用分类及相关特点. 一.NB-IoT是什么 NB-IoT是指窄带物联网(Na ...