Mesos源码分析(6): Mesos Master的初始化
来源:互联网 发布:淘宝卖土特产的代价 编辑:程序博客网 时间:2024/05/15 00:34
Mesos Master的初始化在src/master/master.cpp中
在Mesos Master的log中,是能看到这一行的。
1.初始化role,并设置weight权重
2. 初始化Allocator
注意,Allocator的initialize函数中,传入的OfferCallback是Master::offer。
如果前面所述,没过allocation_interval,Allocator都会计算每个framework的offer,然后依次调用Master::offer,将资源offer给相应的framework。
在Master::offer函数中,生成如下的ResourceOffersMessage,并且发送给Framework
- // Create an offer for each slave and add it to the message.
- ResourceOffersMessage message;
- Framework* framework = CHECK_NOTNULL(frameworks.registered[frameworkId]);
- foreachpair (const SlaveID& slaveId, const Resources& offered, resources) {
- ……
- Slave* slave = slaves.registered.get(slaveId);
- CHECK_NOTNULL(slave);
- ……
- // TODO(bmahler): Set "https" if only "https" is supported.
- mesos::URL url;
- url.set_scheme("http");
- url.mutable_address()->set_hostname(slave->info.hostname());
- url.mutable_address()->set_ip(stringify(slave->pid.address.ip));
- url.mutable_address()->set_port(slave->pid.address.port);
- url.set_path("/" + slave->pid.id);
- Offer* offer = new Offer();
- offer->mutable_id()->MergeFrom(newOfferId());
- offer->mutable_framework_id()->MergeFrom(framework->id());
- offer->mutable_slave_id()->MergeFrom(slave->id);
- offer->set_hostname(slave->info.hostname());
- offer->mutable_url()->MergeFrom(url);
- offer->mutable_resources()->MergeFrom(offered);
- offer->mutable_attributes()->MergeFrom(slave->info.attributes());
- // Add all framework's executors running on this slave.
- if (slave->executors.contains(framework->id())) {
- const hashmap<ExecutorID, ExecutorInfo>& executors =
- slave->executors[framework->id()];
- foreachkey (const ExecutorID& executorId, executors) {
- offer->add_executor_ids()->MergeFrom(executorId);
- }
- }
- ……
- offers[offer->id()] = offer;
- framework->addOffer(offer);
- slave->addOffer(offer);
- if (flags.offer_timeout.isSome()) {
- // Rescind the offer after the timeout elapses.
- offerTimers[offer->id()] =
- delay(flags.offer_timeout.get(),
- self(),
- &Self::offerTimeout,
- offer->id());
- }
- // TODO(jieyu): For now, we strip 'ephemeral_ports' resource from
- // offers so that frameworks do not see this resource. This is a
- // short term workaround. Revisit this once we resolve MESOS-1654.
- Offer offer_ = *offer;
- offer_.clear_resources();
- foreach (const Resource& resource, offered) {
- if (resource.name() != "ephemeral_ports") {
- offer_.add_resources()->CopyFrom(resource);
- }
- }
- // Add the offer *AND* the corresponding slave's PID.
- message.add_offers()->MergeFrom(offer_);
- message.add_pids(slave->pid);
- }
- if (message.offers().size() == 0) {
- return;
- }
- LOG(INFO) << "Sending " << message.offers().size()
- << " offers to framework " << *framework;
- framework->send(message);
- }
3. 监听消息,注册处理函数
最后注册一些处理函数,当收到相应的消息的时候,调用相应的函数。
下面仅仅列举比较重要的几个函数。
第一个是Framework注册的时候调用的函数。
第二个是收到Framework发送来的运行Task的消息。
第三个是Slave发送来的注册时候调用的函数。
第四个是更新Status时候的Message
4. 竞争成为Master中的Leader,或者检测当前的Leader
0 0
- Mesos源码分析(6): Mesos Master的初始化
- Mesos源码分析(2): Mesos Master的启动之一
- Mesos源码分析(3): Mesos Master的启动之二
- Mesos源码分析(4): Mesos Master的启动之三
- Mesos源码分析(5): Mesos Master的启动之四
- Mesos源码分析(8): Mesos-Slave的初始化
- Mesos源码分析(11): Mesos-Master接收到launchTasks消息
- Mesos源码分析(7): Mesos-Slave的启动
- Mesos源码分析(16): mesos-docker-executor的运行
- Mesos源码分析
- Mesos源码分析(12): Mesos-Slave接收到RunTask消息
- mesos
- Mesos
- Mesos源码分析(9): Test Framework的启动
- Mesos源码分析(15): Test Executor的运行
- Mesos源码分析(10): MesosSchedulerDriver的启动及运行一个Task
- 结合源码和日志分析 mesos agent recover 过程
- Mesos源码分析(13): MesosContainerier运行一个Task
- 死锁
- Cookie技术
- UVA 11889 Benefit
- ACM_bellman ford(单源最短路)
- Library Query
- Mesos源码分析(6): Mesos Master的初始化
- dfs有向关系链,dfs所有有向边(poj Professor John)
- HDU 1506 Largest Rectangle in a Histogram 动态规划
- 一些图论、网络流入门题总结、汇总
- Xutil跟AFinal框架的使用
- JAVASCRIPT:NUMBER类型
- php学习笔记(三)select处理
- ubuntu系统安装搜狗输入法
- C# vs java