4

我正在努力在亚马逊云上迁移我们的服务器,原因显然是自动扩展的可能性、成本、服务等等。

到目前为止,我正在努力尝试并尝试深入研究功能齐全的文档,但是没有以前的经验,我有很多问题。

设想的基础设施如下:

                                  +-----+
                                  | ELB |
                                  +--+--+
                                     |
                +--------------------|--------------------+
                |            Auto-Scaling Group           |
                |--------------------|--------------------|
                |                    |                    |
                |  +---------+       |       +---------+  |
                |  | varnish |<------+------>| varnish |  |
                |  +----+----+               +---------+  |
                |       |                         |       |
                +-----------------------------------------+
                        |                         |
                        |                         |
                        |     +------------+      |
                        +---->|Internal ELB|<-----+
                              +------+-----+
                                     |
                +-----------------------------------------+
                |            Auto-Scaling Group           |
                |-----------------------------------------|
                |  +---------+       |       +---------+  |
                |  | Apache  |<------+------>| Apache  |  |
                |  +----+----+               +----+----+  |
                |       |                         |       |
                +-----------------------------------------+
                        |         +-----+         |
                        +-------->| RDS |<--------+
                                  +-----+

换句话说,我将拥有 Elastic LoadBalancer,它将流量发送到 Varnish 实例,而 Varnish 实例又将流量发送到内部 Elastic LoadBalancer,该内部 Elastic LoadBalancer 将流量发送到 Apache 前端。

目前,我已经发现了 AWS 工具,例如CloudFormation似乎能够在给定模板的情况下引导实例的服务,这看起来很棒,但似乎只能引导。

有一点经验Puppet(并且考虑到 AWS 在这个主题上的建议),我喜欢 Puppet Master 的东西,这是一个很棒的工具。

我的想法可能不可行或不现实,是使用CloudFormation模板创建一个“Puppet Node Stack”,它将根据需要配置实例并连接要配置的 puppet master。

准备好堆栈后,我想知道如何为实例VarnishApache实例配置/创建 Auto-Scaling 组。

CFN 似乎有资源来配置自动扩展组和策略,所以我想我可以为每个创建两个不同的模板。

但是 AS 功能是否会通过 CFN 服务运行,然后执行所有初始化操作(并执行user-data)?

我还在这里和那里读到 Puppet 可以使用 EC2 标签,也许带有相应标签(如角色)的通用堆栈模板可以做到这一点?

这种架构是否现实可行?你有什么反馈吗?

感谢您的建议。

4

2 回答 2

5

自动缩放会根据启动配置创建新节点。因此,您将拥有两个独立的 Auto Scaling 组和两个独立的启动配置。IE

"VarnishScalingGroup" : {
  "Type" : "AWS::AutoScaling::AutoScalingGroup",
  "Properties" : {
    "LaunchConfigurationName" : {"Ref" : "VarnishLaunchConfiguration" },
    "LoadBalancerNames" : {"Ref" : "ELB"},
    ...
  }
},
"VarnishLaunchConfiguration" : {
  "Type" : "AWS::AutoScaling::LaunchConfiguration",
  "Properties" : {
    ...
    "UserData" : {
      ....
    },
    "MetaData" : {
      ...
    }
 },
"ApacheScalingGroup" : {
  "Type" : "AWS::AutoScaling::AutoScalingGroup",
  "Properties" : {
    "LaunchConfigurationName" : {"Ref" : "ApacheLaunchConfiguration" },
    "LoadBalancerNames" : {"Ref" : "InternalELB"},
    ...
  }
},
"ApacheLaunchConfiguration" : {
  "Type" : "AWS::AutoScaling::LaunchConfiguration",
  "Properties" : {
    ...
    "UserData" : {
      ....
    },
    "MetaData" : {
      ...
    }
 }

您要添加的另一件事是每个扩展组的单独扩展策略,以及要匹配的适当 CloudWatch 指标。

CloudFormation 还可以启动堆栈更新。如果作为用户数据的一部分您启动 cfn-hup,那么它将定期(您决定)检查堆栈元数据中的更改 - 然后执行您喜欢的任何内容。我倾向于启动另一个版本的 cfn-init——它将解析和更新任何元数据。

关键点 - 如果您沿着 cfn-hup 路径走下去,它将不会再次执行 userdata,除非 CloudFormation 堆栈需要删除并创建新实例。

还有一点,如果您希望推出对 LaunchConfiguration 的更新,您需要确保 LaunchConfiguration 也应用了 UpdatePolicy。

于 2013-08-13T22:35:27.847 回答
2

除了使用“Puppet 节点堆栈”之外,您可能还需要考虑使用像 packer ( http://www.packer.io/ )这样的工具来预先构建您的 AMI ,它可以为机器配置 puppet 并创建一个 AMI。然后将预置的 AMI 添加到您的 cloudformation 模板。

正如 Peter H. 所说,cloudformation 可以处理堆栈的更新。因此,当您更改您的 puppet 设置时,您可以构建一个新的 AMI 并在 cloudformation 中更新您的启动配置。自动缩放将开始使用新的 AMI 来自动缩放新实例。

将 puppet 从 cloudformation 中分离出来可以分离基础架构和服务器配置之间的关注点。

使用已经具有 Apache/Varnish 设置的预构建 AMI 可以更快地进行扩展。

无主木偶设置也有优势。IE。去中心化,没有 puppetmaster 作为故障点等。请参阅https://serverfault.com/questions/408261/pros-and-cons-of-a-decentralized-puppet-architecture

于 2013-12-03T12:32:59.797 回答