Sahara集群的状态一览,sahara集群一览


声明:

本博客欢迎转载,但请保留原作者信息,并请注明出处!

作者:郭德清

团队:华为杭州OpenStack团队


       Sahara支持三种集群操作:创建集群、扩容/减容集群、删除集群。每种操作都有对应的一些中间状态。通过集群的状态,可以清楚地看到集群目前处于哪个阶段。本文主要是罗列了三种操作可能出现的一些状态。

一、创建集群

  • Validating

       Sahara会对输入的数据做检查,在sahara/service/api.py的create_cluster方法中:

cluster =g.change_cluster_status(cluster, "Validating")
plugin.validate(cluster)

       validate主要是对集群的一些服务的检验,比如vanilla的hadoop 1.2.1的插件中,会检查namenode节点是不是只有一个,jobtracker和oozie节点是不是大于1个。具体的方法可以看:sahara/plugins/vanilla/v1_2_1/versionhandler.py的validate方法。

  • InfraUpdating

      这个状态,主要是为了对插件做一些更新,在sahara/service/ops.py的_provision_cluster方法中:

#updating cluster infra
cluster =g.change_cluster_status(cluster, "InfraUpdating")
plugin.update_infra(cluster)
       目前我看这个方法在各个插件中都还未实现。

  • Spawning

       在创建虚拟机的时候,Sahara会把集群状态置为Spawning,官网上的说法是这个状态会持续到集群所有的虚拟机状态为Active,但是从代码来看,创建虚拟机的命令发出去之后就会进入Waiting状态,在Waiting状态中会去等待虚拟机状态为Active。方法在:sahara/service/direct_engine.py的create_cluster方法中。

  • Waiting

       集群虚拟机的创建命令发出去之后,会进入Waiting状态,这个时候,会一直轮询去判断虚拟机的状态是否Active,等所有的虚拟机都Active之后,会等待网络配置(包括虚拟机的网络是不是都通了,是否都可以登录。),还有设置浮动IP,挂载卷等操作。具体的可以看sahara/service/direct_engine.py的create_cluster方法。

# wait for all instances are up and networks ready
cluster = g.change_cluster_status(cluster, "Waiting")
instances = g.get_instances(cluster)
self._await_active(cluster, instances)
self._assign_floating_ips(instances)
self._await_networks(cluster, instances)
cluster = conductor.cluster_get(ctx, cluster)
# attach volumes
volumes.attach_to_instances(g.get_instances(cluster))

  • Preparing

       在Preparing阶段,Sahara会生成/etc/hosts文件,为了虚拟机之间可以通过hostname来互相访问,同时为了免密码登录,也会更新每个虚拟机的authorized_keys。实现位于sahara/service/engine.py的_configure_instances方法中。

  • Configuring

       Sahara在环境准备好之后,会在虚拟机中安装各个服务,包括传入hadoop各个服务需要的xml,还有环境变量等。具体实现可以看下sahara/plugins/vanilla/v1_2_1/versionhandler.py的configure_cluster方法。

<pre name="code" class="python">def configure_cluster(self, cluster):
    instances = utils.get_instances(cluster)
    self._setup_instances(cluster, instances)


def_setup_instances(self, cluster, instances):
    if (CONF.use_identity_api_v3 and vu.get_hiveserver(cluster) and c_helper.is_swift_enable(cluster)):
        cluster = proxy.create_proxy_user_for_cluster(cluster)
        instances = utils.get_instances(cluster)
    extra = self._extract_configs_to_extra(cluster)
    cluster = conductor.cluster_get(context.ctx(), cluster)
    self._push_configs_to_nodes(cluster, extra, instances)

  • Starting

       这一步是在虚拟机中拉起各个服务。以vanilla的hadoop1.2.1的插件为例,会先格式化namenode,然后依次拉起namenode、secondarynamenode、jobtracker、datanode、tasktracker、oozie、hive_server。具体的实现可以看下sahara/plugins/vanilla/v1_2_1/versionhandler.py的start_cluster方法。

  • Active

       在集群都创建、配置、服务拉起之后,会把集群置为Active。看到这个状态,说明集群已经创建成功了。这个时候就可以开始通过Sahara来跑一些hadoop任务了。

二、扩容/减容集群

  • Validating

       跟创建集群一样,扩容和减容集群也同样会做校验工作。具体的参考上面创建集群的操作。

  • Decommissioning

       在做减容的时候,会把要删除的虚拟机上面的服务停掉,删除和datanode和tasktracker会分别调sahara/plugins/vanilla/v1_2_1/scaling.py的decommission_dn方法和decommission_tt方法。具体的可以看下sahara/plugins/vanilla/v1_2_1/versionhandler.py的decommission_nodes方法。

  • Scaling

       在这个阶段会创建虚拟机、等待虚拟机Active、分配浮动IP、等待网络通等操作和创建集群时创建虚拟机的步骤类似。具体方法可以看下sahara/service/direct_engine.py的scale_cluster方法。

  • Configuring

       和集群创建时候的Configuring状态类似。新建的虚拟机会配上已有虚拟机的配置,原来的虚拟机也会更新/etc/hosts。

  • Active

       扩容成功后,状态会置为Active。如果验证的时候失败,也会把集群置为Active。

三、删除集群

  • Deleting

       删除虚拟机时集群的状态。

四、错误状态

  • Error

       创建集群的时候,如果出现错误,会把集群置为Error。扩容的时候失败,Sahara会先进行回滚,如果回滚失败,也会把集群置为Error。

 


【参考资料】

https://sahara.readthedocs.org/en/stable-juno/userdoc/statuses.html

相关内容