Ironfan在大數(shù)據(jù)集群部署、配置管理中的應(yīng)用
Ironfan介紹
在Serengeti中,有二個(gè)最重要最關(guān)鍵的功能:一是虛擬機(jī)管理,即在vCenter中為一個(gè)Hadoop集群創(chuàng)建和管理所需要的虛擬機(jī);另一個(gè)是集群軟件安裝配置管理,即在已安裝好操作系統(tǒng)的虛擬機(jī)上安裝Hadoop相關(guān)組件(包括Zookeeper,Hadoop,Hive,Pig等),更新配置文件(例如Namenode/Jobtracker/Zookeeper結(jié)點(diǎn)的IP等信息),然后啟動(dòng)Hadoop服務(wù)。Ironfan就是在Serengeti中負(fù)責(zé)集群軟件安裝配置管理的組件。
Ironfan是基于Chef技術(shù)開發(fā)的集群軟件部署配置管理工具。Chef是一個(gè)類似于Puppet和CFEngine的開源的系統(tǒng)配置管理工具,它定義了一套簡單易用的DSL(Domain Specific language)語言用于在一臺已安裝好基本操作系統(tǒng)的機(jī)器上安裝配置任意軟件和配置系統(tǒng)本身。Ironfan基于Chef的框架和API提供了簡單易用的自動(dòng)化部署和管理集群的命令行工具。Ironfan支持部署Zookeeper,Hadoop和HBase集群,也可以編寫新的cookbook以部署任意其他非Hadoop集群。
Ironfan最初由美國一家Big Data初創(chuàng)公司Infochimps使用Ruby語言開發(fā),并在github.com上以Apache Licensev2開源。最開始Ironfan只支持在Amazon EC2的Ubuntu虛擬機(jī)上部署Hadoop集群。VMwareProject Serengeti團(tuán)隊(duì)選擇了基于Ironfan來開發(fā)Big Data集群工具,并實(shí)現(xiàn)了一系列重大改進(jìn),讓Ironfan可以在VMware vCenter中的CentOS 5.x虛擬機(jī)上創(chuàng)建部署Hadoop集群。ProjectSerengeti改進(jìn)后的Ironfan同樣以Apache License v2在github.com上開源,供用戶免費(fèi)下載和修改。
Ironfan架構(gòu)
下圖描繪了Ironfan的架構(gòu)。Ironfan主要包括Cluster OrchestrationEngine,VM Provision Engine,SoftwareProvision Engine和用于存儲數(shù)據(jù)的Chef Server 和Package Server。
·ClusterOrchestration Engine:Ironfan的總控制器,負(fù)責(zé)加載解析集群定義文件,創(chuàng)建虛擬機(jī),在ChefServer中保存集群的配置信息,并調(diào)用Chef REST API為各個(gè)虛擬機(jī)創(chuàng)建對應(yīng)的ChefNode和Chef Client, 并設(shè)定各個(gè)虛擬機(jī)的ChefRole。
·VMProvision Engine:創(chuàng)建cluster中的所有虛擬機(jī),并等待虛擬機(jī)得到IP。VM Provision Engine提供了接口以支持在各種虛擬機(jī)云環(huán)境中創(chuàng)建虛擬機(jī),目前實(shí)現(xiàn)了Amazon EC2和VMware vCenter的支持。在Serengeti中,所有虛擬機(jī)由Ironfan的調(diào)用者在VMware vCenter中創(chuàng)建,并將IP保存在cluster spec文件中,傳遞給Ironfan的VM Provision Engine。
·SoftwareProvision Engine: 使用虛擬機(jī)中預(yù)先創(chuàng)建好的缺省用戶名和密碼,SSH遠(yuǎn)程登錄到所有虛擬機(jī)中同時(shí)啟動(dòng)chef-client來安裝軟件。chef-client是Chef框架中的代理程序,負(fù)責(zé)在其運(yùn)行的結(jié)點(diǎn)上執(zhí)行預(yù)先由Chef Role指定的安裝配置腳本。chef-client也會(huì)將執(zhí)行進(jìn)度數(shù)據(jù)保存在Chef Server中。
·ChefServer:用于存儲Chef Nodes,Chef Clients, Chef Roles, Chef Cookbooks, 提供Chef RESTAPI, 是Chef框架的重要組成部件。
·PackageServer:用于存儲所需的Hadoop和其他Hadoop所依賴的安裝包。
Ironfan對外提供了Knife CLI命令行接口,其調(diào)用者(即SerengetiWeb Service 組件)創(chuàng)建單獨(dú)進(jìn)程調(diào)用Knife CLI,通過進(jìn)程退出狀態(tài)值判斷成功或者失敗。具體的集群結(jié)點(diǎn)數(shù)據(jù)和執(zhí)行進(jìn)度信息由調(diào)用者隨時(shí)從ChefServer獲取。
IronfanKnife CLI
每一個(gè)SerengetiCLI cluster命令都對應(yīng)一個(gè)IronfanKnife CLI命令,包括create (創(chuàng)建集群)、list(查看集群)、config(配置集群)、stop(停止集群)、start(啟動(dòng)集群)、delete(刪除集群)。
clustercreate => knife cluster create
clusterlist => knife cluster show
clusterconfig => knife cluster bootstrap
clusterstop => knife cluster stop
clusterstart => knife cluster start
clusterdelete => knife cluster kill
其中參數(shù)/opt/serengeti/logs/task/
Ironfancluster定義文件 (DSL, roles)
接下來,我們看看Ironfan是如何定義集群的。下圖是一個(gè)名為demo的cluster的定義文件demo.rb,它是一個(gè)Ruby文件,用Ironfan所定義的DSL語言描述集群的組成結(jié)構(gòu),定義了3個(gè)虛擬機(jī)組。其中每一個(gè)facet定義了一個(gè)虛擬機(jī)組,包含若干個(gè)安裝同樣軟件的虛擬機(jī)。每個(gè)分組中結(jié)點(diǎn)個(gè)數(shù)由instance指定,虛擬機(jī)上要安裝的軟件由role指定。這個(gè)role就是Chef中所定義的role。
Chef Roles和 Cookbooks
在Serengeti中所有Chef Role文件存放于/opt/serengeti/cookbooks/roles/*.rb,所有
Chef Cookbook 文件存放于/opt/serengeti/cookbooks/cookbooks/
以hadoop_namenode role為例,/opt/serengeti/cookbooks/roles/hadoop_namenode.rb 內(nèi)容如下:
name 'hadoop_namenode'
description 'runs a namenode infully-distributed mode. There should be exactly one of these per cluster.'
run_list %w[
role[hadoop] # 一個(gè)role可以包含引用另一個(gè)role
hadoop_cluster::namenode # hadoop_cluster 是一個(gè)cookbook, namenode是此cookbook中的一個(gè)recipe
]
如果開發(fā)者需要修改調(diào)試 role和cookbook,可在修改role和cookbook 文件后,運(yùn)行以下命令上傳role和cookbook:
knife role from file/opt/serengeti/cookbooks/roles/
knifecookbook upload
Cluster Service Discovery
在集群部署過程之中,有些組件的安裝和服務(wù)的啟動(dòng)順序是有先后依賴的,比如Datanode服務(wù)需要在Namenode服務(wù)啟動(dòng)之后再啟動(dòng),Tasktracker服務(wù)需要在Jobtracker服務(wù)啟動(dòng)之后再啟動(dòng),并且這些服務(wù)通常不在同一個(gè)虛擬機(jī)上。因此Ironfan在部署過程中需要控制不同結(jié)點(diǎn)上服務(wù)的安裝和啟動(dòng)順序,讓有依賴關(guān)系的結(jié)點(diǎn)同步。Ironfan是使用一個(gè)名為cluster_service_discovery的cookbook實(shí)現(xiàn)相關(guān)結(jié)點(diǎn)之間同步。
cluster_service_discoverycookbook定義了provide_service,provider_fqdn,provider_fqdn_for_role,all_providers_for_service等等方法,用于實(shí)現(xiàn)結(jié)點(diǎn)同步。我們以datanode服務(wù)需要等待namenode服務(wù)啟動(dòng)為例講解如何實(shí)現(xiàn)同步:
·在namenoderecipe中,啟動(dòng)namenode服務(wù)之后,調(diào)用provide_service(node[:hadoop][:namenode_service_name]),向Chef Server把此結(jié)點(diǎn)注冊為namenode 服務(wù)的提供者;
·在datanoderecipe中,啟動(dòng)datanode服務(wù)之前,調(diào)用provider_fqdn(node[:hadoop][:namenode_service_name])向Chef Server查詢namenode服務(wù)提供者的FQDN(或IP); provider_fqdn方法會(huì)每隔5秒種向Chef Server查詢一次,直到查詢到結(jié)果,或者30分鐘后超時(shí)報(bào)錯(cuò)。
其他相關(guān)結(jié)點(diǎn)的同步也與此機(jī)制相似,例如Zookeeper結(jié)點(diǎn)之間的相互等待,HBase結(jié)點(diǎn)等待Zookeeper結(jié)點(diǎn),具體方法調(diào)用可查看cluster_service_discovery,zookeeper,hadoop, 和hbase cookbook的源代碼。
關(guān)于vSphere Big Data Extensions:
VMware vSphere Big Data Extensions(簡稱BDE)基于vSphere平臺支持大數(shù)據(jù)和Apache Hadoop作業(yè)。BDE以開源Serengeti項(xiàng)目為基礎(chǔ),為企業(yè)級用戶提供一系列整合的管理工具,通過在vSphere上虛擬化Apache Hadoop,幫助用戶在基礎(chǔ)設(shè)施上實(shí)現(xiàn)靈活、彈性、安全和快捷的大數(shù)據(jù)部署、運(yùn)行和管理工作。了解更多關(guān)于VMware vSphere Big Data Extensions的信息,請參見http://www.vmware.com/hadoop。
作者介紹
胡輝 (Jesse Hu)
VMware高級開發(fā)工程師
擔(dān)任VMware大數(shù)據(jù)產(chǎn)品vSphere BDE和Serengeti開源項(xiàng)目的技術(shù)帶頭人之一,是Serengeti開源項(xiàng)目最早期的開發(fā)者,并實(shí)現(xiàn)了第一個(gè)原型系統(tǒng),是Serengeti集群軟件安裝配置管理模塊Ironfan的設(shè)計(jì)者。在加入VMware之前,曾就職于Yahoo,IBM,Oracle等多家IT企業(yè),對開源社區(qū),云計(jì)算, Mobile, SNS, Web 2.0, Ruby都有了解和研究。