多节点SOA应用程序的配置管理

时间:2013-12-10 01:11:22

标签: chef puppet continuous-deployment continuous-delivery

所以这似乎是当今软件中的常见问题。许多公司似乎使用AWS,Azure或Heroku等云平台解决了这个问题。但是,对于需要私有云的数据安全性,这些选项似乎不太发达。

详细说明,我的具体需求是管理独立于节点(物理/虚拟服务器)的应用程序。目前我们使用Chef,这似乎不太适合这项任务。在Chef中,我需要在环境中的每个单独节点上都有一个运行列表。当我有一个依赖于许多不同服务的SOA应用程序时,由于显而易见的原因我不希望在同一节点上安装这些服务,所以Chef不能给我这个。我必须手动完成。我必须在内部记录所有依赖项,并且有人必须在为每个节点创建运行列表时做出决定。没有多节点类型配置选项(在环境变量之外)或在多个节点上安装我的服务的自动方式。

这似乎是一个普遍的问题,我不得不相信我只是缺少一些东西。必须有一个工具,让我比私有云更容易管理私有云上的SOA应用程序。

有谁知道这样的工具?对我来说,厨师如此受欢迎并且没有这个功能似乎很疯狂。我想假设有Puppet或其他工具,但与Chef不同的是,在我深入尝试使用它之前,我想先了解。

在Chef条款中压缩我想要的东西:

我想要映射到封装应用程序的环境的角色。我想在环境中运行安装,而不是单个节点。在内部,配置管理软件将对哪个节点实际安装服务做出某种明智的决定,并相应地更新服务依赖性(例如,通过环境变量)。

换句话说,我希望将CD作为托管在私有云上的SOA应用程序的CD;不是我与Chef一起进行的半手动,大部分不连续交付的黑客攻击。

如果有人从opscode那里(或其他厨师粉丝),我很乐意承认我可能没有使用所有厨师提供的,在这种情况下我想知道目前使用它的人是如何处理我的具体问题。

此外,如果重要的话,我的所有服务器都是Windows 2008 R2或Windows 2012。

5 个答案:

答案 0 :(得分:5)

这确实是一个普遍存在的问题,而葡萄藤的暗示似乎暗示Opscode(现在我称之为Chef)已经意识到这一点并正在研究解决方案。希望这是我们在Chef 12中看到的。

问题是Chef是一个配置管理系统。它不是严格意义上的配置或编排产品。刀试图解决这个问题,但规模极其简陋。其他产品,如Ansible和Puppet,更有能力解决这个问题。但同样,即使它们也不是严格的编排产品,但仍然不足。

我自己没有机会使用它,但你应该看看http://deis.io/。它是一个开源的,轻量级的平台即服务,似乎解决了编排问题。这可能就是你要找的东西。

另一个选择是使用https://github.com/coreos/etcd之类的内容进行库存管理。它允许您拥有一个非常灵活的集中式系统库存API,并提供超过Chef自己的搜索数据。有了它,您可以编写食谱来查找其他系统和服务,并采取措施连接它们。它开始变得很好,但是你总是可以让Chef执行一个ssh命令来执行远程实例上的命令。

无论如何,只是一些建议。希望有所帮助。

答案 1 :(得分:1)

  

我想在THE ENVIRONMENT上运行安装,而不是单个节点。在内部,配置管理软件会对哪个节点实际安装服务做出某种明智的决定,并相应地更新服务依赖性

您正在寻找PAAS解决方案(平台即服务)。厨师和傀儡都不会给你这个。它们是主要用于自动化基础架构部署的工具。但是,它们可用于安装应用程序,因为您已经注意到它们采用了基于“节点”的方法。

我不知道任何针对Windows的开源PAAS解决方案,因此我建议调查Microsoft Azure等托管解决方案的商业替代方案。

答案 2 :(得分:1)

我没有将Puppet与Windows一起使用,但是Puppet与Facter捆绑在一起,后者提供对自定义事实的支持 - http://puppetlabs.com/blog/facter-part-1-facter-101

所有facter的变量都可用于puppet清单,因此您可以创建在不同环境中执行不同操作的运行列表。

此外,您提到了应用程序而不是节点的配置 - 这就是Puppet模块的用途,您可以轻松创建自己的配置。这将允许不同的节点应用某些模块,忽略其他模块,甚至确保模块不存在。

答案 3 :(得分:0)

我很惊讶没有提到RightScale,Scalr或enStratus。大多数这些解决方案填补了SOA交付的空白,并根据需要灵活地部署了SOA部分。

答案 4 :(得分:0)

我知道这不是100%的胜利,但如果我理解你的问题,它会有所帮助。我们使用定制的烹饪书(显然),但具有角色意识。我的意思是,如果我们启动一个新的应用服务器,我们的负载均衡器会自动更新新的服务器信息。您可以使用

实现此目的
appservers = search(:node, "role:applicationServer")

并根据合适的方式对其进行自定义。

就自动缩放而言,我们有自己的python脚本来处理它。