您的位置:首页 > 其它

通过MCollective更加安全地实现puppet的推送更新功能

2016-09-26 23:44 190 查看

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

2.1.2 配置ActiveMQ

主要配置MCollective连接的端口以及账号、密码及权限

2.1.3 启动ActiveMQ

备注:更多详细配置信息请参考
http://docs.puppetlabs.com/mcollective/reference/plugins/connector_activemq.html

2.2 安装和配置RabbitMQ

2.2.1 安装RabbitMQ

2.2.2 启动rabbitmq-server

          
{msg_index,
21848
},


2.2.3 配置RabbitMQ

2.2.3.1 加载amqp_client和rabbit_stomp插件

2.2.3.2 创建rabbitmq.config配置文件,修改监听端口为61613

2.2.3.3 删除默认账户guest,为MCollective创建账户“mcollective”并设置密码为“secret”,然后设置权限。

备注:RabbitMQ拥有一个默认的guest账户,它默认对消息队列拥有全部权限。出于安全方面的考虑,建议删除这个账户。

更多详细配置信息请参考
http://www.rabbitmq.com/admin-guide.html

更多详细配置信息请参考:
http://docs.puppetlabs.com/mcollective/reference/plugins/connector_rabbitmq.html

3 安装和配置MCollective

3.1 安装MCollective

3.1.1 测试端安装MCollective客户端

3.1.2 节点安装MCollective服务端

3.2 配置MCollective

3.2.1 测试端配置MCollective客户端

3.2.2 节点配置MCollective服务端

3.3 测试Mcollective与Middleware通信

4 Mcollective插件的安装及测试

MCollective可以使用多种方式进行扩展。最普遍的一种扩展MCollective的方式就是重用已经写好的agent插件。这些小的Ruby库可以让MCollective在整个集群中执行自定义的命令。

一个agent插件通常包含一个Ruby库,它必须被分发到所有运行MCollective agent的节点上。另外,一个数据定义文件(DDL)提供了插件接受的传入参数的具体描述,整个DDL文件需要放在MCollective客户端系统上。最后,一个使用指定的agent插件运行MCollective的脚步也需要被安装到所有的MCollective客户端系统上。

备注:更多插件可以在https://github.com/puppetlabs/mcollective-plugins找到。

4.1 安装puppet agent插件

MCollective本身并不包含一个可以立即使用的Puppet agent插件,需要安装使用。这一插件可以让操作员在需要时运行Puppet agent。他不需要等待Puppet agent的默认运行间隔,也不需要使用其他工具来开始这些任务

4.1.1 安装MCollective的Agent插件

4.1.2 载入Agent插件

4.1.3 验证Agent插件是否被载入

4.1.4 从MCollective中运行Puppet

在运行命令之前,可以在节点查看puppet日志和puppetd服务的启停来判断命令是否调用了puppetd进程。

备注:当使用MCollective运行Puppet时,要求在所有被管理的节点上Puppet agent守护进程都需要被关闭。在每次使用mco puppet -v runonce命令调用puppetd agent时,MCollective都会产生一个新的Puppet进程。这个进程会和任何已经运行的Puppet agent守护进程产生功能性的重复。

当Puppet使用—runonce参数运行时,agent会在后台运行。所以虽然MCollective成功运行了Puppet,但实际上的Puppet agent运行可能并不成功。需要查看Puppet报告来确定每一个Puppet agent运行的结果。MCollective返回的OK值表示MCollective服务器成功地启动了puppetd进程并且没有得到任何输出。

4.2 安装facter插件(测试多次发现存在不稳定性)

注意:通过facter插件获取节点facter变量信息不是很稳定,因此可将节点facts信息通过inline_template写入/etc/mcollective/facts.yaml中,并在/etc/mcollective/server.cfg中设置factsource = yaml,这样MCollective客户端只需要每次读取这个文件中的facter变量即可。而且在本地目录/var/lib/puppet/yaml/facts/也会生成一份节点的facter信息,模块部分信息如下:

4.3 使用元数据定位主机

4.3.1 使用默认facter元数据定位主机

4.3.1.1 触发所有系统为RedHat,版本为5.7的所有节点puppetd守护进程

4.3.1.2 触发所有系统为RedHat,kernel版本为2.6.18的所有节点puppetd守护进程

4.3.2 使用自定义facter元数据定位主机

备注:使用自定义facter元数据可以更加灵活的定位主机,如何定义fact可参考博文《通过自定义fact增强MCollective推送更新元数据的灵活性》

4.3.2.1 在agent1上定义facter my_apply1和my_apply2

4.3.2.2 在agent2上定义facter my_apply2和my_apply3

4.3.2.3 在MCollective客户端测试节点自定义facter是否正确

4.3.2.4 通过自定义facter定位主机触发更新

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  MCollective puppet