前言

本篇是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 新功能之磁盘智能分组的更多相关文章

  1. ceph luminous 新功能之内置dashboard 之 mgr功能模块配置

    前言 ceph luminous版本新增加了很多有意思的功能,这个也是一个长期支持版本,所以这些新功能的特性还是很值得期待的,从底层的存储改造,消息方式的改变,以及一些之前未实现的功能的完成,都让ce ...

  2. ceph luminous 新功能之内置dashboard

    前言 ceph luminous版本新增加了很多有意思的功能,这个也是一个长期支持版本,所以这些新功能的特性还是很值得期待的,从底层的存储改造,消息方式的改变,以及一些之前未实现的功能的完成,都让ce ...

  3. ceph luminous 新功能之内置 dashboard

    # 开启 dashboard (在任一 mon_server 节点上)ceph mgr module enable dashboard # 设置dashboard 端口和IPceph config-k ...

  4. crushmap磁盘智能分组

    目录 简介 配置crush class 1. 创建ssd class 2. 创建基于ssd的class rule 3. 创建基于ssd_rule规则的存储池 4. 测试基于ssd的池 简介 ceph从 ...

  5. Ceph 12.2.0 实践osd 智能分组功能

    以前我们需要对ssd和hdd进行分组的时候,需要大量的修改crush map,然后绑定不同的存储池到不同的 crush 树上面,现在这个逻辑简化了很多.以上是官方宣传听起来很不错等到12.2.0稳定版 ...

  6. 《photoshop cc 新功能 生成图像资源》智能切图逆天啦!

    作为一个前端工程师切图这个步骤是必不可少的,方式多种多样,有和切图工具的,也有是把要切的图层元素或者组直接新建保存成文件的,现在photoshop cc2015,可以让你轻松切图,摆脱繁琐的切图步骤. ...

  7. CentOS以及Oracle数据库发展历史及各版本新功能介绍, 便于构造环境时有个对应关系

    CentOS版本历史 版本 CentOS版本号有两个部分,一个主要版本和一个次要版本,主要和次要版本号分别对应于RHEL的主要版本与更新包,CentOS采取从RHEL的源代码包来构建.例如CentOS ...

  8. SQLSERVER2014中的新功能

    SQLSERVER2014中的新功能 转载自:http://blog.csdn.net/maco_wang/article/details/22701087 博客人物:maco_wang SQLSER ...

  9. 教你轻松看懂 iOS9 新功能

    2015苹果全球开发者大会在6月9日凌晨,美国旧金山举行,fir.im 整理了一部分的资料,帮助了解 iOS9 的新特性与功能,感兴趣的可以看下. 关于iOS9新增功能 在WWDC 2015上苹果介绍 ...

随机推荐

  1. TimeSpan时间间隔详解

    1 public string GetShiXian(string fadanshijian) 2 { 3 string result,chulishijian; 4 5 DateTime fdTim ...

  2. C# POst 接收或发送XML

    摘自:http://www.cnblogs.com/Fooo/p/3529371.html 项目分成两个 web(ASP.Net)用户处理请求,客户端(wpf/winform)发送请求 1.web项目 ...

  3. Linux命令行bash的快捷键

    提升效率 锁屏 Ctrl + s 敲什么命令没反应,但是敲上去了,屏幕上不做任何反应 Ctrl + q 再解锁 例如: 先Ctrl + s 锁屏 然后在命令行敲入 [root@C8-1 ~]# rm ...

  4. Java进阶--Java动态代理

    JDK version: 1.8 动态代理中所说的"动态", 是针对使用Java代码实际编写了代理类的"静态"代理而言的, 它的优势不在于省去了编写代理类那一点 ...

  5. zookeeper核心之ZAB协议就这么简单!

    背景 我们都知道 Zookeeper 是基于 ZAB 协议实现的,在介绍 ZAB 协议之前,先回顾一下 Zookeeper 的起源与发展. Zookeeper 究竟是在什么样的时代背景下被提出?为了解 ...

  6. CAP-微服务间通信实践

    微服务间通信常见的两种方式 由于微服务架构慢慢被更多人使用后,迎面而来的问题是如何做好微服务间通信的方案.我们先分析下目前最常用的两种服务间通信方案. gRPC(rpc远程调用) gRPC-微服务间通 ...

  7. 一、ETL实践之数据可视化架构

    开篇心声: 不管是学习新知识,还是遇到各种难题,总能在技术论坛找到经验帖子.一直享受大家提供的帮助,而自己没有任何输出,实在过意不去.我相信技术是经验的交流,思维的碰撞. 这是我一次写技术分享文章,我 ...

  8. NB-IoT的PSM模式有什么优点

    在NB-IoT系统中,PSM模式的优点是可进行长时间休眠,缺点是对终端接收(Mobile Terminated,MT)业务响应不及时,主要应用于远程抄表等对下行实时性要求不高的业务.实际上,物联网设备 ...

  9. TCP 队列溢出了

    一.TCP 队列 1.syns queue:半连接队列 TCP 三次握手(参考:TCP建立连接之三次握手),第一步,服务端接收到客户端发送的 syn 消息后,将连接信息放入 syns queue,此时 ...

  10. Django项目-个人网站之事项模块

    Django项目之个人网站 关注公众号"轻松学编程"了解更多. Github地址:https://github.com/liangdongchang/MyWeb.git 感兴趣的可 ...