《Storm分布式实时计算模式》——2.6 Puppet的快速入门-阿里云开发者社区

开发者社区> 华章计算机> 正文

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

简介:
+关注继续查看

本节书摘来自华章计算机《Storm分布式实时计算模式》一书中的第2章,第2.6节,作者:(美)P. Taylor Goetz Brian O’Neill 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

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文件如下:


<a href=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:


7d27f11fd67f6b736476445f7a2a053044bc61e5

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

<a href=https://yqfile.alicdn.com/708c253bb6c0483612612266b65a33c081e37036.png
" >

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

7fbaf83351a1ff84a4c6ec60d0b13180cd8af246

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

48a75bc4d9f1c8cc2b7273ccaf06f85124fecfaa


<a href=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配置文件的:

1b63365b3fb35dd74c6f1a8082ff6519b4952ef9

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

<a href=https://yqfile.alicdn.com/6c59281b2792652a4f7a56f2a84ccfb728955197.png
" >


8613d7659dc5d6019860dd1eff68cbf6a44890d7

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

<a href=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所示。


<a href=https://yqfile.alicdn.com/47a44184940fbe138cc0b7905ed9d17cb5845056.png" >

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

<a href=https://yqfile.alicdn.com/3513a2b336adcb51cb7f5741043bd621144e4d91.png
" >

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

9348fe19c5b0f91235d3807d69ea826f034527f2

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

b6f2a90a5b7f61f72ac346f022f1506423bffadd

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

<a href=https://yqfile.alicdn.com/ae4b198a31af8333c431134ff591d8ea4b2d3153.png
" >

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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
大数据分布式架构单点故障详解(Hdfs+Yarn+HBase+Spark+Storm)构建HA高可用架构
本文梳理了常见的hadoop生态圈中的组件:Hdfs+Yarn+HBase+Spark+Storm的单点故障问题,出现原因以及单点故障的原理和解决方案(构建HA(High Available)高可用架构)。阅读本文之前,最好了解清楚各组件的架构原理。
19649 0
(三):C++分布式实时应用框架——系统管理模块
C++分布式实时应用框架——系统管理模块     上篇:(二): 基于ZeroMQ的实时通讯平台   版权声明:本文版权及所用技术归属smartguys团队所有,对于抄袭,非经同意转载等行为保留法律追究的权利!     一个分布式实时系统集群动辄上百台机器,集群的规模已经限定这将是一个”封闭“的系统。
1229 0
(一):C++分布式实时应用框架----整体介绍
C++分布式实时应用框架 (Cpp Distributed Real-time Application Framework) 版权声明:本文版权及所用技术归属smartguys团队所有,对于抄袭,非经同意转载等行为保留法律追究的权利!     在现今软件系统纷纷“云化”的浪潮下,各种支持“云化”的框架、工具层出不穷,但这些现成的工具大多基于JAVA,go等语言,且应用场景均为非实时系统。
1261 0
10059
文章
0
问答
来源圈子
更多
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载