ceph Luminous新功能之crush class
来源:互联网 发布:mac os 显示隐藏文件 编辑:程序博客网 时间:2024/06/15 18:42
cursh class为新增的管理设备类的功能,可以将特定一组设备指定为类,创建rule的时候直接指定class即可,以前也可以实现该功能,只不过需要编辑crushmap,手动添加class。该功能只需要命令行就可以实现。
转载请注明出处:http://xiaqunfeng.cc/2017/07/04/ceph-Luminous%E6%96%B0%E5%8A%9F%E8%83%BD%E4%B9%8Bcrush-class/
本文摘自个人博客,更多干货,也详见该博客:夏天的风
- 前言
- 关于之前的crush
- 完全手动管理crush
- CEPH-CRUSH-LOCATION 挂钩
- CRUSH devices class
- 目的
- 创建两个 class
- 当前OSD 分布
- 为class添加osd
- 再查看osd分布
- 创建rule
- 手动来创建rule
- 测试一下rule 绑定 class是否成功
前言
集群情况和上一篇文章一样
# ceph -s cluster: id: 4c7ec5af-cbd3-40fd-8c96-0615c77660d4 health: HEALTH_OK services: mon: 3 daemons, quorum luminous0,luminous1,luminous2 mgr: luminous0(active) mds: 1/1/1 up {0=luminous0=up:active} osd: 6 osds: 6 up, 6 in data: pools: 7 pools, 112 pgs objects: 240 objects, 3359 bytes usage: 9245 MB used, 51587 MB / 60833 MB avail pgs: 112 active+clean
关于之前的crush
完全手动管理crush
1、在 ceph.conf
配置中将挂钩关掉
osd_crush_update_on_start = false
2、部署OSD
3、手动创建所有的 CRUSH buckets
4、手动在每个 buckets 中放置 OSD
每当新加入、移除一个节点,或者将OSD从一个 host 移到另一个 host 时,也必须手动更改 CRUSH map。
CEPH-CRUSH-LOCATION 挂钩
定义 osd_crush_location_hook,它可以让你定义一个路径去执行脚本,允许你自动处理以上过程。
调用方式:
myhook --cluster <cluster_name> --id <id> --type osd
集群名通常是 ceph , id 是守护进程标识符( OSD 号)。
CRUSH devices class
目的
这么做的目的是为ceph不同类型的设备(HDD,SSD,NVMe)提供一个合理的默认,以便用户不必自己手动编辑指定。这相当于给磁盘组一个统一的class标签,根据class创建rule,然后根据role创建pool,整个操作不需要手动修改crushmap。
创建两个 class
# ceph osd crush class ls[]# ceph osd crush class create hddcreated class hdd with id 0 to crush map# ceph osd crush class create ssdcreated class ssd with id 1 to crush map# ceph osd crush class ls[ "hdd", "ssd"]
根据class,可以对osd进行以下两种操作:
1、部署OSD时指定 class,比如,指定部署磁盘所在的 OSD 到指定 class 中:
ceph-disk prepare --crush-device-class <class> /dev/XXX
2、将现有 osd 加入到指定 class 中,命令如下:
ceph osd crush set-device-class osd.<id> <class>
* 以下对第二种操作进行实验,也是使用最多的。*
当前OSD 分布
# ceph osd treeID WEIGHT TYPE NAME UP/DOWN REWEIGHT PRIMARY-AFFINITY-1 0.05814 root default-2 0.01938 host luminous0 1 0.00969 osd.1 up 1.00000 1.00000 5 0.00969 osd.5 up 1.00000 1.00000-3 0.01938 host luminous2 0 0.00969 osd.0 up 1.00000 1.00000 4 0.00969 osd.4 up 1.00000 1.00000-4 0.01938 host luminous1 2 0.00969 osd.2 up 1.00000 1.00000 3 0.00969 osd.3 up 1.00000 1.00000
为class添加osd
将0、1、2分到hdd class,3、4、5分到ssd class
# for i in 0 1 2; do ceph osd crush set-device-class osd.$i hdd; doneset-device-class item id 3 name 'osd.0' device_class hddset-device-class item id 4 name 'osd.1' device_class hddset-device-class item id 5 name 'osd.2' device_class hdd# for i in 3 4 5; do ceph osd crush set-device-class osd.$i ssd; doneset-device-class item id 3 name 'osd.3' device_class ssdset-device-class item id 4 name 'osd.4' device_class ssdset-device-class item id 5 name 'osd.5' device_class ssd
再查看osd分布
# ceph osd treeID WEIGHT TYPE NAME UP/DOWN REWEIGHT PRIMARY-AFFINITY-12 0.02907 root default~ssd -9 0.00969 host luminous0~ssd 5 0.00969 osd.5 up 1.00000 1.00000-10 0.00969 host luminous2~ssd 4 0.00969 osd.4 up 1.00000 1.00000-11 0.00969 host luminous1~ssd 3 0.00969 osd.3 up 1.00000 1.00000 -8 0.02907 root default~hdd -5 0.00969 host luminous0~hdd 1 0.00969 osd.1 up 1.00000 1.00000 -6 0.00969 host luminous2~hdd 0 0.00969 osd.0 up 1.00000 1.00000 -7 0.00969 host luminous1~hdd 2 0.00969 osd.2 up 1.00000 1.00000 -1 0.05814 root default -2 0.01938 host luminous0 1 0.00969 osd.1 up 1.00000 1.00000 5 0.00969 osd.5 up 1.00000 1.00000 -3 0.01938 host luminous2 0 0.00969 osd.0 up 1.00000 1.00000 4 0.00969 osd.4 up 1.00000 1.00000 -4 0.01938 host luminous1 2 0.00969 osd.2 up 1.00000 1.00000 3 0.00969 osd.3 up 1.00000 1.00000
创建rule
# ceph osd crush rule create-simple hdd-rule default~ssd host firstnInvalid command: invalid chars ~ in default~ssdosd crush rule create-simple <name> <root> <type> {firstn|indep} : create crush rule <name> to start from <root>, replicate across buckets of type <type>, using a choose mode of <firstn|indep> (default firstn; indep best for erasure pools)Error EINVAL: invalid command
这里出现错误,我在想,是不是 class name 不用带上 default~
这个符号,于是
# ceph osd crush rule create-simple hdd-rule ssd host firstnError ENOENT: root item ssd does not exist
依然出错,这是个bug,还在 merge 中
先跳过这个直接创建rule关联class的命令,后续BUG修复了再来实验
手动来创建rule
首先查看当前rule的状况
# ceph osd crush rule ls[ "replicated_rule"]
只有一个默认的rule
* 第一步:获取crushmap *
# ceph osd getcrushmap -o c111
第二步:反编译crushmap
# crushtool -d c1 -o c2.txt
编辑crushmap
# vim c2.txt
在 # rule
那一栏 replicated_rule
的后面添加 hdd_rule
和 ssd_rule
# rulesrule replicated_rule { ruleset 0 type replicated min_size 1 max_size 10 step take default step chooseleaf firstn 0 type host step emit}rule hdd_rule { ruleset 1 type replicated min_size 1 max_size 10 step take default class hdd step chooseleaf firstn 0 type osd step emit}rule ssd_rule { ruleset 2 type replicated min_size 1 max_size 10 step take default class ssd step chooseleaf firstn 0 type osd step emit}
第三步:编译crushmap
# crushtool -c c2.txt -o c1.new
第四步:注入crushmap
# ceph osd setcrushmap -i c1.new12
此时,查看rule
# ceph osd crush rule ls[ "replicated_rule", "hdd_rule", "ssd_rule"]
有了新创建的两个rule
测试一下,rule 绑定 class是否成功
1、在 ssd_rule 上创建一个 pool
# ceph osd pool create testpool 64 64 ssd_rulepool 'testpool' created
2、写一个对象
# rados -p testpool put object1 c2.txt
3、查看对象的osdmap
# ceph osd map testpool object1osdmap e46 pool 'testpool' (7) object 'object1' -> pg 7.bac5debc (7.3c) -> up ([5,3,4], p5) acting ([5,3,4], p5)
发现对象确实只写在 ssd class 所对应的 3个OSD(osd.3 osd.4 osd.5)上,rule绑定成功。
- ceph Luminous新功能之crush class
- ceph (luminous 版) crush map 管理
- CEPH CRUSH
- ceph Luminous dashboard初探
- Ceph新长支持稳定版本Luminous(12.x.x)新功能总结
- ceph的CRUSH算法
- ceph osdmap crush 分析
- 大话ceph crush
- ceph crush 基本操作
- Ceph剖析:数据分布之CRUSH算法与一致性Hash
- Ceph剖析:数据分布之CRUSH算法与一致性Hash
- Ceph学习之Crush算法—— 整体介绍
- Ceph学习之Crush算法—— Bucket
- Ceph剖析:数据分布之CRUSH算法与一致性Hash
- Ceph-智能分布CRUSH之Object与PG与OSD
- Ceph-智能分布CRUSH之Object与PG与OSD
- ceph (luminous 版) 用户管理
- ceph (luminous 版) pool 管理
- C++使用初始化列表的方式来初始化字段
- markdown 常用通用语法
- 线程间的通讯
- android studio library生成jar包和aar的方法总结
- centos6.5编译open-jdk
- ceph Luminous新功能之crush class
- python 实现动态行转列
- [leetcode]239. Sliding Window Maximum
- 在Mac上Git的使用(三)
- appcan mediacss
- 2017上海市高校程序设计邀请赛_G
- TCP的三次握手和四次挥手
- 安装Linux的Java Web环境
- 数据库基础(面试常见题)