ceph crushmap choose规则分析
时间:2022-07-22
本文章向大家介绍ceph crushmap choose规则分析,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1. Placement Rules
1.1 模拟代码
tack(a)
choose
choose firstn {num} type {bucket-type}
chooseleaf firstn {num} type {bucket-type}
if {num} == 0, choose pool-num-replicas buckets (all available).
if {num} > 0 && < pool-num-replicas, choose that many buckets.
if {num} < 0, it means pool-num-replicas - {num}.
emit
1.2 Placement Rules的执行流程
- take操作选择一个bucket, 一般是root类型的bucket.
- choose操作有不同的选择方式,其输入都是上一步的输出:
a. choose firstn深度优先选择出num个类型为bucket-type个的子bucket.
b. chooseleaf先选择出num个类型为bucket-type个子bucket,然后递归到叶节点,选择一个OSD设备:
- 如果num为0, num就为pool设置的副本数。
- 如果num大于0, 小于pool的副本数,那么久选择出num个。
- 如果num小于0,就选择出pool的副本数减去num的绝对值。
- emit输出结果
2. 实战模拟演练
2.1 演练列表
ruleset_id |
choose num |
chooseleaf_num |
结论 |
---|---|---|---|
0 |
firstn 0 type pod |
firstn 0 type rack |
pg三个副本分布: - 同一个pod下 - 不同rack下 |
1 |
firstn 1 type pod |
firstn 0 type rack |
pg三个副本分布: - 同一个pod下 - 不同rack下 |
2 |
firstn 2 type pod |
firstn 0 type rack |
pg三个副本分布: - 同一个pod下 - 不同rack下 |
3 |
firstn 3 type pod |
firstn 0 type rack |
pg三个副本分布: - 同一个pod下 - 不同rack下 |
4 |
firstn 4 type pod |
firstn 0 type rack |
pg三个副本分布: - 同一个pod下 - 不同rack下 |
5 |
firstn 1 type pod |
firstn 1 type rack |
pg三个副本分布: - 同一个pod下 - 不同rack下 |
6 |
firstn 1 type pod |
firstn 2 type rack |
pg三个副本分布: - 同一个pod下 - 不同rack下 |
7 |
firstn 1 type pod |
firstn 3 type rack |
pg三个副本分布: - 同一个pod下 - 不同rack下 |
8 |
firstn 1 type pod |
firstn 4 type rack |
pg三个副本分布: - 同一个pod下 - 不同rack下 |
9 |
firstn 0 type pod |
pg三个副本分布: - 不同pod下 |
|
10 |
firstn 0 type rack |
pg三个副本分布: - 不同rack下 |
- 关于ORA-01779问题的分析和解决 (r4笔记第22天)
- 想看爱奇艺VIP视频?一个python脚本帮你搞定
- Spring+SpringMVC+MyBatis+easyUI整合进阶篇(十四)Redis缓存正确的使用姿势
- 关于shell中的pl/sql脚本错误排查与分析(r4笔记第21天)
- 关于BFC不会被浮动元素遮盖的一些解释
- MyBatis + MySQL返回插入成功后的主键id
- struts2+spring+hibernate整合步骤(1)
- 微信公众号问题:{"errcode":40125,"errmsg":"invalid appsecret, view more at http://t.cn/LOEdzVq, hints: [
- reflow和repaint(摘录自张鑫旭的翻译)
- git删除本地分支
- org.springframework.data.redis.serializer.SerializationException: Cannot serialize;
- 样式化加载失败的图片
- 使用telnet命令验证邮箱(r4笔记第19天)
- Spring+SpringMVC+MyBatis+easyUI整合进阶篇(十二)Spring集成Redis缓存
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法