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上苹果介绍 ...
随机推荐
- day18 Pyhton学习 匿名函数
匿名函数 别称: lambda表达式 函数,没有名字 def wahaha(n):#wahaha return n**2 print(wahaha.__name__) qqxing = lambda ...
- NET::ERR_INCOMPLETE_CHUNKED_ENCODING 200 (OK)
错误信息: NET::ERR_INCOMPLETE_CHUNKED_ENCODING 200 (OK) 错误背景:微服务不通过统一的nginx端口访问,能够正常请求接口并获取对应的响应.但是通过ngi ...
- go正则贴吧
package main import ( "fmt" "io/ioutil" "net/http" "regexp" ...
- C++学习笔记---引用的本质
本质:引用本质上是C++内部实现的一个指针常量 发现是引用的话,自动帮我们转换成指针常量 运行后,发现修改ref的值那么a的值也会一起改变,这就说明了引用的本质就是指针
- cgdb安装
cgdb官网:http://cgdb.github.io/ 一.cgdb安装 可使用wget命令下载,wget http://cgdb.me/files/cgdb-0.7.0.tar.gz 之后解压 ...
- APP反编译Xposed-Fdex2脱壳
1.首先手机安装Xposed(app) 2.安装Fdex2(app) 3.打开Fdex2 4.点击要脱壳的app 5.adb pull (点击脱壳app时候弹出的来的路径) 保存本地路径 6.完结-. ...
- jacoco-1-java代码测试覆盖率之本地环境初体验
前言 jacoco是一个开源的覆盖率工具,它针对的开发语言是java,其使用方法很灵活,可以插桩到Ant.Maven中,可以使用其JavaAgent技术监控Java程序等. 那么本次主要使用对java ...
- Redis学习笔记(六)——数据结构之Set
一.介绍 Redis的Set是string类型的无序集合.集合成员是唯一的,这就意味着集合中不能出现重复的数据. Redis中集合是通过哈希表实现的,所以添加.删除.查找的复杂度都是O(1). 集合中 ...
- MongoDB分片 --- MongoDB基础用法(六)
分片 在Mongodb里面存在另一种集群,就是分片技术,可以满足MongoDB数据量大量增长的需求. 当MongoDB存储海量的数据时,一台机器可能不足以存储数据,也可能不足以提供可接受的读写吞吐量. ...
- Spring Cloud 学习笔记 (一)-- Eureka 服务器
开局一张图,截取了本人学习资料中的一张图,很好地展示了Eureka的架构. Eureka服务器 管理服务的作用.细分为服务注册,服务发现. 所有的客户端在Eureka服务器上注册服务,再从Eureka ...