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

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介:

本节书摘来自华章计算机《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进行自动部署和配置任务。
相关实践学习
基于Hologres轻松玩转一站式实时仓库
本场景介绍如何利用阿里云MaxCompute、实时计算Flink和交互式分析服务Hologres开发离线、实时数据融合分析的数据大屏应用。
Linux入门到精通
本套课程是从入门开始的Linux学习课程,适合初学者阅读。由浅入深案例丰富,通俗易懂。主要涉及基础的系统操作以及工作中常用的各种服务软件的应用、部署和优化。即使是零基础的学员,只要能够坚持把所有章节都学完,也一定会受益匪浅。
相关文章
|
2月前
|
消息中间件 Kafka Apache
Apache Flink 是一个开源的分布式流处理框架
Apache Flink 是一个开源的分布式流处理框架
476 5
|
2天前
|
运维 监控 Java
面经:Storm实时计算框架原理与应用场景
【4月更文挑战第11天】本文是关于Apache Storm实时流处理框架的面试攻略和核心原理解析。文章分享了面试常见主题,包括Storm的架构与核心概念(如Spout、Bolt、Topology、Tuple和Ack机制),编程模型与API,部署与运维,以及应用场景与最佳实践。通过代码示例展示了如何构建一个简单的WordCountTopology,强调理解和运用Storm的关键知识点对于面试和实际工作的重要性。
17 4
面经:Storm实时计算框架原理与应用场景
|
7天前
|
存储 分布式数据库
GaussDB分布式与单机模式的比较
【4月更文挑战第7天】GaussDB分布式与单机模式的比较
1599 5
|
18天前
|
存储 监控 安全
金石推荐 | 【分布式技术专题】「单点登录技术架构」一文带领你好好认识以下Saml协议的运作机制和流程模式
金石推荐 | 【分布式技术专题】「单点登录技术架构」一文带领你好好认识以下Saml协议的运作机制和流程模式
16 0
|
1月前
|
SQL 关系型数据库 MySQL
Flink CDC产品常见问题之读分布式mysql报连接超时如何解决
Flink CDC(Change Data Capture)是一个基于Apache Flink的实时数据变更捕获库,用于实现数据库的实时同步和变更流的处理;在本汇总中,我们组织了关于Flink CDC产品在实践中用户经常提出的问题及其解答,目的是辅助用户更好地理解和应用这一技术,优化实时数据处理流程。
|
1月前
|
SQL 分布式计算 HIVE
基于 Kyuubi 实现分布式 Flink SQL 网关
本文整理自网易互娱资深开发工程师、Apache Kyuubi Committer 林小铂的《基于 Kyuubi 实现分布式 Flink SQL 网关》分享。
104428 64
基于 Kyuubi 实现分布式 Flink SQL 网关
|
1月前
|
定位技术 流计算
在Flink CEP中,可以通过定义带有时间约束的模式来匹配事件的持续时间
【2月更文挑战第12天】在Flink CEP中,可以通过定义带有时间约束的模式来匹配事件的持续时间
33 3
|
2月前
|
Java 流计算
在Flink实时任务中,POJO(Plain Old Java Object)对象的模式演进可能会引起不兼容的问题
【2月更文挑战第6天】在Flink实时任务中,POJO(Plain Old Java Object)对象的模式演进可能会引起不兼容的问题
19 3
|
2月前
|
消息中间件 SQL Java
flink问题之Application 模式下启动失败如何解决
Apache Flink是由Apache软件基金会开发的开源流处理框架,其核心是用Java和Scala编写的分布式流数据流引擎。本合集提供有关Apache Flink相关技术、使用技巧和最佳实践的资源。
48 0