我正在努力在Amazon Cloud上迁移我们的服务器,理由是自动扩展可能性,成本,服务等等。显然。
到目前为止,我正在努力尝试并试图深入研究全功能的文档,但由于没有以前的经验,我有很多问题。
设想的基础设施如下:
+-----+
| ELB |
+--+--+
|
+--------------------|--------------------+
| Auto-Scaling Group |
|--------------------|--------------------|
| | |
| +---------+ | +---------+ |
| | varnish |<------+------>| varnish | |
| +----+----+ +---------+ |
| | | |
+-----------------------------------------+
| |
| |
| +------------+ |
+---->|Internal ELB|<-----+
+------+-----+
|
+-----------------------------------------+
| Auto-Scaling Group |
|-----------------------------------------|
| +---------+ | +---------+ |
| | Apache |<------+------>| Apache | |
| +----+----+ +----+----+ |
| | | |
+-----------------------------------------+
| +-----+ |
+-------->| RDS |<--------+
+-----+
在的话,我将具有弹性负载平衡器将流量发送到该清漆的情况下,这将反过来发送流量到内部弹性负载平衡器将流量发送到Apache前端。
目前,我已经发现了AWS工具,比如CloudFormation
服务似乎能够在给定模板的情况下引导实例,这看起来很棒,但它似乎只能引导。
对Puppet
有一点经验(并考虑到AWS对该主题的推荐),我参加了Puppet Master这个很棒的工具。
我的想法,可能不可行或不现实,是创建一个&#34; Puppet Node Stack&#34;使用CloudFormation
模板,它将根据需要配置实例并连接要配置的puppet master。
准备好堆栈后,我想知道如何为Varnish
和Apache
实例配置/创建Auto-Scaling组。
似乎CFN有资源配置自动缩放组&amp;政策,所以我想我可以为每个模板创建两个不同的模板。
但AS功能是否会通过CFN服务运行,然后执行所有init事务(并执行user-data
)?
我也在这里和那里读到Puppet可以使用EC2标签,也许一个通用的堆栈模板和相应的标签(比如角色)可以做到这一点?
这种架构是否真实可行?你有任何反馈意见吗?
感谢您的建议。
答案 0 :(得分:5)
自动缩放根据启动配置创建新节点。因此,您将拥有两个单独的自动缩放组和两个单独的启动配置。即
"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。
答案 1 :(得分:2)
您可能需要考虑使用像packer(http://www.packer.io/)之类的工具预先构建您的AMI,而不是使用“Puppet Node Stack”,这可以为机器配置puppet并创建AMI。然后将配置的AMI添加到您的云信息模板。
正如Peter H.所说,cloudformation可以处理堆栈的更新。因此,当您对puppet设置进行更改时,您可以构建新的AMI并在cloudformation中更新启动配置。自动扩展将开始使用新的AMI进行自动扩展新实例。
将puppet从cloudformation中移除可以让您分清基础架构和服务器配置之间的关注点。
使用预先构建的AMI(已经有Apache / Varnish设置),扩展速度会更快。
无主木偶设置也有优势。即。权力下放,没有将puppetmaster作为失败点等。请参阅https://serverfault.com/questions/408261/pros-and-cons-of-a-decentralized-puppet-architecture