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

mcollective 2月 26, 2011

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を共有して特定条件ホストでのオペレーション

等々

Shinya Tsunematsu

Software Engineer, love tech, curry, music, fitness.

Great! You've successfully subscribed.
Great! Next, complete checkout for full access.
Welcome back! You've successfully signed in.
Success! Your account is fully activated, you now have access to all content.