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上苹果介绍 ...
随机推荐
- 使用python编写正逆序乘法表
# 99乘法表 # 顺序 for i in range(1,10): n = 1 while n <= i: print('{}x{}={}'.format(n,i,n*i),end=' ') ...
- 【9】进大厂必须掌握的面试题-DevOps面试
Q1.DevOps和Agile之间的根本区别是什么? 下表中列出了两者之间的差异. 特征 DevOps--开发运维 Agile--敏捷 敏捷 开发和运营中的敏捷性 只有发展才能敏捷 流程/实践 涉及C ...
- xshell多窗口同时执行输入命令
- linux(centos8):安装Jenkins持续集成工具(java 14 / jenkins 2.257)
一,什么是Jenkins? 1,jenkins是什么? Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具, 用于监控持续重复的工作,旨在提供一个开放易用的软件平台, 使软件的持续 ...
- centos8安装fastdfs6.06(单机方式)
一,下载 fastdfs6.06 1,官方地址 https://github.com/happyfish100 2,说明:当前版本:共3个子模块 fastdfs v6.06 libfastcommon ...
- linux(centos8):用uniq去除文本中重复的行(去重)
一,uniq命令的用途 1, 作用: 从输入文件或标准输入中找到相邻的匹配行, 并写入到输出文件或标准输出 2, 使用时通常会搭配sort使用 说明:刘宏缔的架构森林是一个专注架构的博客,地址:htt ...
- 自动化遍历-appcrawler
下载appclawler 下载地址:https://pan.baidu.com/s/1dE0JDCH#list/path=%2F 查看帮助文档: java -jar appcrawler-2.4.0- ...
- slf4j -->log4j --> logback -->log4j2
slf4j是一个接口:log4j\logback\log4j2是slf4j接口的持续更新的日志框架实现类:按照面向接口编程,java中导入slf4j最好,可以持续更新日志框架实现类. 详细情况见链接 ...
- RestTemplate+Ribbon实现服务调用
一,通过LoadBalancerClient取得uri,然后RestTemplate 调用 1, 注入LoadBalancerClient @Autowired LoadBalancerClient ...
- SpringMVC的@InitBinder参数转换
@Controller @RequestMapping("/index") public class IndexController { /** * 解决前端传递的日期参数验证异常 ...