CHEF 可以在不同的数据中心拥有不同的数据包吗

CHEF 可以在不同的数据中心拥有不同的数据包吗

organizationsChef 12 有、 和的概念environments

您将如何对不同的数据中心进行逻辑建模?

例如,如果您有两个数据中心,有 2 个环境。

us-datacenter  
 \_ production
 \_ stage

eu-datacenter  
 \_ production
 \_ stage

每个环境都有需要指向不同数据库的 Web 服务器

us-prod-web01 => us-prod-db01
eu-prod-web01 => eu-prod-db01

us-stage-web01 => us-stage-db01
eu-stage-web01 => eu-stage-db01

显而易见的答案是创建包含正确数据库的 IP 地址的嵌套数据包。

$datacenter/$environment/web
$datacenter/$environment/database

但是,数据包具有严格的 2 级层次结构,并且我找不到“数据中心”的概念。

如何最好地模拟这种情况?我能想到的两种方法。

  1. 使用 2 级数据包

    $环境/us-web
    $环境/us-database
    $环境/eu-web
    $环境/eu-database

这样做的缺点是将大量数据包放在一个目录中。即使您将 GUI 与托管 CHEF 一起使用,仍然很难滚动查看数据包。 (8 data centers * 4 environments * 6 types of webservers + 2 types of database servers = a lot )

  1. 将数据中心变量放在角色/节点属性中,并编写辅助方法来查找正确的数据包。

这是在 IRC 上提出的建议,但是编写辅助方法似乎非常复杂(我是 Chef 的新手,从未做过这样的事情)。此外,对于应该非常常见的用例,这似乎需要重新发明轮子。例如,这可以在 puppet+hiera 中轻松完成

当然,我不是第一个使用 chef 在不同的数据中心进行不同设置的人。

答案1

如果您正在规划单独的数据中心,您可能会遇到两个问题:

  • 一个 Chef 的安装速度太慢,无法支持所有内容 - 您可能最终会每个 DC 安装一个。

  • 很多各种用途的数据包。此时 GUI 和手动编辑不再是问题。每次更改时同步整个存储库会更容易,而不是处理单个文件或在 GUI 中执行任何操作。

你可能会发现有用的(如果你在每个 DC 都有类似的服务)是使用每个环境的全名 - 即“eu-test”、“eu-prod”等,并反转层次结构,这样你最终会得到

/ database
  - eu-stage
  - eu-prod
  - us-prod
/ web
  ...

和访问/service/$environment

我相信不同组织的数据包也是分开的,所以如果你的useu完全不同,那么它可能很有用。如果它们相似,那么这种分离可能毫无意义。

PS:如果您刚开始使用 chef,请不要将您的服务称为“web”——您很可能很快就会得到另一个具有不同角色的 web 服务器... 给它一个更有意义的名字。“数据库”也一样。

答案2

我最终实施的解决方案是记录在我的博客上

基本上我有 3 个角色和 2 个环境。我根据服务器的位置和类型为其应用多个角色。

  • 服务角色 (roleA)
  • 覆盖角色(override-roleA)
  • 数据中心角色 (datacenter-us-west)
  • 生产环境(prod,stage)

层次结构最终看起来像这样:

示例角色

相关内容