前言

很久没有处理很大的集群,在接触一个新集群的时候,如果集群足够大,需要比较长的时间才能去理解这个集群的结构,而直接去看ceph osd tree的结果,当然是可以的,这里是把osd tree的结构进行了一个结构化输出,也可以理解为画出一个简单的结构图,比较适合给其它人讲解你对crush做了哪些改变,这个如果指着文字来讲估计很多人会听的云里雾里,如果有比较方便的方式出图就比较好了

为此写了一个小工具自己用,正好也可以看看我们对结构做简单调整后的效果

创建一个模拟集群

环境就一台机器,不需要用到磁盘,这里是模拟结构

创建一个大集群40台机器

seq 1 40 |xargs -i ceph  osd crush add-bucket lab{} host
seq 1 40|xargs -i ceph osd crush move lab{} root=default

创建一个960个的集群

seq 1 960 |xargs -i ceph osd create

放到指定的主机

#! /bin/sh
for osd in `seq 0 959`
do
host=$(( (($osd / 24)) + 1 ))
ceph osd crush create-or-move osd.$osd 3.6 host=lab$host &
done

这里后台执行会快点,不然得等15分钟,执行完检查下有没有还在处理的进程即可

ps -ef|grep create-or-move

osd的一些结构

机器如果在远程可以上传临时文件

ceph osd tree -f json-pretty > zp.json
curl --upload-file ./zp.json https://transfer.sh/zp.json

得到的地址下载即可

默认结构,主机分组

960个osd的效果如图,节点太多了,图片本身输出的时候是高清图片可以放大去看的,并且主机如果不是这么多,显示效果会好一点,这里我们看的清楚是主机分组的

调整下rack结构

seq 1 8|xargs -i ceph  osd crush add-bucket rack{} rack
seq 1 8|xargs -i ceph osd crush move rack{} root=default
#! /bin/sh
for host in `seq 1 40`
do
rack=$(( (((($host - 1)) / 5)) + 1 ))
ceph osd crush move lab$host rack=rack$rack &
done

调整完结构我们再看下

可以看到已经是多层的结构了,这个机器太多,我们来看下稍微少点机器的效果

12台机器每台12个osd的效果

主机分组

rack分组

后面的两个图的就比较清晰了

工具的一个作用是,在调整结构后,能够比较方便的去检查osd的结构,是不是均匀的,有没有调整错误,有没有某个host里面的osd个数跟其他不一样,这几种情况之前都遇到过

  • 分rack的时候rack里面主机数目不一致,怎么调整pg都是不平衡
  • 加osd的时候,某个主机的osd给漏掉了

如果你面对的是几十个osd的时候,你还会看看,当超过一百个的时候,一般来说就是走过场了,都会侥幸的认为,应该没事吧,好像是对的,当然通过各种方式都能实现

目前这个小工具是直接运行直接出图的,配色后面再处理下效果

总结

这个tree的图一直以为之前有写过,但是找不到代码了,重新实现了一次,也算一个梳理,这个图只是作为一个更大的体系里面很小的一部分的模块

本篇同样给出了模拟大集群的方式

Just for Fun

变更记录

Why Who When
创建 武汉-运维-磨渣 2018-09-19

最新文章

  1. IE 6 ~ 9 CSS Hack 写法总结
  2. 深入了解Windows
  3. serv-u启动管理控制台后提示脚本错误解决方案
  4. Lucene 4.X 倒排索引原理与实现: (2) 倒排表的格式设计
  5. Linq学习笔记---Linq to Sql之where
  6. HDU 5100
  7. Static、final、abstract、接口、构造方法及java语法总结
  8. jsonp获取服务器数据的方式
  9. 玩转Slot Machine
  10. POJ_3061_Subsequence_(尺取法)
  11. Ehcache简单说明及使用
  12. .Net SSRS(rdlc) 报表经验总结
  13. Hyperion Essbase BusinessRule 函数学习--2
  14. LeetCode 169. Majority Element (众数)
  15. IE6浏览器有哪些常见的bug,缺陷或者与标准不一致的地方,如何解决
  16. Vue控制路由滚动行为
  17. 6个讨喜的 ES6 小技巧
  18. FastReport.Net 入门
  19. [leetcode]Maximum Subarray @ Python
  20. java基础24 线程、多线程及线程的生命周期(Thread)

热门文章

  1. 资源管理神器Clover
  2. linux-设置hostname
  3. php超全局数组 为什么swoole的http服务不能用
  4. win10开机启动文件夹
  5. 存储系列1-openfiler开源存储管理平台实践
  6. 性能测试之JVM的故障排查-堆内存泄漏
  7. springboot集成spring security(一)
  8. Python ( 学习基础篇 第二部 )
  9. 【Flutter 1-1】8个Flutter的优势以及为什么要在下一个项目中尝试Flutter
  10. instanceof语法解释