2011-04-25 37 views

回答

25

完整堆栈的例子很难得到。但是,您应该能够找到管理某些特定示例的模块示例。一个问题是,创建一个抽象出所有站点特定假设并且是真正跨平台的模块可能需要额外的工作。

http://forge.puppetlabs.com/是人们希望分享的模块的规范位置。通过快速扫描,我发现模块为nginx,varnishpostgres

您需要从Puppet Best Practices开始进行基本设置。

从那里,你要(至少),需要一个模块nginx,varnish,thin,postgres,memcached,redis和一个站点模块(可能以您的站点命名)。

在你的nodes.pp中,每个系统都有一个相当简单的角色分配。 (“包含角色”)

在你的“网站”模块中,你需要为每个系统角色分配一个子类(我假设你将有多组服务器,意图是基本相同的,我也假设你可能有多于一个以上的)。您可能还需要一个site :: commonvariables类(或类似的东西),用于跨多个其他模块或类可能需要的东西(例如角色中的服务器列表,密码等)。最佳做法似乎在名称更像s_role的/服务辅助模块区域中包含这些site :: role事件,因此您可能需要遵循该命名/布置方案。这些角色类将包括这些角色所需的实际组件的类别,调用定义等。

对于您提到的6个组件中的每一个,都会有一个模块。在该模块中,您可能需要以拥有类似“服务器”和“客户端”子类的内容。客户端和服务器可能包含第三个类,用于两个(公共库等)需要的东西。并且在服务器子类中定义一个设置特定实例(虚拟主机,数据库等)的定义。 (如果它绝对只有一台服务器,可能跳过子级别)。

因此,举例来说:

  • Postgres的模块(舱单,文件,模板等)
    • 的Postgres类(在初始化。PP):也许空类,也许需要的东西通过客户端和服务器
      • 的Postgres ::客户端类:安装的Postgres客户端库
      • 的Postgres ::服务器类:安装Postgres的服务器代码,确保Postgres的服务正在运行,配置它,设置备份等
        • postgres :: server :: database定义:在服务器类中,一个定义使用数据库名称,用户名,密码等参数,并创建数据库和用户并给出用户访问数据库。也许这是两个或三个单独的定义,取决于你喜欢如何建模。

这是最好的,如果组件模块都保持相对独立(和可重复使用)和你的角色等级是所有更具体的站点配置情况,但它不是结束世界,如果你的组件模块包含一些网站特定的东西。

+0

感谢这个信息。这可能是我希望得到关于这个问题的明确答案的最接近的结果。我碰到的一个障碍是,要开始时,我将只运行2个具有混合“类”的虚拟机 - 将负载均衡器和应用程序服务器称为一个,将数据库称为另一个。随着网站的增长,我想要分离应用服务器(并可能增加更多)。我没有看到很多这样的例子(分裂课程),所以很难在这方面衡量一个“最佳实践”的设置。如果您有任何其他提示,他们会非常感激。再次感谢。 – markquezada 2011-04-27 20:26:59

+1

创建至少与您认为最终可以分割内容的单个类相同的类,并为每个VM“类型”定义一个主类,以定义这些类中包含哪些类。在成长过程中,为新的角色拆分创建新的主类,并将服务器分配给新的主类而不是旧的主类。您可能还需要一些“否定”类,它们删除一个类,并将这些类包含在已从系统角色中删除的东西上。 – freiheit 2011-04-27 22:01:45

+0

超级有用。谢谢! – markquezada 2011-04-28 00:42:38