ceph mds启动流程

本文的所有的分析仅基于个人理解,代码基于ceph nautilus版本

MDSDaemon Start

首先一切的开始自然是mds进程的上电过程:

src/ceph_mds.cc

int main(int argc, const char **argv)
{
   
   

  // 全局初始化,任何类型ceph daemon启动时都需要调用global_init来完成一些初始化工作
  auto cct = global_init(NULL, args,
             CEPH_ENTITY_TYPE_MDS, CODE_ENVIRONMENT_DAEMON,
             0, "mds_data");
  // 初始化堆栈分析器,如果设置了CEPH_HEAP_PROFILER_INIT的环境变量后才会启动,且需要google-perftools才能使用
  // 默认情况下是不启动的,后续可以通过ceph tell mds.$name heap start_profiler来启动
  ceph_heap_profiler_init();


  // 对fork的封装
  Preforker forker;

  entity_addrvec_t addrs;
  pick_addresses(g_ceph_context, CEPH_PICK_ADDRESS_PUBLIC, &addrs);

  // Normal startup
  if (g_conf()->name.has_default_id()) {
   
   
    derr << "must specify '-i name' with the ceph-mds instance name" << dendl;
    exit(1);
  }

  if (g_conf()->name.get_id().empty() ||
      (g_conf()->name.get_id()[0] >= '0' && g_conf()->name.get_id()[0] <= '9')) {
   
   
    derr << "MDS id '" << g_conf()->name << "' is invalid. "
      "MDS names may not start with a numeric digit." << dendl;
    exit(1);
  }

  // fork子进程并等待子进程退出??
  if (global_init_prefork(g_ceph_context) >= 0) {
   
   
    std::string err;
    int r = forker.prefork(err);
    if (r < 0) {
   
   
      cerr << err << std::endl;
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值