转自: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. 洛谷 P2233 [HNOI]公交车线路

    洛谷 不知道大家做没做过传球游戏,这一题和传球游戏的转移方程几乎一样. 令\(A\)为\(1\)点,\(E\)为\(5\)点,那么\(f[i][j]\)代表第i步走到j的方案数. \[f[i][j]= ...

  2. Selenium定位不到指定元素原因之iframe(unable to locate element)

    浏览过程中,图片中的内容可能太小,无法看清,可以>右键>在新标签中打开 Outline 项目原因,需要用selenium实现模拟登陆.模拟上传文件,自然就需要模拟点击[上传]按钮: 模拟点 ...

  3. android学习五---OpenCV for android环境搭建

    学习android的目的是想在手机上实现计算机视觉的算法.一般算法的研究都是在Matlab上进行,但是手机平台没有那么多的计算资源,用matlab显然是不太现实的.而OpenCV是基于C++语言编写的 ...

  4. Redis一(Redis-py与String操作)

    Redis 介绍 redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(so ...

  5. CG group

    Linux CGroup全称Linux Control Group, 是Linux内核的一个功能,用来限制,控制与分离一个进程组群的资源(如CPU.内存.磁盘输入输出等).这个项目最早是由Google ...

  6. vue指令详解

    一.vue简绍 1. Vue.js是什么    Vue.js也称为Vue,读音/vju:/,类似view,错误读音v-u-e. 版本分为v1.0 和 v2.0 2.Vue.js的特点 1. 是一个构建 ...

  7. 运用SQLAlchemy

    result = engine.execute(s) for row in result: Info["UserId"]=row[0] Info["UserTitle&q ...

  8. Python(模块(modue)、包(package))

    ''' 一 模块 模块一共三种: python标准库 第三方模块 应用程序自定义模块 模块两种执行方式: 1 用于启动执行 2 用于被调用执行 key:import module: 将执行文件(mod ...

  9. [WebException: The underlying connection was closed: The message length limit was exceeded.]解决方法

    [WebException: The underlying connection was closed: The message length limit was exceeded.]   Syste ...

  10. Top 10 Uses For A Message Queue

    We’ve been working with, building, and evangelising message queues for the last year, and it’s no se ...