Ceph的参数mon_osd_down_out_subtree_limit细解
前言
之前跟一个朋友沟通一个其他的问题的时候,发现了有一个参数 mon osd down out subtree limit 一直没有接触到,看了一下这个参数还是很有作用的,本篇将讲述这个参数的作用和使用的场景
测试环境准备
首先配置一个集群环境,配置基本参数
mon_osd_down_out_interval = 20
调整这个参数为20s,默认为300s,默认一个osd,down超过300s就会标记为out,然后触发迁移,这个是为了方便尽快看到测试的效果,很多测试都是可以这样缩短测试周期的
本次测试关心的是这个参数 mon osd down out subtree limit
参数,那么这个参数做什么用的,我们来看看
[root@lab8106 ceph]# ceph --show-config|grep mon_osd_down_out_subtree_limit
mon_osd_down_out_subtree_limit = rack
首先解释下这个参数是做什么的,这个是控制标记为out的最小子树(bucket),默认的这个为rack,这个可能我们平时感知不到这个有什么作用,大部分情况下,我们一般都为主机分组或者做了故障域,也很少做到测试去触发它,本篇文章将告诉你这个参数在什么情况下生效,对我们又有什么作用
准备两个物理节点,每个节点上3个osd,一共六个osd,上面的down out的时间已经修改为20s,那么会在20s后出现out的情况
测试过程
测试默认参数停止一台主机单个OSD
首先用默认的mon_osd_down_out_subtree_limit = rack去做测试
开启几个监控终端方便观察
ceph -w
watch ceph osd tree
在其中的一台上执行
systemctl stop ceph-osd@5
测试输出
2016-10-13 10:15:39.673898 mon.0 [INF] osd.5 out (down for 20.253201)
2016-10-13 10:15:39.757399 mon.0 [INF] osdmap e60: 6 osds: 5 up, 5 in
停止一个后正常out
测试默认参数停止掉一台主机所有osd
我们再来停止一台主机所有osd
systemctl stop ceph-osd.target
测试输出
2016-10-13 10:17:09.699129 mon.0 [INF] osd.3 out (down for 23.966959)
2016-10-13 10:17:09.699178 mon.0 [INF] osd.4 out (down for 23.966958)
2016-10-13 10:17:09.699222 mon.0 [INF] osd.5 out (down for 23.966958)
可以看到这台主机上的节点全部都正常out了
测试修改参数后停止一台主机单个OSD
我们再调整下参数
mon_osd_down_out_subtree_limit = rack
将这个参数设置为host
mon_osd_down_out_subtree_limit = host
重启所有的进程,让配置生效,我们测试下只断一个osd的时候能不能out
systemctl stop ceph-osd@5
停止掉osd.5
测试输出
2016-10-13 10:48:45.612206 mon.0 [INF] osd.5 out (down for 21.966238)
可以看到可以osd.5可以正常的out
测试修改参数后停止一台主机所有OSD
我们再来停止lab8107的所有的osd
systemctl stop ceph-osd.target
停止掉 lab8107 所有的osd,可以看到没有out了,这个是因为把故障out设置为host级别了,这个地方出现host级别故障的时候,就不进行迁移了
总结
关键的地方在于总结了,首先我们要想一想,ceph机器的迁移开不开(noout),关于这个问题,一定有两个答案
- 开,不开的话,盘再坏怎么办,就会丢数据了
- 不开,人工触发,默认的情况下迁移数据会影响前端业务
这里这个参数其实就是将我们的问题更加细腻的控制了,我们现在根据这个参数就能做到,迁移可以开,坏掉一个盘的时候我让它迁移,一个盘的数据恢复影响和时间是可以接受的,主机损坏我不让他迁移,为什么?主机损坏你去让他迁移,首先会生成一份数据,等主机好了,数据又要删除一份数据,这个对于磁盘都是消耗,主机级别的故障一定是可修复的,这个地方主机down机,主机电源损坏,这部分数据都是在的,那么这个地方就是需要人工去做这个修复的工作的,对于前端的服务是透明的,默认的控制是down rack才不去标记out,这个当然你也可以控制为这个,比如有个rack掉电,就不做恢复,如果down了两台主机,让他去做恢复,当然个人不建议这么做,这个控制就是自己去判断这个地方需要做不
ceph里面还是提供了一些细微粒度的控制,值得去与实际的应用场景结合,当然默认的参数已经能应付大部分的场景,控制的更细只是让其变得更好
变更记录
| Why | Who | When |
|---|---|---|
| 创建 | 武汉-运维-磨渣 | 2016-10-13 |
Ceph的参数mon_osd_down_out_subtree_limit细解的更多相关文章
- 细解JavaScript ES7 ES8 ES9 新特性
题记:本文提供了一个在线PPT版本,方便您浏览 细解JAVASCRIPT ES7 ES8 ES9 新特性 在线PPT ver 本文的大部分内容译自作者Axel Rauschmayer博士的网站,想了解 ...
- vuex2.0.0爬坑记录 -- mutations的第一个参数state不能解构
今天在学习vuex的过程中,遇到了一个很困扰人的问题,最终利用vuex的状态快照工具logger解决了问题. 问题是这样的,我在子组件中使用了mapState()函数来将状态映射至子组件中,使子组件能 ...
- Scala 深入浅出实战经典 第62讲:Scala中上下文界定内幕中的隐式参数实战详解
王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-87讲)完整视频.PPT.代码下载: 百度云盘:http://pan.baidu.com/s/1c0noOt ...
- Scala 深入浅出实战经典 第60讲:Scala中隐式参数实战详解以及在Spark中的应用源码解析
王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-87讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...
- Oracle GoldenGate中HANDLECOLLISIONS参数使用详解
Oracle GoldenGate中HANDLECOLLISIONS参数使用详解 HANDLECOLLISIONS 是一个 replicat 进程参数,主要在 initial load 中使用.在 ...
- 机器学习——随机森林,RandomForestClassifier参数含义详解
1.随机森林模型 clf = RandomForestClassifier(n_estimators=200, criterion='entropy', max_depth=4) rf_clf = c ...
- DAX/PowerBI系列 - 查询参数用法详解(Query Parameter)
PowerBI - 查询参数用法详解(Query Parameter) 很多人都不知道查询参数用来干啥,下面总结一下日常项目中常用的几个查询参数的地方.(本人不太欢hardcode的东西) 使用查询 ...
- MySQL高可用架构之Mycat-关于Mycat安装和参数设置详解
MySQL高可用架构之Mycat-关于Mycat安装和参数设置详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Mycat介绍 1>.什么是Mycat Mycat背后是 ...
- 函数、可变参数、keyword-only参数、实参解构
函数的数学定义:y=f(x) ,y是x的函数,x是自变量.y=f(x0, x1, ..., xn) python中的函数: 由函数名称.参数列表.和若干语句组成的语句块构成,完成一定的功能,是组织代码 ...
随机推荐
- Exists 和Not Exists使用
描述:exists表示()内子查询语句返回结果不为空说明where条件成立就会执行主sql语句,如果为空就表示where条件不成立,sql语句就不会执行.not exists和exists相反,子查询 ...
- Jmeter之参数化函数助手__randomstring
1.Tools->函数助手对话框,选择__Random String,2表示随机生成的字符长度:3表示从哪些字符中随机生成:然后点击生成,得到对应的变量: 5中372表示该函数随机生成的字符串, ...
- Linux操作系统的基本介绍
01 操作系统的概述介绍 操作系统(Operating System,简称OS)是管理计算机硬件与软件资源的计算机程序.操作系统需要处理如管理与配置内存.决定系统资源供需的优先次序.控制输入设备与输出 ...
- sqlserver安装失败,此计算机上安装了 Microsoft Visual Studio 2008 的早期版本解决方法
安装sql server 2008 management,提示错误:此计算机上安装了 Microsoft Visual Studio 2008 的早期版本.请在安装 SQL Server 2008 前 ...
- Visual Studio2015 、2017中如何支持MYSQL数据源(转)
转至:https://blog.csdn.net/ght886/article/details/80902457 Visual Studio默认只显示微软自己的SQL Server数据源,如下图所示: ...
- Docker学习笔记之-通过Xshell连接 CentOS服务
上一节演示如何在虚拟机中安装 CentOS服务,Docker学习笔记之-在虚拟机VM上安装CentOS 7.8 本节主要演示如何通过 Xshell软件链接CentOS服务,本例以虚拟机作为演示,直接在 ...
- Java中的微信支付(1):API V3版本签名详解
1. 前言 最近在折腾微信支付,证书还是比较烦人的,所以有必要分享一些经验,减少你在开发微信支付时的踩坑.目前微信支付的API已经发展到V3版本,采用了流行的Restful风格. 今天来分享微信支付的 ...
- CentOS7 Nginx-1.10.3编译安装
cat > nginx.sh <<EOF #停止apache,避免抢占端口号 systemctl stop httpd #创建nginx运行账户,非登录用户,不创建家目录 usera ...
- Cocos2d-x extensions库使用问题解决方法
需要在加入头文件#include "cocos-ext.h" 1>e:\cocos\cocos2d-x\cocos2d-x-3.10\extensions\gui\cccon ...
- drf 路由生成
前言 在drf中,我们写接口可以通过继承modelViewSet从而达到非常快速的功能实现,这十分的方便,但是modelViewSet由于需要根据不同的参数来对应不同的处理,所以我们写的url最少都需 ...