转自: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. python逆向工程:通过代码生成类图

    python逆向工程:通过代码生成类图 大致过程 现在有一个core包,里面有python的代码. 通过core包,生成python的类图,如下: 实施步骤: 1.首先安装graphviz,一个画图工 ...

  2. servlet 通过 FileItem 实现多文件上传

    [本文简介] 一个servlet 多文件上传的简单例子. [依赖包] commons-fileupload-1.3.1.jar commons-io-2.2.jar [依赖包下载] commons-f ...

  3. c++ ScopeExitGuard

    说到Native Languages就不得不说资源管理,因为资源管理向来都是Native Languages的一个大问题,其中内存管理又是资源当中的一个大问题,由于堆内存需要手动分配和释放,所以必须确 ...

  4. DELPHI在标题栏上增加按钮

    Delphi代码 unit Unit1; interface uses SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Contr ...

  5. delphi WebBrowser获取iframe页面内容及操作

    uses MSHTML, ActiveX; function GetFrame(FrameNo:Integer):IWebbrowser2;var OleContainer:IOleContainer ...

  6. VK Cup 2018 - Round 1+Codeforces Round #470

    A. Primal Sport 题意:有两个人轮流玩游戏.给出数X(i-1),轮到的人需要找到一个小于X(i-1)的素数x,然后得到Xi,Xi是x的倍数中大于等于X(i-1)的最小的数.现在已知X2, ...

  7. JQuery Ajax调用WCF实例以及遇到的问题

    1.遇到的最多的问题就是跨域问题,这个时间需要我们添加如下代码解决跨域的问题 第一步:在服务类加Attribute [AspNetCompatibilityRequirements(Requireme ...

  8. Linq To Object多字段组合唯一校验

    1.第一种方式 if(partsSalesOrderTypes.GroupBy(entity => new { entity.Name, entity.Code }).Any(array =&g ...

  9. bootstrap datatable 参考文档

    start:http://bootstrap-table.wenzhixin.net.cn/zh-cn/getting-started/ 扩展  http://issues.wenzhixin.net ...

  10. python之路 堡垒机paramiko

    paramiko 1.安装 pip3 install paramiko 二.使用 SSHClient 用于连接远程服务器并执行基本命令 基于用户名密码连接: import paramiko # 创建S ...