CHEF可以在不同的数据中心使用不同的数据包

厨师12 organizationsenvironments的概念。

你将如何逻辑build模不同的数据中心

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

 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 

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

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

然而,数据库具有严格的二级层次,没有我能find的“数据中心”的概念。

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

  1. 使用2级数据库

    $环境/美网
    $环境/我们的数据库
    $环境/ EU-网
    $环境/ EU数据库

这有很多数据库放在一个目录下的缺点。 即使你使用托pipeCHEF的GUI,这仍然很难滚动数据包。 (8 data centers * 4 environments * 6 types of webservers + 2 types of database servers = a lot )

  1. 在angular色/节点属性中放入一个数据中心variables,并写一个辅助方法来查找正确的数据包。

这是在IRC上提出的,但是写一个帮手的方法看起来非常复杂(对于厨师来说是新的,从来没有做过这样的事情)。 另外,它似乎是一个应用程序非常普遍的重用方法。 例如, 这可以简单地在puppet + hiera中完成

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

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

  • 一个厨师安装速度太慢,无法支持所有事情 – 你可能最终会得到一个DC。

  • 很多数据库用于各种目的。 在这一点上,GUI和手动编辑停止成为一个问题。 只是在每次更改时对整个存储库进行同步,而不是处理单个文件或在GUI中执行任何操作。

你可能会觉得有用(如果你在每个区域都有类似的服务),就是在每个环境中使用全名 – 就像“eu-test”,“eu-prod”等一样,并且颠倒层级,与…一起

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

和access /service/$environment

我相信组织之间的数据包也是分开的,所以如果你和us完全不同,那么可以有用。 如果它们是相似的,那么在这种分离中可能没有意义。

PS:如果你刚开始与厨师,不要叫你的服务“networking” – 你很可能会得到另一个不同angular色的networking服务器…给它一个更有意义的名字。 相同的“数据库”。

我最终实现的解决schemelogging在我的博客上

基本上我有3个angular色和2个环境。 我根据其位置和types将多个angular色应用于服务器。

  • 服务angular色(roleA)
  • 覆盖angular色(override-roleA)
  • 数据中心angular色(datacenter-us-west)
  • 产品环境(产品,阶段)

层次结构看起来像这样:

角色示例