ceph-deploy-mon的create函数
来源:互联网 发布:win7模仿mac主题2017 编辑:程序博客网 时间:2024/05/16 08:15
ceph-deploy的mon 命令用于管理mon守护进程其入口函数在E:\ceph-deploy-master\ceph-deploy-master\ceph_deploy\mon.py 中的make函数@priority(30)def make(parser): """ Ceph MON Daemon management """ parser.formatter_class = ToggleRawTextHelpFormatter mon_parser = parser.add_subparsers(dest='subcommand') mon_parser.required = True mon_add = mon_parser.add_parser( 'add', help=('R|Add a monitor to an existing cluster:\n' '\tceph-deploy mon add node1\n' 'Or:\n' '\tceph-deploy mon add --address 192.168.1.10 node1\n' 'If the section for the monitor exists and defines a `mon addr` that\n' 'will be used, otherwise it will fallback by resolving the hostname to an\n' 'IP. If `--address` is used it will override all other options.') ) mon_destroy = mon_parser.add_parser( 'destroy', help='Completely remove Ceph MON from remote host(s)' ) mon_destroy.add_argument( 'mon', nargs='+', ) parser.set_defaults( func=mon, )make函数为mon 添加各种参数,并指定默认的处理函数是mondef mon(args): if args.subcommand == 'create': mon_create(args) elif args.subcommand == 'add': mon_add(args) elif args.subcommand == 'destroy': mon_destroy(args) elif args.subcommand == 'create-initial': mon_create_initial(args) else: LOG.error('subcommand %s not implemented', args.subcommand)可以看动作mon 总共支持4个子命令,分别是create/add/destroy/create-initial首先看看create命令def mon_create(args):#获取配置文件 cfg = conf.ceph.load(args) if not args.mon:@如果没有指定mon,则从配置文件中mon_initial_members 作为mon args.mon = get_mon_initial_members(args, error_on_empty=True, _cfg=cfg) if args.keyrings: monitor_keyring = concatenate_keyrings(args) else:#获取ceph.mon.keyring 文件的路径 keyring_path = '{cluster}.mon.keyring'.format(cluster=args.cluster) try:#读取ceph.mon.keyring文件 monitor_keyring = files.read_file(keyring_path) except IOError: LOG.warning('keyring (%s) not found, creating a new one' % keyring_path) new_mon_keyring(args) monitor_keyring = files.read_file(keyring_path) LOG.debug( 'Deploying mon, cluster %s hosts %s', args.cluster, ' '.join(args.mon), ) errors = 0 for (name, host) in mon_hosts(args.mon): try: # TODO add_bootstrap_peer_hint LOG.debug('detecting platform for host %s ...', name)#获取是哪个发行版,并通过callbacks 检测发行版是否安装了ceph distro = hosts.get( host, username=args.username, callbacks=[packages.ceph_is_installed] ) LOG.info('distro info: %s %s %s', distro.name, distro.release, distro.codename) rlogger = logging.getLogger(name) # ensure remote hostname is good to go hostname_is_compatible(distro.conn, rlogger, name) rlogger.debug('deploying mon to %s', name)#调用发行版的mon模块的create函数来新建mon distro.mon.create(distro, args, monitor_keyring) # tell me the status of the deployed mon#等待2s后检查前面新建的mon的状态 time.sleep(2) # give some room to start mon_status(distro.conn, rlogger, name, args)#获取错误日志写到rlogger catch_mon_errors(distro.conn, rlogger, name, cfg, args) distro.conn.exit() except RuntimeError as e: LOG.error(e) errors += 1 if errors: raise exc.GenericError('Failed to create %d monitors' % errors)我们以suse为例看看mon.create。路径为E:\ceph-deploy-master\ceph-deploy-master\ceph_deploy\hosts\common.pydef mon_create(distro, args, monitor_keyring): hostname = distro.conn.remote_module.shortname() logger = distro.conn.logger logger.debug('remote hostname: %s' % hostname) path = paths.mon.path(args.cluster, hostname) uid = distro.conn.remote_module.path_getuid(constants.base_path) gid = distro.conn.remote_module.path_getgid(constants.base_path) done_path = paths.mon.done(args.cluster, hostname) init_path = paths.mon.init(args.cluster, hostname, distro.init) conf_data = conf.ceph.load_raw(args) # write the configuration file distro.conn.remote_module.write_conf( args.cluster, conf_data, args.overwrite_conf, ) # if the mon path does not exist, create it distro.conn.remote_module.create_mon_path(path, uid, gid) logger.debug('checking for done path: %s' % done_path) if not distro.conn.remote_module.path_exists(done_path): logger.debug('done path does not exist: %s' % done_path) if not distro.conn.remote_module.path_exists(paths.mon.constants.tmp_path): logger.info('creating tmp path: %s' % paths.mon.constants.tmp_path) distro.conn.remote_module.makedir(paths.mon.constants.tmp_path) keyring = paths.mon.keyring(args.cluster, hostname) logger.info('creating keyring file: %s' % keyring) distro.conn.remote_module.write_monitor_keyring( keyring, monitor_keyring, uid, gid, ) user_args = [] if uid != 0: user_args = user_args + [ '--setuser', str(uid) ] if gid != 0: user_args = user_args + [ '--setgroup', str(gid) ]# 重点是通过ceph-mon 这个命令来创建ceph mon remoto.process.run( distro.conn, [ 'ceph-mon', '--cluster', args.cluster, '--mkfs', '-i', hostname, '--keyring', keyring, ] + user_args ) logger.info('unlinking keyring file %s' % keyring) distro.conn.remote_module.unlink(keyring) # create the done file distro.conn.remote_module.create_done_path(done_path, uid, gid) # create init path distro.conn.remote_module.create_init_path(init_path, uid, gid)#启动mon # start mon service start_mon_service(distro, args.cluster, hostname)
阅读全文
0 0
- ceph-deploy-mon的create函数
- ceph-deploy的入口函数
- ceph-deploy的set_overrides函数
- ceph cluster添加/删除mon节点(ceph-deploy)
- ceph-deploy的admin 命令
- ceph-deploy的calamari命令
- ceph-deploy的pkg命令
- ceph-deploy的rgw命令
- Ceph添加mon节点
- ceph-deploy安装monitor的问题
- ceph存储 ceph-deploy部署挂载目录的osd
- ceph-deploy部署ceph集群
- ceph-deploy搭建ceph集群
- 【Ceph】ceph-deploy命令详解
- Ceph多Mon 多mds
- Ceph添加/删除Mon(ceph.conf)
- ceph-deploy install 失败
- ceph-deploy error
- Effective Java
- C语言中结构和链表浅析
- Android中跳转到系统设置界面大全
- 数据结构上机作业2-停车场问题
- 图像信息处理实验四
- ceph-deploy-mon的create函数
- android开发与h5交互
- CoordinatorLayout 之深入理解
- 饭卡hdoj2546
- 编写jQuery插件的格式与自定义
- 远程连接Ubuntu14服务器
- input的带验证的类型的使用
- javapoet:源文件自动生成框架
- 【拜小白opencv】37-形态学滤波2——膨胀