《Storm分布式实时计算模式》——2.6 Puppet的快速入门

2.6 Puppet的快速入门

Puppet是一个IT自动化框架,用来帮助管理员管理大规模的网络设施资源,使用灵活的、声明式的实现方式来进行IT自动化管理。
Puppet的核心是manifest的概念,它描述了一个设施资源对预期的声明(state)。在Puppet中,声明包括了以下方面:

  • 安装了哪些软件包。
  • 运行着哪些服务,不运行哪些服务。
  • 软件配置详情。

2.6.1 Puppet manifest文件
Puppet使用了基于Ruby的DSL(Domain Specific Language)在一组manifest文件中来描述系统配置。例如,描述ZooKeeper的Puppet manifest文件如下:

https://yqfile.alicdn.com/fdbca79e8f74a1c83946cc7e520807e8ab1fc299.png
" >

这个最简单的manifest例子表明ZooKeeper作为一个服务已经安装在机器上,并且服务是运行的。第一个package的代码块告诉Puppet使用操作系统的包管理程序(例如,Ubuntu/debian的apt-get,Ret Hat的yum等)来安装3.3.5版本的ZooKeeper软件包。第二个package代码块保证zookeeperd软件包已经安装。最后service代码块告诉Puppet需要保证zookeeperd的系统服务正在运行,这个服务依赖于zookeeperd软件包已经安装。
为了演示Puppet manifest文件如何转化为安装软件和系统声明,让我们安装Puppet并且使用前面的例子来安装和启动zookeeperd服务。
为了获取最新版的Puppet,需要将apt-get配置使用Puppet实验室的软件源。执行下述命令来安装最新版的Puppet:

然后,保存前面列出的实例manifest文件,命名为init.pp。使用Puppet来应用这个manifest:

https://yqfile.alicdn.com/708c253bb6c0483612612266b65a33c081e37036.png
" >

当命令执行完后,查看zookeeper服务是否正在运行:

如果我们手动停止了zookeeper服务并且重新运行Puppet apply命令,Puppet不会重复执行安装过程,但是会重启服务,因为在manifest文件中定义的声明中,服务是运行的。
2.6.2 Puppet类和模块
使用独立的Puppet manifest文件很容易定义资源的声明,但这种实现方法在需要管理的资源增多时变得越来越不方便。所幸是Puppet有类和模块的概念,可以用来更好地组织和隔离特定的配置详情。
考虑到Storm的场景,我们有多个节点的类。举例来说,一个Storm集群会有nimbus节点,supervisor节点或者同时兼具两种服务的节点。Puppet类和模块提供了一种区分不同配置角色的方法,可以混合搭配来方便地定义身具多种角色的资源。
举例说明这个功能,回顾上面安装zookeeper包的manifest文件,将它重新定义为一个类,这样包含多个类的manifest文件就可以引用这个类:

https://yqfile.alicdn.com/067b5787c0bb6b1de93f4f4110aa321c0df940c8.png" >

在前面的例子里,我们将zookeeper的manifest文件重新定义为puppet的类。这个类可以在其他类或manifest文件中使用。第二行中,zookeeper类包含了另外一个类,jdk,引用这个类的定义,表示它声明一个机器必须具备Java JDK。
2.6.3 Puppet模板
Puppet还利用Ruby ERB模板系统来定义各种文件的模板,在Puppet生成manifest时使用。当Puppet运行时,会替换Puppet ERB模板中Ruby表达式和构造式。ERB模板中的Ruby语句对manifest文件中的Puppet变量和定义有完全访问的权限。
下述Puppet文件声明是用来生成storm.yaml配置文件的:

这个声明告诉Puppet,从storm.yaml.erb模板中,在/etc/storm下新建storm.yaml文件:

https://yqfile.alicdn.com/6c59281b2792652a4f7a56f2a84ccfb728955197.png
" >

模板中的条件逻辑和变量扩展使我们在多种环境下可以使用同一个模板文件。举例来说,如果环境中不需要Storm DRPC服务,则生成的storm.yaml文件中就会忽略掉drpc.service的部分。
2.6.4 使用Puppet Hiera来管理环境
我们已经简要介绍了Puppet manifest、类和模板的概念。你这时候可能会好奇,如何在一个puppet的类或manifest文件中定义变量。在puppet类或manifest文件中定义变量非常简单,在manifest文件和类中像下面这样定义即可:

https://yqfile.alicdn.com/7f78479726ed2ee325540e3dd7f92c1f531e640f.png
" >

定义后,java_sersion变量就可以在类或manifest以及ERB模板中使用了;但是,这也带来了不易复用的问题。如果我们将版本号等信息写死在代码里,就会因固定的变量值限制了这个类的复用效率。如果可以将变量扩展到可能潜在的各种变化值,配置管理会变得更容易维护。这就是Hiera的用武之地。
2.6.5 介绍Hiera
Hiera是一个最新版Puppet框架中集成的一个键值对的查找工具。Hiera允许定义键值对分层结构(hierarchies,Hiera的名字是缩写),在结构中,父节点定义的值可以被子节点定义的值代替。
例如,考虑我们在Storm集群中需要给一些机器定义配置参数的场景。所有的机器会使用一套通用的键值对,比如说使用的Java版本。所以我们将这些值定义在common.yaml中。从这里开始,开始出现分化。我们可能有单节点伪集群,也可能有多节点集群。我们会将环境相关的变量放在特殊的文件里,比如“single-node.yaml”和“cluster.yaml”。
最后,我们会将机器相关的信息写在这种格式的文件中:“[hostname].yaml”,如图2-5所示。

https://yqfile.alicdn.com/47a44184940fbe138cc0b7905ed9d17cb5845056.png" >

Puppet集成的Hiera允许使用Puppet内置变量来正确的解析文件名称。
第2章的示例源代码目录说明了如何实现文件这种文件组织方式。一个典型的common.yaml文件可能定义全局属性对所有的机器通用,如下格式:

https://yqfile.alicdn.com/3513a2b336adcb51cb7f5741043bd621144e4d91.png
" >

在environment级别,可以区分单节点和集群配置的不同,cluster.yaml可以像下面这样定义:

最后,是定义机器相关的参数配置,使用对应的[hostname].yaml文件,定义的Puppet类会针对特定节点。
比如nimbus01.yaml,使用下列配置:

对zookeeper01.yaml。使用下列代码:

https://yqfile.alicdn.com/ae4b198a31af8333c431134ff591d8ea4b2d3153.png
" >

我们对Puppet和Hiera仅仅了解了皮毛。第2章的代码中有额外的例子和文档来说明如何使用Puppet进行自动部署和配置任务。

时间: 2024-11-09 02:10:42

《Storm分布式实时计算模式》——2.6 Puppet的快速入门的相关文章

《Storm分布式实时计算模式》——导读

前 言 目前对信息高时效性.可操作性的需求不断增长,这要求软件系统在更少的时间内能处理更多的数据.随着可连接设备数量不断增加,以及在众多行业领域广泛应用,这种信息需求已无处不在.传统企业的运营系统被迫处理原先只有互联网企业才会遇到的大规模数据.这种重大转变正不断瓦解传统架构和解决方案,传统上会将在线事务处理和离线分析分割开来.与此同时,人们正在重新勾勒从数据中提取信息的意义和价值.软件框架和基础设施也在不断进化,以适应这种新场景. 具体地说,数据的生成可以看作一连串发生的离散事件,这些事件流会伴

《Storm分布式实时计算模式》——2.1 Storm集群的框架

第2章 配置Storm集群 在本章中你将深入理解Storm的技术栈,它的软件依赖,以及搭建和部署Storm集群的过程.我们首先会在伪分布式模式下安装Storm,所有的组件都安装在同一台机器上,而不是在多台机器上.一旦你了解了安装和配置Storm的基本步骤,我们就可以通过Puppet这个工具进行自动化的安装,这样的话部署多节点的集群可以节省大量的时间和精力. 本章包括以下内容: 组成Storm集群的不同组件和服务 Storm的技术栈 在Linux上安装和配置Storm Storm的配置参数 Sto

《Storm分布式实时计算模式》——1.3 实现单词计数topology

1.3 实现单词计数topology 前面介绍了Storm的基础概念,我们已经准备好实现一个简单的应用.现在开始着手开发一个Storm topology,并且在本地模式执行.Storm本地模式会在一个JVM实例中模拟出一个Storm集群.大大简化了用户在开发环境或者IDE中进行开发和调试.后续章节将会演示如何将本地模式下开发好的topology部署到真实的Storm集群环境.1.3.1 配置开发环境 新建一个Storm项目其实就是将Storm及其依赖的类库添加到Java classpath中.在

《Storm分布式实时计算模式》——3.6 Trident状态

3.6 Trident状态 我们现在已经给每个aggregator的分组数据进行了计数,现在想将信息进行持久化存储,以便进一步分析.在Trident中,持久化操作从状态管理开始.Trident对状态有底层的操作原语,但不同于Storm API,它不关心要哪些数据会作为状态存储或者如何存储这些状态.Trident在高层提供了下述的状态接口: 上面提到了,Trident将tuple分组成一批批数据.每批数据都有自己的事务标识符.在前面的接口中,Trident告诉State对象什么时候开始提交状态,什

《Storm分布式实时计算模式》——第1章 分布式单词计数1.1 Storm topology的组成部分——stream、spout和bolt

第1章 分布式单词计数 本章将介绍使用Storm建立一个分布式流式计算应用时涉及的核心概念.我们通过建立一个简单的计数器程序实现这个目的.计数器将持续输入的一句句话作为输入流,统计其中单词出现的次数.单词计数这个例子浅显易懂,引入了多种数据结构.技术和设计模式.这些都是实现更复杂计算所必须的基础. 本章首先概要介绍Storm的数据结构,然后实现一个完整Storm程序所需的各个组成部分.读完本章,读者将会了解Storm计算的基本结构.搭建开发环境的方法.Storm程序的开发和调试技术. 本章包括以

《Storm分布式实时计算模式》——第3章 Trident和传感器数据3.1 使用场景

第3章 Trident和传感器数据 在本章中,我们将介绍Trident topology.Trident在Storm上提供了高层抽象.Trident抽象掉了事务处理和状态管理的细节.特别是,它可以让一批tuple进行离散的事务处理.此外,Trident还提供了抽象操作,允许topology在数据上执行函数功能.过滤和聚合操作.我们将使用传感器数据作为例子来更好地理解Trident.通常情况下,传感器数据流会来自不同的位置.一些传统的例子包括天气和交通状况,这种模式扩展到了更大的数据源.比如,手机

《Storm分布式实时计算模式》——1.7 总结

1.7 总结 本章中,在没有安装和搭建Storm集群的情况下,我们使用Storm的核心API建立了一个简单的分布式计算程序,覆盖了Storm特性集的大部分内容.Storm的本地模式非常强大,简化了开发,提高了开发效率.但要感受到Storm真正的威力和水平扩展性,还是需要将程序部署在真实的集群上.下一章,我们会讲如何安装和搭建Storm集群环境,以及如何将topology部署到到分布式环境中.

《Storm分布式实时计算模式》——1.4 Storm的并发机制

1.4 Storm的并发机制 在Storm的间接中提到过,Storm计算支持在多台机器上水平扩容,通过将计算切分为多个独立的tasks在集群上并发执行来实现.在Storm中,一个task可以简单地理解为在集群某节点上运行的一个spout或者bolt实例.为了理解storm的并发机制是如何运行的,我们先来解释下在集群中运行的topology的四个主要组成部分: Nodes(服务器):指配置在一个Storm集群中的服务器,会执行topology的一部分运算.一个Storm集群可以包括一个或者多个工作

《Storm分布式实时计算模式》——2.3 在Linux上安装Storm

2.3 在Linux上安装Storm Storm是设计运行在Unix兼容的操作系统上.但在0.9.1版本,它也支持在Windows机器上部署. 为了简化部署,我们使用Ubuntu 12.04LTS的发行版作为安装服务器.将会使用服务器版本,默认不包括图形界面接口,因为我们用不到..在实体机和虚拟机上安装ubuntu都是非常方便的.出于学习和开发的目的,你会发现在虚拟机里进行部署更加方便,尤其是手头没有那么多实体机的情况. OSX.Linux.Windows都有着对应的虚拟机软件.我们建议从下面集