ceph mgr balancer模块执行流程与配置方案
随着OSD的更替和集群的扩缩容,PG在OSD的分布会逐渐变的不均衡,导致各OSD的实际容量使用率出现差异,集群整体使用率降低。ceph balancer模块就是通过调整权重或者upmap指定pg映射来让pg分布均匀的模块,分为upmap模式和crush-compat模式,本文基于Pacific版本,主要分析和使用upmap模式的运行流程。
balancer模块运行流程
blancer模块执行流程概览:
ceph 的 balancer 分为 upmap 和 crush-compat两种模式,只能采用一种设置,对比两种模式 :
实现方式
crush-compat 会在 crush map 中生成单独的choose_args 列表,包含调整过后的权重集,依靠该列表调整数据的分布,执行 ceph crush dump
可以查看, 例如:
"choose_args": {
"-1": [
{
"bucket_id": -1,
"weight_set": [
[
0.1983489990234375,
0.1943206787109375,
0.1934051513671875
]
]
},
{
"bucket_id": -2,
"weight_set": [
[
0.1983489990234375,
0.1943206787109375,
0.1934051513671875
]
]
},
{
"bucket_id": -3,
"weight_set": [
[
0.1060638427734375,
0.09228515625
]
]
},
{
"bucket_id": -4,
"weight_set": [
[
0.1060638427734375,
0.09228515625
]
]
},
{
"bucket_id": -5,
"weight_set": [
[
0.096160888671875,
0.0981597900390625
]
]
},
{
"bucket_id": -6,
"weight_set": [
[
0.096160888671875,
0.0981597900390625
]
]
},
{
"bucket_id": -7,
"weight_set": [
[
0.0999908447265625,
0.093414306640625
]
]
},
{
"bucket_id": -8,
"weight_set": [
[
0.0999908447265625,
0.093414306640625
]
]
}
]
}
upmap 模式会在 osd map 中生成 pg 的映射关系,例如第一条表示,将 PG 3.1e 从 OSD5 迁移到 OSD2 上:
pg_upmap_items 3.1e [5,2]
pg_upmap_items 3.27 [4,0]
pg_upmap_items 3.28 [5,2]
pg_upmap_items 3.29 [5,2]
pg_upmap_items 3.33 [5,2]
pg_upmap_items 3.3e [5,2]
版本
- crush-compat 模式兼容所有版本的客户端,客户端来请求OSDMap和CRUSH map,会使用choose_args结构(balancer调整后生成)中的权重。
- upmap 模式不支持 L 版本以下的客户端。
影响范围
crush-compat 模式根据权重控制 OSD 分布,集群会根据该规则对 PG 做重映射,无法控制影响的 PG 范围。
upmap 根据用户设置的可容忍最大 PG 偏离数和每周期最多可以调整多少个 PG 来控制 PG 重映射影响的范围。
upmap 运行流程
打开 OSD 日志 ceph tell mgr.* config set debug_osd 30/30
,对比 upmap 执行代码流程进行分析,绿色为mgr python模块,蓝色为日志打印。
图中的流程表示:在双副本存储池下,把 pg 3.28 的 up_set 从 [3,5] 改为 [3,2],即把 pg 3.28 从 osd.5 移到 osd.2。
参数
时间参数
mgr/balancer/begin_time: 开始的时间,格式为HM,例如 0000 mgr/balancer/end_time:结束时间,格式为HM,例如 0100 mgr/balancer/begin_weekday:拜几开始,可取值1、2、3、4、5、6、7,例如 2
mgr/balancer/end_weekday:礼拜几结束,可取值1、2、3、4、5、6、7,例如 7
mgr/balancer/sleep_interval:balancer休眠多少秒后执行调整操作,例如 180
upmap 关联的控制参数
mgr/balancer/active:是否启用balancer模块,true/false,例如 true
mgr/balancer/mode:balancer模式,分upmap和crush-compat,例如 upmap
mgr/balancer/upmap_max_deviation:允许偏离几个OSD,例如 5 mgr/balancer/upmap_max_optimizations:每次开始balancer最多调优多少轮退出,例如 10
crush-compat 关联的控制参数
mgr/balancer/crush_compat_max_iterations:按照指定步长最多可调整多少次,例如 25 mgr/balancer/crush_compat_metrics:参与score计算的指标,例如pgs,objects,bytes mgr/balancer/crush_compat_step:权重调整的步长,控制调整的权重精确度,例如0.500000 mgr/balancer/min_score:要调整到小于等于该score才表示调整完成,例如 0.020000 mgr/balancer/mode:调整模式,例如crush-compat
配置方案
无人值守
方案说明:开启 balancer 并且打开为 upmap 模式,分别针对 id 为 2 和 3 的存储池进行优化, balancer 执行周期为每天凌晨 2:00~5:00,在 balancer 执行周期内,检测是否存储池的 OSD 之间 PG 数量差异超过 5,若超过则进行优化,如果优化计算 10 次仍然无法将差值调整到低于 5 个 PG,则 balancer 睡眠 180 秒后再尝试优化。
ceph config set mgr mgr/balancer/active true
ceph config set mgr mgr/balancer/mode upmap
ceph config set mgr mgr/balancer/begin_weekday 1
ceph config set mgr mgr/balancer/end_weekday 7
ceph config set mgr mgr/balancer/begin_time 0200
ceph config set mgr mgr/balancer/end_time 0500
ceph config set mgr mgr/balancer/sleep_interval 180
ceph config set mgr mgr/balancer/upmap_max_deviation 5
ceph config set mgr mgr/balancer/upmap_max_optimizations 10
ceph config set mgr mgr/balancer/pool_ids 2,3
注意:
- 将
mgr/balancer/pool_ids
设置为真实环境的 pool id - 在执行 balancer 的期间不要做性能测试,PG backfill 会占用额外的资源
人工判断
可以选择关闭 balancer,由管理人员判断是否要进行均衡,随着 OSD 的更替,集群的扩缩容,PG 数量会变得不均衡,比如容量的使用率偏差超过了 20%,可以由管理员选择时间开启 balancer,设置指定的时间段。
观察哪个 OSD 上的 PG 数量偏差最大,以此为基准,逐步降低 upmap_max_deviation
,例如 osd.1 的 PG 数比该存储池中所有 OSD 的平均 pg 数多 30 个,可以调整 upmap_max_deviation
为 20, 等待集群 backfill 完成后,如果不满足容量偏差的容忍程度,继续降低 upmap_max_deviation
开始下一轮调整。
测试
调整前:
[root@ceph-01 ~]# ceph osd df tree
ID CLASS WEIGHT REWEIGHT SIZE RAW USE DATA OMAP META AVAIL %USE VAR PGS STATUS TYPE NAME
-1 0.58612 - 600 GiB 81 GiB 74 GiB 408 MiB 6.4 GiB 519 GiB 13.50 1.00 - root default
-3 0.19537 - 200 GiB 27 GiB 25 GiB 139 MiB 2.1 GiB 173 GiB 13.56 1.00 - host ceph-01
2 hdd 0.09769 1.00000 100 GiB 11 GiB 9.7 GiB 72 MiB 1008 MiB 89 GiB 10.76 0.80 23 up osd.2
5 hdd 0.09769 1.00000 100 GiB 16 GiB 15 GiB 67 MiB 1.1 GiB 84 GiB 16.36 1.21 31 up osd.5
-5 0.19537 - 200 GiB 30 GiB 27 GiB 92 MiB 2.8 GiB 170 GiB 15.09 1.12 - host ceph-02
1 hdd 0.09769 1.00000 100 GiB 15 GiB 13 GiB 37 MiB 1.5 GiB 85 GiB 14.84 1.10 28 up osd.1
4 hdd 0.09769 1.00000 100 GiB 15 GiB 14 GiB 55 MiB 1.3 GiB 85 GiB 15.35 1.14 29 up osd.4
-7 0.19537 - 200 GiB 24 GiB 22 GiB 177 MiB 1.6 GiB 176 GiB 11.86 0.88 - host ceph-03
0 hdd 0.09769 1.00000 100 GiB 11 GiB 9.8 GiB 107 MiB 1.1 GiB 89 GiB 10.99 0.81 25 up osd.0
3 hdd 0.09769 1.00000 100 GiB 13 GiB 12 GiB 70 MiB 501 MiB 87 GiB 12.72 0.94 27 up osd.3
TOTAL 600 GiB 81 GiB 74 GiB 408 MiB 6.4 GiB 519 GiB 13.50
MIN/MAX VAR: 0.80/1.21 STDDEV: 2.15
调整后:
[root@ceph-01 ~]# ceph osd df tree
ID CLASS WEIGHT REWEIGHT SIZE RAW USE DATA OMAP META AVAIL %USE VAR PGS STATUS TYPE NAME
-1 0.58612 - 600 GiB 82 GiB 74 GiB 408 MiB 7.0 GiB 518 GiB 13.60 1.00 - root default
-3 0.19537 - 200 GiB 27 GiB 25 GiB 139 MiB 2.3 GiB 173 GiB 13.70 1.01 - host ceph-01
2 hdd 0.09769 1.00000 100 GiB 14 GiB 13 GiB 72 MiB 1.3 GiB 86 GiB 13.93 1.02 28 up osd.2
5 hdd 0.09769 1.00000 100 GiB 13 GiB 12 GiB 67 MiB 1.1 GiB 87 GiB 13.47 0.99 26 up osd.5
-5 0.19537 - 200 GiB 28 GiB 25 GiB 92 MiB 2.8 GiB 172 GiB 14.17 1.04 - host ceph-02
1 hdd 0.09769 1.00000 100 GiB 14 GiB 13 GiB 37 MiB 1.5 GiB 86 GiB 14.23 1.05 27 up osd.1
4 hdd 0.09769 1.00000 100 GiB 14 GiB 13 GiB 55 MiB 1.3 GiB 86 GiB 14.10 1.04 27 up osd.4
-7 0.19537 - 200 GiB 26 GiB 24 GiB 177 MiB 1.8 GiB 174 GiB 12.93 0.95 - host ceph-03
0 hdd 0.09769 1.00000 100 GiB 13 GiB 12 GiB 107 MiB 1.4 GiB 87 GiB 13.14 0.97 28 up osd.0
3 hdd 0.09769 1.00000 100 GiB 13 GiB 12 GiB 70 MiB 501 MiB 87 GiB 12.72 0.94 27 up osd.3
TOTAL 600 GiB 82 GiB 74 GiB 408 MiB 7.0 GiB 518 GiB 13.60
MIN/MAX VAR: 0.94/1.05 STDDEV: 0.54
OSD 上的 PG 数量偏差已经小于等于设置的 2,CRUSH 规则没有被改变,OSD 的容量也变得均衡了。
ceph mgr balancer模块执行流程与配置方案的更多相关文章
- ceph luminous 新功能之内置dashboard 之 mgr功能模块配置
前言 ceph luminous版本新增加了很多有意思的功能,这个也是一个长期支持版本,所以这些新功能的特性还是很值得期待的,从底层的存储改造,消息方式的改变,以及一些之前未实现的功能的完成,都让ce ...
- struts2 之 【struts2简介,struts2开发步骤,struts2详细配置,struts2执行流程】
入门框架学习避免不了的问题: 1. 什么是框架? 简单的说,框架就是模板,模子,模型.就是一个可重用的半成品. 2. 如何学习框架? 学习框架其实就是学习规则,使用框架就是遵循框架的规则,框架是可变的 ...
- ceph 开启mgr balancer
参考链接: mgr balancer模式探索及配置方法1 mgr balancer模式探索及配置方法2 1.ceph mgr module enable balancer [root@controll ...
- Struts框架之 执行流程 struts.xml 配置详细
1.执行流程 服务器启动: 1. 加载项目web.xml 2. 创建Struts核心过滤器对象, 执行filter → init() struts-default.xml, 核心功能的初 ...
- 《SpringMVC从入门到放肆》二、SpringMVC的执行流程及默认配置
上一篇博文我们做了一个hello world的程序,并且已经成功的跑起来了.这一篇我们来深入的了解一下SpringMVC的执行流程以及一些其它的配置. 一.执行流程 来解释一下上图中的各个名词1.Di ...
- Struts 2 执行流程 配置信息
Struts 2 执行流程 首先,浏览器访问,经过Filter,Filter从src/struts.xml中寻找命名空间和action的名字,获取action类,从方法中拿到返回值,接着从result ...
- SpringBoot项目构建、测试、热部署、配置原理、执行流程
SpringBoot项目构建.测试.热部署.配置原理.执行流程 一.项目构建 二.测试和热部署 三.配置原理 四.执行流程
- “Ceph浅析”系列之五——Ceph的工作原理及流程
本文将对Ceph的工作原理和若干关键工作流程进行扼要介绍.如前所述,由于Ceph的功能实现本质上依托于RADOS,因而,此处的介绍事实上也是针对RADOS进行.对于上层的部分,特别是RADOS GW和 ...
- Ceph的工作原理及流程
本文将对Ceph的工作原理和若干关键工作流程进行扼要介绍.如前所述,由于Ceph的功能实现本质上依托于RADOS,因而,此处的介绍事实上也是针对RADOS进行.对于上层的部分,特别是RADOS GW和 ...
- ThinkPHP中的跨控制器调用与框架执行流程
一.跨控制器调用 UserController.class.php <?php namespace Home/Controller use Think/Controller class User ...
随机推荐
- [每日算法 - 华为机试] leetcode345 :反转字符串中的元音字母「双指针」
入口 力扣https://leetcode.cn/problems/reverse-vowels-of-a-string/submissions/ 题目描述 给你一个字符串 s ,仅反转字符串中的所有 ...
- 深入理解Hadoop读书笔记-3
背景 公司的物流业务系统目前实现了使用storm集群进行过门事件的实时计算处理,但是还有一个需求,我们需要存储每个标签上传的每条明细数据,然后进行定期的标签报表统计,这个是目前的实时计算框架无法满足的 ...
- 什么是RESTful 或 GraphQL?
RESTful 与 GraphQL 深度解析 在前端的开发过程中,相信 everyone 对 Get.POST 等请求方式都很熟悉,那么这些请求是归于哪种架构或者设计风格可能又不是很熟.现在在这简单的 ...
- datasnap的restful服务器
说真话,这玩意真的简单好用.但你要控制好: 1.内存泄漏和异常处理好: 2.有没有发现,通过服务器对数据库进行读写时,在资源管理器中,如果是sql server,就会看到连接1433的连接一直挂在那里 ...
- FastAPI中Pydantic异步分布式唯一性校验
title: FastAPI中Pydantic异步分布式唯一性校验 date: 2025/04/02 00:47:55 updated: 2025/04/02 00:47:55 author: cmd ...
- C#/.NET/.NET Core技术前沿周刊 | 第 34 期(2025年4.7-4.13)
前言 C#/.NET/.NET Core技术前沿周刊,你的每周技术指南针!记录.追踪C#/.NET/.NET Core领域.生态的每周最新.最实用.最有价值的技术文章.社区动态.优质项目和学习资源等. ...
- 把 Java WebApi 快速转为 Mcp-Server(使用 Solon AI MCP)
solon-ai-mcp,提供了各种 mcp 相关能力,支持 java8, java11, java17, java21, java24 .是 solon-ai 项目的重要组成部分,也可以嵌入到 sp ...
- 太喜欢啦,浏览器中的SQL神器:WhatTheDuck让CSV分析像聊天一样简单!
嗨,大家好,我是小华同学,关注我们获得"最新.最全.最优质"开源项目和高效工作学习方法 基于DuckDB的轻量级Web应用 | 完全浏览器端运行 | 零数据泄露风险 | 支持复杂S ...
- Go-Spring v1.2.0 版本简介
引言 随着微服务和云原生架构的普及,Go 语言以其高并发.低延迟和简洁语法在后端开发领域迅速崛起.然而,原生 Go 在项目结构.依赖管理.配置热更新等方面相比 Java Spring 生态尚有短板.G ...
- Pandas 清除 Excel 特殊字符
清除 Excel 特殊字符 主要是为了做一个笔记, 用 遍历 DataFrame 用正则匹配特殊字符并替换. 是上个月初的项目了, 其中有个将 Excel 传入数据库的时候, 发现有特殊字符, 很奇怪 ...