MCollective架构篇2-MCollective+MQ架构的部署

1 Mcollective介绍

其次,MCollective 的设计打破基于中心存储式系统和像 SSH 这样的工具,不再仅仅痴迷于 SSH 的 For 循环。它使用发布订阅中间件(Publish Subscribe Middleware)这样的现代化 工具和通过目标数据(meta data)而不是主机名(hostnames)来实时发现网络资源这样的现代化理念。提供了一个可扩展的而且迅速的并行执行环境。

MCollective 工具为命令行界面,但它可与数千个应用实例进行通信,而且传输速度惊人。无论部署的实例位于什么位置,通信都能以线速进行传输,使用的是一个类似多路传送的推送信息系统。MCollective 工具没有可视化用户界面,用户只能通过检索来获取需要应用的实例。Puppet Dashboard 提供有这部分功能。

2 安装和配置RabbitMQ

2.1.1 安装RabbitMQ

2.1.2 启动rabbitmq-server

  1. Starting rabbitmq-server: SUCCESS
  2. rabbitmq-server.
  3. [root@puppetserver rpms]# /etc/rc.d/init.d/rabbitmq-server status #查看rabbitmq状态
  4. Status of node rabbit@puppetserver ...
  5. [{pid,43198},
  6. {running_applications,[{rabbit,"RabbitMQ","3.1.5"},
  7. {mnesia,"MNESIA CXC 138 12","4.5"},
  8. {os_mon,"CPO CXC 138 46","2.2.7"},
  9. {xmerl,"XML parser","1.2.10"},
  10. {sasl,"SASL CXC 138 11","2.1.10"},
  11. {stdlib,"ERTS CXC 138 10","1.17.5"},
  12. {kernel,"ERTS CXC 138 10","2.14.5"}]},
  13. {os,{unix,linux}},
  14. {erlang_version,"Erlang R14B04 (erts-5.8.5) [source] [64-bit] [rq:1] [async-threads:30] [kernel-poll:true]\n"},
  15. {memory,[{total,27101856},
  16. {connection_procs,2648},
  17. {queue_procs,5296},
  18. {plugins,0},
  19. {other_proc,9182320},
  20. {mnesia,57456},
  21. {mgmt_db,0},
  22. {msg_index,21848},
  23. {other_ets,765504},
  24. {binary,3296},
  25. {code,14419185},
  26. {atom,1354457},
  27. {other_system,1289846}]},
  28. {vm_memory_high_watermark,0.4},
  29. {vm_memory_limit,838362726},
  30. {disk_free_limit,1000000000},
  31. {disk_free,15992676352},
  32. {file_descriptors,[{total_limit,924},
  33. {sockets_limit,829},
  34. {sockets_used,1}]},
  35. {processes,[{limit,1048576},{used,122}]},
  36. {run_queue,0},
  37. ...done.
  38. [root@puppetserver rpms]# netstat -nlp | grep beam #默认监听端口为5672
  39. tcp 0 0 0.0.0.0:44422 0.0.0.0:* LISTEN 43198/beam
  40. tcp 0 0 :::5672 :::* LISTEN 43198/beam

2.1.3 配置RabbitMQ

  1. [root@puppetserver sbin]#ln -s /usr/lib/rabbitmq/lib/rabbitmq_server-3.1.5/sbin/rabbitmq-plugins /usr/sbin/rabbitmq-plugins #创建命令rabbitmq-plugins的软连接
  2. [root@puppetserver sbin]# ln -s /usr/lib/rabbitmq/lib/rabbitmq_server-3.1.5/sbin/rabbitmq-env /usr/sbin/rabbitmq-env #创建命令rabbitmq-env的软连接
  3. [root@puppetserver sbin]# rabbitmq-plugins enable rabbitmq_stomp #开启rabbitmq_stomp插件
  4. The following plugins have been enabled:
  5. amqp_client
  6. rabbitmq_stomp
  7. Plugin configuration has changed. Restart RabbitMQ for changes to take effect.
  8. [root@puppetserver sbin]# /etc/rc.d/init.d/rabbitmq-server restart
  9. Restarting rabbitmq-server: SUCCESS
  10. rabbitmq-server.
  11. [root@puppetserver rabbitmq]# tailf /var/log/rabbitmq/rabbit\@puppetserver.log #可以从日志看到stomp插件加载成功
  12. =INFO REPORT==== 3-Oct-2013::20:25:18 ===
  13. started STOMP TCP Listener on [::]:61613
  14. =INFO REPORT==== 3-Oct-2013::20:25:18 ===
  15. Server startup complete; 2 plugins started.
  16. * amqp_client
  17. * rabbitmq_stomp
  • 2.1.3.2 创建rabbitmq.config配置文件,修改监听端口为61613

    [root@puppetserver rpms]# vim /etc/rabbitmq/rabbitmq.config
    [

    ].
    [root@puppetserver rpms]# /etc/rc.d/init.d/rabbitmq-server restart
    Restarting rabbitmq-server: SUCCESS
    rabbitmq-server.
    [root@puppetserver rpms]# netstat -nlp | grep beam #默认监听端口为61613
    tcp 0 0 0.0.0.0:56532 0.0.0.0: LISTEN 1906/beam.smp
    tcp 0 0 :::61613 :::
    LISTEN 1906/beam.smp
    tcp 0 0 :::5672 :::* LISTEN 1906/beam.smp

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

  1. [root@puppetserver rpms]# rabbitmqctl delete_user guest
  2. Deleting user "guest" ...
  3. ...done.
  4. [root@puppetserver rpms]# rabbitmqctl add_user mcollective secret
  5. Creating user "mcollective" ...
  6. ...done.
  7. [root@puppetserver rpms]# rabbitmqctl set_permissions -p "/" mcollective ".*" ".*" ".*"
  8. Setting permissions for user "mcollective" in vhost "/" ...
  9. ...done.
  10. [root@puppetserver sbin]# rabbitmqctl list_users #查看监听用户
  11. Listing users ...
  12. mcollective []
  13. ...done.

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

更多详细配置信息请参考:

3 安装和配置MCollective

3.1.1 测试端安装MCollective客户端

    3.1.2 节点安装MCollective服务端

    3.2.1 测试端配置MCollective客户端

    1. [root@puppetserver rpms]# vim /etc/mcollective/client.cfg
    2. topicprefix = /topic/
    3. collectives = mcollective
    4. libdir = /usr/libexec/mcollective
    5. logger_type = console
    6. loglevel = warn
    7. # Plugins
    8. securityprovider = psk
    9. plugin.psk = a36cd839414370e10fd281b8a38a4f48 #MCollective通信共享密钥,和MCollective服务端保持一致
    10. connector = stomp #通信协议
    11. plugin.stomp.host = 192.168.100.110 #Middleware地址
    12. plugin.stomp.port = 61613 #Middleware监听端口
    13. plugin.stomp.user = mcollective #Middleware通信账号
    14. plugin.stomp.password = secret #Middleware通信密码
    15. # Facts
    16. factsource = yaml
    17. plugin.yaml = /etc/mcollective/facts.yaml

    3.2.2 节点配置MCollective服务端

    1. [root@agent1 rpms]# vim /etc/mcollective/server.cfg
    2. topicprefix = /topic/
    3. main_collective = mcollective
    4. collectives = mcollective
    5. libdir = /usr/libexec/mcollective #存放plugins的位置
    6. logfile = /var/log/mcollective.log
    7. loglevel = info
    8. daemonize = 1
    9. # Plugins
    10. securityprovider = psk
    11. plugin.psk = a36cd839414370e10fd281b8a38a4f48 #MCollective通信共享密钥,和MCollective客户端保持一致
    12. connector = stomp #通信协议
    13. plugin.stomp.host = 192.168.100.110 #Middleware地址
    14. plugin.stomp.port = 61613 #Middleware监听端口
    15. plugin.stomp.user = mcollective #Middleware通信账号
    16. plugin.stomp.password = secret #Middleware通信密码
    17. # Facts
    18. factsource = yaml
    19. plugin.yaml = /etc/mcollective/facts.yaml
    20. [root@agent1 ~]# /etc/rc.d/init.d/mcollective start
    21. Starting mcollective: [ OK ]
    22. [root@agent1 ~]# chkconfig mcollective on