《Puppet实战手册》——1.5 创建去中心化Puppet架构

简介: 换句话说,如果能安排适当的清单文件分发至客户端上,就可以使用Puppet直接执行而不需要通过Puppet Master来控制。这将消除由于仅有一台主服务器导致的性能瓶颈,也消除了单点故障。同时,这也避免了添加新的客户端时颁发SSL签名证书的问题。

本节书摘来自异步社区《Puppet实战手册》一书中的第1章,第1.5节,作者:【英】John Arundel著,更多章节内容可以访问云栖社区“异步社区”公众号查看

1.5 创建去中心化Puppet架构

有些系统分散管理时会工作得更好。

使用Puppet最常见的方法就是运行一台Puppet Master服务器,Puppet客户端连接到Puppet Master并接收各自的配置清单。然而,Puppet Master并不是必需的,可以直接在配置清单文件上运行puppet apply命令来应用变更。

ubuntu@cookbook:~/puppet$ puppet apply manifests/site.pp
Notice: Finished catalog run in 0.08 seconds

换句话说,如果能安排适当的清单文件分发至客户端上,就可以使用Puppet直接执行而不需要通过Puppet Master来控制。这将消除由于仅有一台主服务器导致的性能瓶颈,也消除了单点故障。同时,这也避免了添加新的客户端时颁发SSL签名证书的问题。

有很多方法可以将清单文件分发至客户端,但是Git(或其他版本控制系统)为此做了大量工作。用户可以在本地副本中编辑清单,然后提交至Git,并推送至中心仓库。在那里,它们会自动分发至客户端。

准备工作
如果Puppet配置清单没有存放在Git中,参考上面步骤将清单加入Git中管理。

此时,需要第二台机器来检出Puppet仓库的副本。如果使用EC2实例,则创建另一个实例,并给它取个主机名,如cookbook2。

操作步骤
具体步骤如下。

1. 在新机器上检出GitHub仓库。

ubuntu@cookbook2:~$ git clone
  git@github.com:bitfield/cookbook.git puppet
Cloning into 'puppet'...
remote: Counting objects: 8, done.
remote: Compressing objects: 100% (5/5), done.
remote: Total 8 (delta 0), reused 5 (delta 0)
Receiving objects: 100% (8/8), done.

2. 参照下面的内容,修改manifests/nodes.pp文件:

node 'cookbook', 'cookbook2' {
 file { '/tmp/hello':
  content => "Hello, world\n",
 }
}

3. 运行以下命令:

ubuntu@cookbook2:~/puppet$ sudo puppet apply manifests/site.pp
Notice: /Stage[main]//Node[cookbook2]/File[/tmp/hello]/ensure:
defined content as '{md5}a7966bf58e23583c9a5a4059383ff850'
Notice: Finished catalog run in 0.05 seconds

工作原理
新机器上已经创建了一个Puppet仓库的副本。

ubuntu@cookbook2:~$ git clone git@github.com:bitfield/cookbook.git puppet

在运行Puppet前,必须首先在配置清单中针对cookboo2创建节点声明。

node 'cookbook', 'cookbook2' {
 ...
}

现在应用这些配置清单,让它们生效。

ubuntu@cookbook2:~/puppet$ sudo puppet apply manifests/site.pp
Puppet找到cookbook2的节点声明,并应用与之前用于cookbook相同的配置清单:

Notice: /Stage[main]//Node[cookbook2]/File[/tmp/hello]/ensure:
 defined content as '{md5}a7966bf58e23583c9a5a4059383ff850'

更多参考
此处已经将Puppet基础设施从一台机器扩展到了另外一台,现在可以将其扩展到任意多台。只需要检出Git仓库,并执行puppet apply命令。

这是一个非常好的方法,不需要复杂的配置,也不用多余的机器作为Puppet Master,就可以将现在的机器交由Puppet管理。笔者的很多客户都已经使用了这种基于Git的基础设施,它简单、易于扩展和维护。

需要考虑的一个改进就是要让每台机器自动从GitHub拉取修改并使用Puppet应用这些修改。然后要做的就只是推送变更至GitHub,变更的内容就会在某一个时间部署至所有Puppet管理的机器。接下来,读者将在下一节看到如何做到这一点。

相关文章
|
开发工具 git
《Puppet实战手册》——导读
IT运维领域正在进行一场革命。新一代的配置管理工具可以在几秒内完成大量服务器的构建(配置)和整个网络自动化。为了充分利用云计算的强大功能,并且建立可靠、可扩展、安全、高性能的系统,拥有Puppet这样的工具是必不可少的。
2200 0
|
Ruby
《Puppet实战手册》——2.12 使用正则表达式进行替换
Puppet通过regsubst函数提供了一种简单的方式来处理文本,在字符串中进行搜索和替换,或者从字符串中提取所需模式(子串)。人们经常需要用它来处理来自fact或来自外部程序的数据。
2060 0
|
Linux Spring Java
《Puppet实战手册》——2.11 使用in运算符
本节书摘来自异步社区《Puppet实战手册》一书中的第2章,第2.11节,作者:【英】John Arundel著,更多章节内容可以访问云栖社区“异步社区”公众号查看
1542 0
|
Ubuntu Linux Ruby
《Puppet实战手册》——2.10 使用选择器和case语句
Puppet会比较$::operatingsystem和每个所提供的可能的值:Ubuntu、Debian等。这些值可以是正则表达式(例如,部分字符串匹配或通配符匹配),但在此例中,只使用文字字符串(或全字符匹配)。
1381 0
|
存储
《Puppet实战手册》——2.9 在if语句中使用正则表达式
正则表达式非常强大,但是很难理解和调试。如果感觉正在用的正则表达式太复杂,不能一眼看明白它在做什么,最好简化设计,使其更加简单化。但是,正则表达式捕获模式是个非常有用的功能。
2283 0
|
Ubuntu 数据中心 网络协议
《Puppet实战手册》——2.8 编写功能强大的条件语句
此外,也可以通过在清单内设置变量来调整引入的类的行为。例如,在数据中心A的服务器可能需要使用与在数据中心B不同的DNS服务器,或者可能需要为Ubuntu系统使用一组类,而其他系统使用另一组不同的类。
1730 0
|
存储
《Puppet实战手册》——2.7 数组中多个元素的遍历
当Puppet遇到数组作为一个资源的名称时,它会为数组中每个元素的创建一个资源。在这个例子中,$packages数组中的每一个软件包都会被Puppet创建一个新的package资源,并且使用相同的参数(ensure => installed)。这是一种简化相似资源书写的方式。
2010 0
|
Ruby 调度
《Puppet实战手册》——2.6 使用内联模板
任何传递给inline_template函数的字符串的内容都会被当作ERB模板来执行。也就是说,任何在<%=和%>分隔符之间的内容都将作为Ruby代码而执行,而其余的部分将被视为字符串。
1662 0

推荐镜像

更多
下一篇
无影云桌面