转自:https://www.ustack.com/blog/ceph%e9%85%8d%e7%bd%ae%e9%a1%b9%e5%8a%a8%e6%80%81%e5%8f%98%e6%9b%b4%e6%9c%ba%e5%88%b6%e6%b5%85%e6%9e%90/

OpenStack做一个log级别的变更就得重启,很耗费时间。本篇主要是向大家介绍一下ceph tell是如何便捷地实现log级别的变更的,并展开来介绍Ceph是如何动态管理配置项的。Ceph tell命令tell命令能够让你在一台主机上操作所有的osd,会对运维工作带来很大的便利,首先来看一下ceph tell都能做哪些事情呢?

我们再来看看tell是怎么做到的,这里我们将主要精力放在osd的injectargs上面(因为能够动态改变配置),其它的都可以,以此类推。简单的说在osd启动的时候会初始化一些工作队列,也就是wq,而其中一个就是command_wq,该队列的处理函数主要是调用do_command函数,在该函数中对injectargs的处理是调用md_confit_t 的apply_changes,最终是调用注册的观察者,来对改变的配置做出响应。可以从以下三个方面展开来分析:

1、配置存放在哪里?

在osd启动的时候会初始化两个全局的指针g_ceph_context和g_conf。g_ceph_context是CephContext *的类型,g_conf是md_config_t*的类型。它们的关系是g_conf = g_ceph_context->_conf 。在初始化osd之前就会将g_ceph_context和g_conf给准备好,g_conf会从配置文件,环境变量,和命令行参数三个地方来初始化全局配置。这样为后续的操作做好准备。比如data目录,journal目录,osd的网络都需要从g_conf里读取。所以在osd init之前必须得把g_conf给准备好。
g_conf里配置项的内容是从配置文件解析得到的,首先会检查有没有设置环境变量$CEPH_CONF,然后再依次从$data_dir/config, /etc/ceph/$cluster.conf, ~/.ceph/$cluster.conf, $cluster.conf”;来读取配置,如果在前一个位置有配置,就会读取并解析,不会再去后面读取。所以不会出现前面的覆盖后面的情况。

2、配置的更新是如何做到的?

首先每一个osd都继承了md_config_obs_t类,md_config_obs_t 就是md_config_t的一个观察者,其关注的对象可以通过get_tracked_conf_keys()这个虚函数来获取到。OSD在pre_init的时候,将自己注册到md_confit_t的观察者map中,当md_confit_t apply_change的时候,会找到哪些观察者对要更新的参数感兴趣,然后就调用这些观察者的handle_conf_change()。从而实现obs状态的更新。具体到每一个obs,会根据不同的配置项调用相应的set方法,来完成配置项的更新。这里看一点代码应该就更清楚了。

从上面可以看到如果inject的参数没有观察者对其感兴趣,则你是没有办法改变的,而且会给你提示。但是conf确实发生了变化,只不过这个变化没有生效而已。

这里总结tell的流程如下:

3、关于配置项

从conf_opts.h文件来看,配置项主要有两类:一类是SUBSYSTEM的,一类是OPTION。
SUBSYSTEM主要定义了日志子系统写日志的级别。OPTION则主要定义了特定配置项的类型和初始的值。当injectargs的时候可以通过–debug_${system}=int/int 来改变子系统日志的级别。

总结

本篇从tell 命令出发,详解介绍了和osd相关的tell命令,然后深入到osd的配置管理中,讲述了Ceph是如何通过injectargs来实现动态改变配置的。

Ceph配置项动态变更机制浅析的更多相关文章

  1. 理解 QEMU/KVM 和 Ceph(1):QEMU-KVM 和 Ceph RBD 的 缓存机制总结

    本系列文章会总结 QEMU/KVM 和 Ceph 之间的整合: (1)QEMU-KVM 和 Ceph RBD 的 缓存机制总结 (2)QEMU 的 RBD 块驱动(block driver) (3)存 ...

  2. InnoDB的锁机制浅析(三)—幻读

    文章总共分为五个部分: InnoDB的锁机制浅析(一)-基本概念/兼容矩阵 InnoDB的锁机制浅析(二)-探索InnoDB中的锁(Record锁/Gap锁/Next-key锁/插入意向锁) Inno ...

  3. InnoDB的锁机制浅析(All in One)

    目录 InnoDB的锁机制浅析 1. 前言 2. 锁基本概念 2.1 共享锁和排它锁 2.2 意向锁-Intention Locks 2.3 锁的兼容性 3. InnoDB中的锁 3.1 准备工作 3 ...

  4. Libco Hook 机制浅析

    Libco Hook 机制浅析 之前的文章里我们提到过 Libco 有一套 Hook 机制,可以通过协程的让出(yield)原语将系统的阻塞系统调用改造为非阻塞的,这篇文章我们将深入解析 Hook 机 ...

  5. Java 动态代理机制详解

    在学习Spring的时候,我们知道Spring主要有两大思想,一个是IoC,另一个就是AOP,对于IoC,依赖注入就不用多说了,而对于Spring的核心AOP来说,我们不但要知道怎么通过AOP来满足的 ...

  6. java的动态代理机制详解

    在学习Spring的时候,我们知道Spring主要有两大思想,一个是IoC,另一个就是AOP,对于IoC,依赖注入就不用多说了,而对于Spring的核心AOP来说,我们不但要知道怎么通过AOP来满足的 ...

  7. Linux模块机制浅析

    Linux模块机制浅析   Linux允许用户通过插入模块,实现干预内核的目的.一直以来,对linux的模块机制都不够清晰,因此本文对内核模块的加载机制进行简单地分析. 模块的Hello World! ...

  8. typecho流程原理和插件机制浅析(第二弹)

    typecho流程原理和插件机制浅析(第二弹) 兜兜 393 2014年04月02日 发布 推荐 1 推荐 收藏 14 收藏,3.7k 浏览 上一次说了 Typecho 大致的流程,今天简单说一下插件 ...

  9. typecho流程原理和插件机制浅析(第一弹)

    typecho流程原理和插件机制浅析(第一弹) 兜兜 393 2014年03月28日 发布 推荐 5 推荐 收藏 24 收藏,3.5k 浏览 虽然新版本0.9在多次跳票后终于发布了,在漫长的等待里始终 ...

随机推荐

  1. 原!tomcat启动超时(打印了几行日志,后面没了。也不报错,处于启动状态,直到超时)

    项目框架:spring+struts2+mybatis 今天优化代码,改了一堆mybatis dao和xml文件,启动项目时,就出现如标题描述的状况:打印了几行日志,后面就不打印了,也不报错,处于启动 ...

  2. 快压、360压缩、WinRAR关于打开快压通过超高压缩比压缩后的文件不兼容的问题

    今天接收了同事发过来的一个压缩文件,用360压缩打开和用WinRAR打开压缩文件,傻眼了,这发的是什么鬼压缩包.压缩包的文件大小有27533KB,用360压缩工具解压查看只有121.5kb,而且完全没 ...

  3. ios开发之手势动作状态细分state,同一视图加入两个手势

    1.比方拖拽一个视图.形成类似scrollView的翻页形式 在拖拽的方法里推断拖拽的状态state属性,依据状态不同运行自己须要的效果. 2.同一视图加入两个手势,须要使用手势的代理方法.同意此操作 ...

  4. 六顶思维帽的思考,敏捷开发?——By Me

    人类的思维可以分为很多种,其中按照思维的深度和广度的侧重,可以分为纵向思维和横向思维两种: 简单的来说,“六顶思维帽”可以简单的理解为下图所示: 如何使用这种思维方式呢?举个例子:先输入一个待讨论的事 ...

  5. 删除pentaho用户和用户文件夹

    获取所有用户 http://xxxxxxxx.com:8888/pentaho/api/repo/files/home/children 获取单个用户 http://whfxpt.itestcn.co ...

  6. PAT 1035 Password [字符串][简单]

    1035 Password (20 分) To prepare for PAT, the judge sometimes has to generate random passwords for th ...

  7. Linux基础——centos 跳过管理员密码进行登录(单用户模式、救援模式)

    这里列举了两种更改或者取消管理员密码登录Linux系统的方法,其实两种方法类似,都是想方设法跳过用户认定,直接更改用户文件.更改密码的过程. 为了跳过系统正常启动过程中的某些步骤,必须知道大致的系统启 ...

  8. 基于WinIO 3.0实现驱动级键盘模拟输入

    基于WinIO 3.0实现驱动级键盘模拟输入 一个业务场景需要使用驱动级的键盘模拟,折腾了2天,总结一下,为后人节省时间. 限制条件: 1.需要真实PC机,虚拟机不行 2.仅支持PS/2 键盘(指外接 ...

  9. 其他机器访问本机redis服务器

  10. jQuery音乐播放器jPlayer

    在线演示 本地下载