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

mcollective 2013-10-11

ずっと前に一度書いたMCollective、#devopsdaysで出てて、チラホラとブクマがついたりしてたのですが、いかんせん情報が古いし、インストールしてただけだしなので再度まとめてみます。

あとOrchestration的なものでいうと、自分の周りの今の状況は

  • Aサービスは管理サーバ全台でのコマンド実行兼デプロイツールを自作している
  • Bサービスはpssh使ってちょっと楽になった
  • Cサービスは未だにsshでログインして頑張ってる

みたいに結構バラバラで、じゃあCapistranoとかに一個決めてゴリゴリ頑張るかーというと何かちょっとそういう時代は一旦過ぎてダルくて、もう少しオペレーションフレンドリでいい感じのが無いかを模索していたところ、ちょっと見えてきた感があるのでそれも兼ねて。

特徴とかは以前のエントリに書いたから割愛。

テスト用の構成は

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

いずれも CentOS 6.4 64bit です

共通 @ manage01, test01, test02

puppetlabsからリポジトリが提供されています

sudo rpm -ivh http://yum.puppetlabs.com/el/6/products/x86_64/puppetlabs-release-6-7.noarch.rpm

mcollective @ test001, test002

インストール

sudo yum install mcollective

設定

/etc/mcollective/server.cfg

  • plugin.stomp.host に activemq が動いてるサーバー
  • パスワードはあとでactivemqの設定にも関わる
--- /etc/mcollective/server.cfg.dist    2013-10-11 00:11:23.460791785 -0400
+++ /etc/mcollective/server.cfg 2013-10-11 00:12:03.895789609 -0400
@@ -11,10 +11,10 @@
 plugin.psk = unset

 connector = stomp
-plugin.stomp.host = localhost
+plugin.stomp.host = manage01.tnmt.local
 plugin.stomp.port = 61613
 plugin.stomp.user = mcollective
-plugin.stomp.password = secret
+plugin.stomp.password = XXXXXXXXXXXXXXXX

 # Facts
 factsource = yaml

サービススタート

sudo chkconfig mcollective on
sudo service mcollective start

mcollective-client @ manage01

インストール

sudo yum install mcollective-client

設定

/etc/mcollective/client.cfg

  • test01, test02のmcollectiveの設定と同様
--- /etc/mcollective/client.cfg.dist    2013-10-11 13:19:42.433764937 +0900
+++ /etc/mcollective/client.cfg 2013-10-11 14:10:07.740602159 +0900
@@ -10,10 +10,10 @@
 plugin.psk = unset

 connector = stomp
-plugin.stomp.host = localhost
+plugin.stomp.host = manage02.tnmt.local
 plugin.stomp.port = 61613
 plugin.stomp.user = mcollective
-plugin.stomp.password = secret
+plugin.stomp.password = XXXXXXXXXXXXXXXX

 # Facts
 factsource = yaml

activemq @ manage01

インストール

sudo yum install activemq activemq-info-provide

設定

/etc/activemq/active.xml

--- /etc/activemq/activemq.xml.dist  2013-10-11 00:30:03.212731536 -0400
+++ /etc/activemq/activemq.xml       2013-10-11 00:30:20.720730594 -0400
@@ -56,7 +56,7 @@
           -->
           <simpleAuthenticationPlugin>
             <users>
-              <authenticationUser username="mcollective" password="marionette" groups="mcollective,everyone"/>
+              <authenticationUser username="mcollective" password="XXXXXXXXXXXXXXXX" groups="mcollective,everyone"/>
               <authenticationUser username="admin" password="secret" groups="mcollective,admins,everyone"/>
             </users>
           </simpleAuthenticationPlugin>

サービススタート

sudo chkconfig activemq on
sudo service activemq start

動作確認

mco ping

mco ping
test01                                   time=140.58 ms
test02                                   time=151.34 ms


---- ping statistics ----
2 replies max: 151.34 min: 140.58 avg: 145.96

mco inventory

mco inventory test01
Inventory for test01:

   Server Statistics:
                      Version: 2.2.4
                   Start Time: Fri Oct 11 13:55:03 +0900 2013
                  Config File: /etc/mcollective/server.cfg
                  Collectives: mcollective
              Main Collective: mcollective
                   Process ID: 15492
               Total Messages: 191
      Messages Passed Filters: 9
            Messages Filtered: 2
             Expired Messages: 0
                 Replies Sent: 8
         Total Processor Time: 17.76 seconds
                  System Time: 9.03 seconds

   Agents:
      discovery       rpcutil

   Data Plugins:
      agent           fstat

   Configuration Management Classes:
      No classes applied

   Facts:
      mcollective => 1

mco rpc

Using MCollective Command Line Applicationsにある通りですが、RPCにてAgentに任意のオペレーションを実行することが出来ます。またこれらのAgent、オペレーションはプラグイン機構にて拡張が可能です。

service

test01, test02 でエージェントをインストール

sudo yum install mcollective-service-agent
sudo service mcollective restart 

manage01 でクライアントをインストール

クライアントをインストール

sudo yum install mcollective-service-client

pluginに追加される

mco plugin doc
Please specify a plugin. Available plugins are:

Agents:
  rpcutil                   General helpful actions that expose stats and internals to SimpleRPC clients
  service                   Start and stop system services

rpcにてオペレーションが行える。例えば全Agentでntpdの再起動をしたり。

mco rpc service restart service=ntpd
Discovering hosts using the mc method for 2 second(s) .... 2

 * [ ============================================================> ] 2 / 2



Summary of Service Status:

   running = 2


Finished processing 2 / 2 hosts in 976.89 ms

package

test01, test02 でエージェントをインストール

sudo yum install mcollective-package-agent
sudo service mcollective restart 

manage01 でクライアントをインストール

sudo yum install mcollective-package-client

pluginに追加される

mco plugin doc
Please specify a plugin. Available plugins are:

Agents:
  package                   Install and uninstall software packages
  rpcutil                   General helpful actions that expose stats and internals to SimpleRPC clients
  service                   Start and stop system services

rpcにてオペレーションが行える。mcollectiveパッケージの状況について

mco rpc package status package=mcollective
Discovering hosts using the mc method for 2 second(s) .... 2

 * [ ============================================================> ] 2 / 2


test02
          Arch: noarch
   description: Application Server for hosting Ruby code on any capable middleware
        Ensure: 2.2.4-1.el6
         Epoch: 0
          Name: 'mcollective
        Output: nil
      Provider: :yum
       Release: 1.el6
       Version: 2.2.4

test01
          Arch: noarch
   description: Application Server for hosting Ruby code on any capable middleware
        Ensure: 2.2.4-1.el6
         Epoch: 0
          Name: 'mcollective
        Output: nil
      Provider: :yum
       Release: 1.el6
       Version: 2.2.4


Summary of Arch:

   noarch = 2

Summary of Ensure:

   2.2.4-1.el6 = 2


Finished processing 2 / 2 hosts in 1863.58 ms

ドキュメントでは

mco rpc package status package=mcollective -j| jgrep "data.properties.ensure=2.0.0-6.el6" | mco rpc puppetd runonce

と特定バージョンのmcollectiveがインストールされているAgentに対してpuppetを一度実行するというワンライナーがありました。JSON形式で結果取得とかも出来るんですね。jgrepでパース。

Selecting Request Targets Using Filters

mcoコマンド単体だと全Agentが対象になりますが、--with-agent, --with-factで対象の絞り込みが出来ます。

FilteringとPuppetとの連携

これはPuppetを利用していてMaster,Agent型を取っているとさらに便利な機構なんですが、Agentで適用されているClassでのフィルタリングも--with-classで指定出来ます。

Master,Agent型を取っているのはもう少し細かく言うと

  • puppet agent 時にデフォルトで /var/lib/puppet/state/classes.txt に適用されたクラス一覧が記録される
  • mcollective が該当ファイルを読み込む

ことで協調して動くという具合です。

mco inventory test01
Inventory for test01:

   Server Statistics:
                      Version: 2.2.4
                   Start Time: Fri Oct 11 00:47:50 +0900 2013
                  Config File: /etc/mcollective/server.cfg
                  Collectives: mcollective
              Main Collective: mcollective
                   Process ID: 13349
               Total Messages: 31
      Messages Passed Filters: 31
            Messages Filtered: 0
             Expired Messages: 0
                 Replies Sent: 30
         Total Processor Time: 0.32 seconds
                  System Time: 0.11 seconds

   Agents:
      discovery       package         puppet
      rpcutil         service

   Data Plugins:
      agent           fstat           puppet
      resource        service

   Configuration Management Classes:
      app                            app::deploy
      app::package                   app::unicorn
      base                           base::file
      base::iptables                 base::munin
      base::nrpe                     base::package
      base::perl                     base::puppet
      base::service                  base::ssh
      base::users_and_groups         monit
      monit::config                  monit::install
      monit::service                 munin::node
      munin::node::config            munin::node::install
      munin::node::service           newrelic
      newrelic::config               newrelic::install
      newrelic::service              newrelic::yumrepository
      openssh-server                 openssh-server::config
      openssh-server::install        openssh-server::service
      puppet::config                 puppet::install
      puppet::service                puppet::yumrepo
      rbenv                          rbenv::config
      rbenv::install                 settings
      tcp_wrapper                    tcp_wrapper::config

   Facts:
         mcollective => 1

unicoronが動くように構築してたサーバ全台でnginxをリスタートしたいぜーといった場合に

mco rpc --with-class app::unicorn service restart service=nginx

などなど

その他

Puppetでも puppet apply でマスターレスな運用が流行ってきている今日このごろですが、puppet apply は classfile を書き出さないので連携が出来ないというのが現状のようで。
こはいくつか議論があるようです

私見としては

  • ローカル環境ややCI環境ではpuppet applyによる単独実行
  • プロダクション環境ではpuppet agentmcoによるオペレーション

がいいとこどりで良さそうかなと。

複数サービスがある場合でも一箇所による集中管理が出来そうだし(ActiveMQ周りでの権限管理も結構細かく制御出来そう)、サービスごとにセットたてても良いと思います。

て書いてたけどMCollectiveやっぱり便利そうだよ>昔の自分

Tags

Shinya Tsunematsu

a Software Engineer loves 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.