Configuration Puppet:不同节点上的资源之间的关系

Configuration Puppet:不同节点上的资源之间的关系,configuration,puppet,Configuration,Puppet,我知道我们可以指定资源之间的关系,这决定了部署顺序。但是,是否可以在Puppet中不同节点上的资源之间创建关系 例如,我在节点A中有ApacheWeb服务器,在节点B中有mysql服务器。我想在启动ApacheWeb服务器之前先启动mysql。我怎样才能用木偶语言来表达呢 我尝试了以下代码: node ‘host1’ { @@service { ‘mysql’: ensure => running, tag => ‘host1-mysql’, } } nod

我知道我们可以指定资源之间的关系,这决定了部署顺序。但是,是否可以在Puppet中不同节点上的资源之间创建关系

例如,我在节点A中有ApacheWeb服务器,在节点B中有mysql服务器。我想在启动ApacheWeb服务器之前先启动mysql。我怎样才能用木偶语言来表达呢


我尝试了以下代码:

node ‘host1’ {
  @@service { ‘mysql’:
    ensure => running,
    tag => ‘host1-mysql’,
  }
}
node ‘host2’ {
  service { ‘apache2’:
    ensure => running,
  }
  Service<<| tag == ‘host1-mysql’ |>> -> Service[‘apache2’]
}
节点“主机1”{
@@服务{'mysql':
确保=>正在运行,
标记=>'host1 mysql',
}
}
节点“host2”{
服务{'apache2':
确保=>正在运行,
}
服务->服务['apache2']
}

但它不起作用——产生了一个编译错误。任何其他解决方案?

每当一个资源依赖于另一个资源时,请使用before或require元参数,或使用
->
链接资源。当另一个资源发生更改时,每当一个资源需要刷新时,请使用notify或subscribe元参数,或使用
~>
链接资源。一些资源会自动要求其他资源,如果他们看到他们,这可以节省你一些努力

有关更精确的信息,请参阅

在init.pp中声明/实例化这些类,用参数化类语法替换include语句:

class{“taskname”:}->
类{“taskname2”:}

这将确保在taskname2之前调用taskname


检查在谷歌上搜索一下
傀儡节点依赖关系
会找到一些关于导出资源的链接,这似乎是一个不错的选择

导出的资源允许节点彼此共享信息

基本上,您可以在资源所属的节点中导出资源,然后在需要资源的节点中收集资源,并像往常一样使用依赖关系箭头


MCollective似乎也是一个替代方案,但似乎是一个全新的框架。

仅使用Puppet是无法做到这一点的。从概念上讲,使用Puppet可以生成节点配置的静态描述,然后应用它。导出的资源系统很方便,但不会从根本上改变Puppet的工作方式(您可以通过注意到您可以对资源进行硬编码来说服自己,这将产生完全相同的效果)

出于这个原因,您需要另一种编排系统,并且不应该在您的服务上设置
enable=>running

不幸的是,我没有很好的建议:

  • 我只使用heartbeat,根据我的经验,heartbeat很难配置,不可靠,而且非常有限(只支持少数节点)
  • Ubuntu有一个工具,它完全可以做你想要的,而且看起来很容易使用,但我没有使用它的经验
  • 在你的选择分布中可能有一些等价物
在分布式“傀儡”设置中,应用顺序不保证

Puppet不跨多个节点执行编排。充其量,您的更改将在计算机上应用多次,最终将收敛到所需的状态

依赖项仅在同一节点中工作。您实际上可以获取其他节点导出的资源值(例如,配置数据库的防火墙以允许web服务器执行sql) 或者与hiera一起作弊,以了解谁拥有“db”和“app”角色


有关编排,请参见capistrano等工具

我尝试过使用此链接箭头,但我认为无论何时资源位于不同节点上,它都不起作用。任何人都可以告诉我此问题的原因-1?您也应该发布错误。我尝试过使用带有“关系”或“链接箭头”的导出资源(参见编辑问题中的示例)。但它不起作用-产生了编译错误。感谢@mestachs的澄清。