MCollectiveのインストールと動作確認

MCollective - Marionette Collective AKA MCollective - が気になったので試してみました。

mcollectiveはPuppet を作っているpuppet labs のプロダクトです。ruby製。

日本語で紹介されているこちらのエントリでは、以下のように分かりやすく解説がされていました。

一言で言うと、"定例作業を効率的に行うのがpuppet/chefの役割"で、"MCollectiveは非定例作業を効率的に行う"ことのできるツールです。

本家のサイトの紹介を見ると、"複数のサーバー群に対して任意のオペレーションを並列実行するためのフレームワーク"とされています。同じような作業を行う為のフレームワーク・ツールとしては他にもFunc, Capistrano, Fabricが同じく紹介されています。(最後の知らない。)Capistranoはデプロイツールとして有名ですね。

他のツールと比べて、MCollectiveのポイントは以下の2つだと感じました。

  • サーバー群に対して設置場所(たとえばDCや、国とかも)を意識せず
  • シンプル且つスピーディーにオペレーションを行う

あるクライアントから複数サーバー群に対して任意の作業を行うときに、普通であれば

  • クライアント -> サーバー群で 1:m

であったのが、MCollectiveは

  • クライアント -> 作業を管理する並列キューシステム -> サーバー群で 1:n:m

と一枚噛んでます。この真ん中の並列キューシステムが上記の2つのポイントの肝になっているという感じでしょうか。
より詳細なアーキテクチャの解説がされている、本家のスライドはこちら

何はともあれ動かしてみたいと思います。

各要素に必要なパッケージは以下のようになっています。

  • クライアント: mcollective-client
  • 作業を管理するキューシステム: activemq
  • サーバー群: mcollective

今回は以下のホスト構成にイントールしました。
全台 CentOS 5.5 x86_64, ほか依存するとこだとrubyだけど、ruby-1.8.5-5.el5_4.8, rubygems-1.3.1-1.el5, あとついでに facter-1.5.8-1.el5

  • collective-client, activemq
    • manage01.tnmt.local
  • collective
    • test01.tnmt.local
    • test02.tnmt.local

共通 @ manage01, test01, test02

事前に必要なツールのインストール。

mcollectiveがrubyのメッセージキュークライアントを使ってるのでそちらを

sudo yum -y --enablerepo=epel install rubygem-stomp rubygems

mcollectiveの共通コンポーネント

wget  http://puppetlabs.com/downloads/mcollective/mcollective-common-1.0.0-2.el5.noarch.rpm</kbd>
sudo rpm -Uvh mcollective-common-1.0.0-2.el5.noarch.rpm

mcollective @ test001, test002

mcollective インストール

wget  http://puppetlabs.com/downloads/mcollective/mcollective-1.0.0-2.el5.noarch.rpm</kbd>
sudo rpm -Uvh mcollective-1.0.0-2.el5.noarch.rpm

設定

/etc/mcollective/server.cfg が設定ファイルになります。 plugin.stomp.host に activemq が動いてるサーバーを指定ですね。パスワードは伏せてありますが変更してあります、あとでactivemqの設定にも関わってきます。

--- /etc/mcollective/server.cfg.dist    2010-12-12 02:01:11.000000000 +0900
+++ /etc/mcollective/server.cfg 2011-02-26 14:14:10.000000000 +0900
@@ -9,10 +9,10 @@
 plugin.psk = unset

 connector = stomp
-plugin.stomp.host = stomp.example.com
+plugin.stomp.host = manage01.tnmt.local
 plugin.stomp.port = 6163
 plugin.stomp.user = mcollective
-plugin.stomp.password = marionette
+plugin.stomp.password = XXXXXXXXXXXXXXXX

 # Facts
 factsource = yaml

サービススタート

sudo /etc/init.d/mcollective start

mcollective-client @ manage01

インストール

wget  http://puppetlabs.com/downloads/mcollective/mcollective-client-1.0.0-2.el5.noarch.rpm
sudo rpm -Uvh mcollective-client-1.0.0-2.el5.noarch.rpm

設定

/etc/mcollective/client.cfg を編集。箇所は先ほどと同じく activemq が動くホストを指定。

--- /etc/mcollective/client.cfg.dist    2010-12-12 02:01:11.000000000 +0900
+++ /etc/mcollective/client.cfg 2011-02-26 14:12:06.000000000 +0900
@@ -8,10 +8,10 @@
 plugin.psk = unset

 connector = stomp
-plugin.stomp.host = stomp.example.com
+plugin.stomp.host = manage01.tnmt.local
 plugin.stomp.port = 6163
 plugin.stomp.user = mcollective
-plugin.stomp.password = marionette
+plugin.stomp.password = XXXXXXXXXXXXXXXX

 # Facts
 factsource = yaml

activemq @ manage01

ActiveMQはJMS実装のプロダクトです。こいつがmcollective, mcollective-client双方のメッセージのやりとりを介してくれます。JMSの名の通り中身はJava

インストール

Javaインストール

sudo yum -y install java-1.6.0-openjdk

puppetlabsから提供されてるパッケージをまとめてインストール

for package in tanukiwrapper-3.2.3-1jpp.x86_64.rpm  activemq-5.4.0-2.el5.noarch.rpm activemq-info-provider-5.4.0-2.el5.noarch.rpm
do 
sudo rpm -Uvh http://puppetlabs.com/downloads/mcollective/$package
done

設定

mcollective用の設定を読むように /etc/activemq/activemq-wrapper.conf 編集

--- /etc/activemq/activemq-wrapper.conf.dist    2010-08-18 05:48:16.000000000 +0900
+++ /etc/activemq/activemq-wrapper.conf 2011-01-26 13:23:01.000000000 +0900
@@ -82,7 +82,7 @@
 # Application parameters. activemq.xml will be loaded from the config directory
 wrapper.app.parameter.1=org.apache.activemq.console.Main
 wrapper.app.parameter.2=start
-wrapper.app.parameter.3-xbean:activemq.xml
+wrapper.app.parameter.3=xbean:mcollective.xml

 #********************************************************************
 # Wrapper Logging Properties

mcollective用の設定 /etc/activemq/mcollective.xml 作成。simpleAuthenticationPluginのauthenticationUserという項目がありますが、ここには mcollective, mcollective-client の設定で変更したパスワードが入ります。

<beans
    xmlns="http://www.springframework.org/schema/beans"
    xmlns:amq="http://activemq.apache.org/schema/core"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
    http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd
    http://activemq.apache.org/camel/schema/spring http://activemq.apache.org/camel/schema/spring/camel-spring.xsd">
 
    <broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost" useJmx="true">
        <plugins>
            <authorizationPlugin>
                <map>
                    <authorizationMap>
                        <authorizationEntries>
                            <authorizationEntry topic="<span id="searchword">mcollective</span>.>" write="systemusers" read="systemusers" admin="systemusers" />
                            <authorizationEntry topic="ActiveMQ.Advisory.>" read="everyone,all" write="everyone,all" admin="everyone,all"/>
                        </authorizationEntries>
                    </authorizationMap>
                </map>
            </authorizationPlugin>
 
            <simpleAuthenticationPlugin>
                <users>
                    <authenticationUser username="mcollective" password="XXXXXXXXXXXXXXXX" groups="systemusers,everyone"/>
                </users>
            </simpleAuthenticationPlugin>
        </plugins>
 
        <transportConnectors>
            <transportConnector name="openwire" uri="tcp://0.0.0.0:6166" />
            <transportConnector name="stomp"   uri="stomp://0.0.0.0:6163" />
        </transportConnectors>
    </broker>
</beans>

サービススタート

sudo /etc/init.d/activemq start

起動したかどうか、/var/log/activemq/activemq.logあたり見るとよいかと思います。
これで試す準備ができました。

動作確認

ひとまず動作確認ということで、mcollectiveがインストールされてホストをリストしてみます。

mc-find-hosts
test01.tnmt.local
test02.tnmt.local

続いて全台にping打ってみる

mc-ping
test01.tnmt.local                        time=63.35 ms
test02.tnmt.local                        time=101.06 ms

---- ping statistics ----
2 replies max: 101.06 min: 63.35 avg: 82.21

返ってきますね。対象のホストの状況を確認してみる。

mc-inventory test01.tnmt.local
Inventory for test01.tnmt.local:

   Server Statistics:
                      Version: 1.0.0
                   Start Time: Sat Feb 26 13:38:54 +0900 2011
                  Config File: /etc/mcollective/server.cfg
                   Process ID: 24564
               Total Messages: 3
      Messages Passed Filters: 3
            Messages Filtered: 0
                 Replies Sent: 2
         Total Processor Time: 0.06 seconds
                  System Time: 0.19 seconds

   Agents:
      discovery       rpcutil

   Configuration Management Classes:
      base                           test01.tnmt.local


   Facts:
      mcollective => 1

インストールは完了したので、もう少し色々と触ってみます。

  • プラグイン機構で行えるオペレーション追加
  • puppetのfacterを共有して特定条件ホストでのオペレーション

等々