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