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下 |
- 爬虫必学知识之正则表达式上篇
- python爬虫常用库之requests详解
- python爬虫常用库之urllib详解
- 如何 build 出尽可能小的 docker image?
- 一步一步教你如何用python操作mysql
- 利用Python实现卷积神经网络的可视化
- SDP(13): Scala.Future - far from completion,绝不能用来做甩手掌柜
- 干货|浅谈强化学习的方法及学习路线
- 如何实时查看Docker容器占用的CPU、内存状态?
- [安全] mysqldump 备份的后门
- Elasticsearch 快速起步
- Mysql 高一致性复制结构
- Scrapy中如何提高数据的插入速度
- python基础语法(1)
- 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 数组属性和方法
- MySQL案例:count(*)效率优化
- MUI进行APP混合开发实现下拉刷新和上拉加载 原创
- Android 给控件添加边框阴影效果
- 详解Android Selinux 权限及问题
- Android图片采样缩放功能实例代码
- Android开发中使用Intent打开第三方应用及验证可用性的方法详解
- Android 7.0开发获取存储设备信息的方法
- Android中默认系统的声音/大小修改和配置详解
- Android开发中计算器的sin、cos及tan值计算问题分析
- Android开发实现绘制淘宝收益图折线效果示例
- Android自定义View实现搜索框(SearchView)功能
- android 监听SD卡文件变化的实现代码
- Android监听手机短信的示例代码
- Android开发之图片压缩工具类完整实例
- Android6.0开发中屏幕旋转原理与流程分析