Configuration Puppet:不同节点上的资源之间的关系
我知道我们可以指定资源之间的关系,这决定了部署顺序。但是,是否可以在Puppet中不同节点上的资源之间创建关系 例如,我在节点A中有ApacheWeb服务器,在节点B中有mysql服务器。我想在启动ApacheWeb服务器之前先启动mysql。我怎样才能用木偶语言来表达呢Configuration Puppet:不同节点上的资源之间的关系,configuration,puppet,Configuration,Puppet,我知道我们可以指定资源之间的关系,这决定了部署顺序。但是,是否可以在Puppet中不同节点上的资源之间创建关系 例如,我在节点A中有ApacheWeb服务器,在节点B中有mysql服务器。我想在启动ApacheWeb服务器之前先启动mysql。我怎样才能用木偶语言来表达呢 我尝试了以下代码: node ‘host1’ { @@service { ‘mysql’: ensure => running, tag => ‘host1-mysql’, } } nod
我尝试了以下代码:
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有一个工具,它完全可以做你想要的,而且看起来很容易使用,但我没有使用它的经验
- 在你的选择分布中可能有一些等价物
有关编排,请参见capistrano等工具我尝试过使用此链接箭头,但我认为无论何时资源位于不同节点上,它都不起作用。任何人都可以告诉我此问题的原因-1?您也应该发布错误。我尝试过使用带有“关系”或“链接箭头”的导出资源(参见编辑问题中的示例)。但它不起作用-产生了编译错误。感谢@mestachs的澄清。