MCollective架构篇3-Puppet插件的部署及测试

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

    备注:更多插件可以在

    1.1 安装puppet agent插件

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

    1.1.1 安装MCollective的Agent插件

    1.1.2 载入Agent插件

    1. The Marionette Collective version 2.2.4
    2. usage: /usr/bin/mco command <options>
    3. Known commands:
    4. completion facts find
    5. help inventory ping
    6. plugin puppet rpc
    7. Type '/usr/bin/mco help' for a detailed list of commands and '/usr/bin/mco help command'
    8. to get detailed help for a command
    9. [root@agent1 ~]# /etc/rc.d/init.d/mcollective restart
    10. Shutting down mcollective: [ OK ]
    11. Starting mcollective: [ OK ]
    1. [root@puppetserver rpms]# mco inventory agent1.kisspuppet.com #查看节点agent1是否已经载入puppet插件
    2. Inventory for agent1.kisspuppet.com:
    3. Server Statistics:
    4. Version: 2.2.4
    5. Start Time: Thu Oct 03 16:09:03 +0800 2013
    6. Config File: /etc/mcollective/server.cfg
    7. Collectives: mcollective
    8. Main Collective: mcollective
    9. Process ID: 8902
    10. Total Messages: 3
    11. Messages Passed Filters: 3
    12. Messages Filtered: 0
    13. Expired Messages: 0
    14. Replies Sent: 2
    15. Total Processor Time: 0.46 seconds
    16. System Time: 0.12 seconds
    17. Agents:
    18. discovery puppet rpcutil
    19. Data Plugins:
    20. agent fstat puppet #已经载入puppet插件
    21. resource
    22. Configuration Management Classes:
    23. No classes applied
    24. Facts:
    25. mcollective => 1

    1.1.4 从MCollective中运行Puppet

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

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

    1.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信息,模块部分信息如下:

    1. class mcollective::facter {
    2. file{"/etc/mcollective/facts.yaml":
    3. owner => root,
    4. group => root,
    5. mode => 0440,
    6. loglevel => debug, # reduce noise in Puppet reports
    7. content => inline_template('<%= scope.to_hash.reject { |k,v| k.to_s =~ /(uptime.*|path|timestamp|free|.*password.*|.*psk.*|.*key)/ }.to_yaml %>'),
    8. }
    9. }
    10. [root@agent1 ~]# yum install mcollective-facter-facts
    11. [root@agent1 rpms]# ll /usr/libexec/mcollective/mcollective/facts/
    12. total 12
    13. -rw-r--r-- 1 root root 422 Feb 21 2013 facter_facts.ddl
    14. -rw-r--r-- 1 root root 945 Feb 21 2013 facter_facts.rb
    15. # Facts
    16. #factsource = yaml #注释掉
    17. factsource = facter
    18. plugin.yaml = /etc/mcollective/facts.yaml
    19. [root@agent1 rpms]# /etc/rc.d/init.d/mcollective restart
    20. Shutting down mcollective: [ OK ]
    21. Starting mcollective: [ OK ]
    22. [root@puppetserver rpms]# mco inventory agent1.kisspuppet.com #查看节点agent1是否加载了facts插件
    23. Inventory for agent1.kisspuppet.com:
    24. Server Statistics:
    25. Version: 2.2.4
    26. Start Time: Thu Oct 03 16:31:47 +0800 2013
    27. Config File: /etc/mcollective/server.cfg
    28. Collectives: mcollective
    29. Main Collective: mcollective
    30. Process ID: 9485
    31. Total Messages: 37
    32. Messages Passed Filters: 33
    33. Messages Filtered: 4
    34. Expired Messages: 0
    35. Replies Sent: 32
    36. Total Processor Time: 0.74 seconds
    37. System Time: 0.21 seconds
    38. Agents:
    39. discovery puppet rpcutil
    40. Data Plugins:
    41. agent fstat puppet
    42. resource
    43. Configuration Management Classes:
    44. No classes applied
    45. Facts: #可以看到获取的节点facter信息(获取信息需要一些等待时间)
    46. architecture => x86_64
    47. augeasversion => 0.10.0
    48. bios_release_date => 07/02/2012
    49. bios_vendor => Phoenix Technologies LTD
    50. bios_version => 6.00
    51. blockdevice_fd0_size => 4096
    52. uptime_days => 0
    53. uptime_hours => 20
    54. uptime_seconds => 74506
    55. uuid => 564DFBAB-CADC-FC69-36CA-955BFDB30F43
    56. virtual => vmware
    57. [root@puppetserver rpms]# mco facts lsbdistdescription -v #使用mco facts命令对操作系统类型进行显示
    58. Discovering hosts using the mc method for 2 second(s) .... 2
    59. Report for fact: lsbdistdescription
    60. Red Hat Enterprise Linux Server release 5.7 (Tikanga)found 1 times
    61. agent2.kisspuppet.com
    62. agent1.kisspuppet.com
    63. Nodes: 2 / 2
    64. Pass / Fail: 2 / 0
    65. Start Time: Thu Oct 03 16:59:04 +0800 2013
    66. Discovery Time: 2004.83ms
    67. Agent Time: 67.32ms
    68. Total Time: 2072.15ms
    69. [root@puppetserver rpms]# mco facts lsbdistdescription #使用mco facts命令对操作系统类型进行统计
    70. Report for fact: lsbdistdescription
    71. Red Hat Enterprise Linux Server release 5.7 (Tikanga)found 1 times
    72. Red Hat Enterprise Linux Server release 5.8 (Tikanga)found 1 times
    73. Finished processing 2 / 2 hosts in 79.15 ms
    74. [root@puppetserver rpms]# mco facts -v --with-fact hostname='agent1' memoryfree #查看主机agent1的剩余内存
    75. Discovering hosts using the mc method for 2 second(s) .... 1
    76. Report for fact: memoryfree
    77. 795.13 MB found 1 times
    78. agent1.kisspuppet.com
    79. ---- rpc stats ----
    80. Nodes: 1 / 1
    81. Pass / Fail: 1 / 0
    82. Start Time: Thu Oct 03 17:02:13 +0800 2013
    83. Discovery Time: 2005.65ms
    84. Agent Time: 49.37ms
    85. Total Time: 2055.03ms

    1.3 使用元数据定位主机

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

    1. [root@puppetserver rpms]# mco puppet -v runonce rpc --np -F operatingsystemrelease='5.7' -F operatingsystem='RedHat'
    2. Discovering hosts using the mc method for 2 second(s) .... 1
    3. agent2.kisspuppet.com : OK
    4. {:summary=> "Started a background Puppet run using the 'puppet agent --onetime --daemonize --color=false --splay --splaylimit 30' command"}
    5. ---- rpc stats ----
    6. Nodes: 1 / 1
    7. Pass / Fail: 1 / 0
    8. Start Time: Thu Oct 03 17:03:56 +0800 2013
    9. Discovery Time: 2008.09ms
    10. Agent Time: 1187.69ms
    11. Total Time: 3195.78ms

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

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

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

    1.3.2.1 在agent1上定义facter my_apply1和my_apply2

    1. [root@agent1 mcollective]# facter -p | grep my_apply
    2. my_apply1 => apache
    3. my_apply2 => mysql

    1.3.2.2 在agent2上定义facter my_apply2和my_apply3

    1. [root@agent2 mcollective]# facter -p | grep my_apply
    2. my_apply2 => mysql
    3. my_apply3 => php

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

    1. [root@puppetserver facter]# mco puppet -v runonce mco facts -v --with-fact my_apply3='php' #筛选节点facter变量my_apply3=php的主机进行触发puppetd守护进程
    2. Discovering hosts using the mc method for 2 second(s) .... 1
    3. * [ ============================================================> ] 1 / 1
    4. agent2.kisspuppet.com : OK
    5. {:summary=> "Started a background Puppet run using the 'puppet agent --onetime --daemonize --color=false --splay --splaylimit 30' command"}
    6. ---- rpc stats ----
    7. Nodes: 1 / 1
    8. Pass / Fail: 1 / 0
    9. Start Time: Thu Oct 03 23:33:54 +0800 2013
    10. Discovery Time: 2005.35ms
    11. Total Time: 3084.21ms