通过MCollective更加安全地实现Puppet的推送更新功能
1 介绍
1.1 Mcollective介绍
MCollective 是一个构建服务器编排(Server Orchestration)和并行工作执行系统的框架。
首先,MCollective 是一种针对服务器集群进行可编程控制的系统管理解决方案。在这一点上,它的功能类似:Func,Fabric 和 Capistrano。
其次,MCollective 的设计打破基于中心存储式系统和像 SSH 这样的工具,不再仅仅痴迷于 SSH 的 For 循环。它使用发布订阅中间件(Publish Subscribe Middleware)这样的现代化 工具和通过目标数据(meta data)而不是主机名(hostnames)来实时发现网络资源这样的现代化理念。提供了一个可扩展的而且迅速的并行执行环境。
MCollective 工具为命令行界面,但它可与数千个应用实例进行通信,而且传输速度惊人。无论部署的实例位于什么位置,通信都能以线速进行传输,使用的是一个类似多路传送的推送信息系统。MCollective 工具没有可视化用户界面,用户只能通过检索来获取需要应用的实例。Puppet Dashboard 提供有这部分功能。
MCollective特点:
能够与小到大型服务器集群交互
使用广播范式(broadcast paradigm)来进行请求分发,所有服务器会同时收到请求,而只有与请求所附带的过滤器匹配的服务器才会去执行这些请求。没有中心数据库来进行同步,网络是唯一的真理
打破了以往用主机名作为身份验证手段的复杂命名规则。使用每台机器自身提供的丰富的目标数据来定位它们。目标数据来自于:Puppet, Chef, Facter, Ohai 或者自身提供的插件
使用命令行调用远程代理
能够写自定义的设备报告
大量的代理来管理包,服务和其他来自于社区的通用组件
允许写 SimpleRPC 风格的代理、客户端和使用 Ruby 实现 Web UIs
外部可插件化(pluggable)实现本地需求
中间件系统已有丰富的身份验证和授权模型,利用这些作为控制的第一道防线。
重用中间件来做集群、路由和网络隔离以实现安全和可扩展安装。
MCollective 就是一个框架,一个空壳。它除了 MCO 命令之外都可以被替换被自定义。
备注:更多信息请参考http://docs.puppetlabs.com/
1.2 Middleware(RabbitMQ、ActiveMQ)介绍
RabbitMQ是一个实现了高级消息排队协议(AMQP)的消息队列服务。RabbitMQ基于OTP(Open Telecom Platform,开发电信平台)进行构建,并使用Erlang语言和运行时环境来实现。
ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线。ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现
备注:MCollective是基于Apache ActiveMQ中间件来进行开发和测试的,然而其对java和XML格式的配置文件的依赖使我们将更多的注意力和兴趣转移到RabbitMQ中间件服务上。如果考虑到性能和扩展性,部署ActivemMQ是一个更好的选择。
1.3 工作原理图
mcollective触发更新图
备注:更多详细信息请参考
http://docs.puppetlabs.com/mcollective/reference/basic/messageflow.html
2 安装和配置Middleware
备注:ActiveMQ和RabbitMQ选其一进行部署即可
2.1 安装和配置ActiveMQ
2.1.1 安装ActiveMQ
1 [root@puppetserver rpms]# yum install tanukiwrapper activemq activemq-info-provider
2.1.2 配置ActiveMQ
主要配置MCollective连接的端口以及账号、密码及权限
[root@puppetserver rpms]# vim /etc/activemq/activemq.xml
…
<simpleAuthenticationPlugin>
<users>
<!-- <authenticationUser username="${activemq.username}" password="${activemq.password}" groups="admins,everyone"/> --> #禁用
<authenticationUser username="mcollective" password="secret" groups="mcollective,admins,everyone"/> #配置通信的账号及密码
</users>
</simpleAuthenticationPlugin>
…
<authorizationPlugin> #配置权限,默认即可
<map>
<authorizationMap>
<authorizationEntries>
<authorizationEntry queue=">" write="admins" read="admins" admin="admins" />
<authorizationEntry topic=">" write="admins" read="admins" admin="admins" />
<authorizationEntry topic="mcollective.>" write="mcollective" read="mcollective" admin="mcollective" />
<authorizationEntry topic="mcollective.>" write="mcollective" read="mcollective" admin="mcollective" />
<authorizationEntry topic="ActiveMQ.Advisory.>" read="everyone" write="everyone" admin="everyone"/>
</authorizationEntries>
</authorizationMap>
</map>
</authorizationPlugin>
…
<transportConnectors>
<transportConnector name="openwire" uri="tcp://0.0.0.0:61616"/>
<transportConnector name="stomp+nio" uri="stomp://0.0.0.0:61613"/> #配置通信协议为stomp,监听61613端口
</transportConnectors>
…
Puppet 的详细介绍:请点这里
Puppet 的下载地址:请点这里
Puppet 学习系列:
相关阅读: