続・MCollectiveのインストールと動作確認
ずっと前に一度書いた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
- mcollective用の設定
- とりあえず動作させるのにドキュメントにある"single-broker example config"をいじって作る
--- /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 agent
とmco
によるオペレーション
がいいとこどりで良さそうかなと。
複数サービスがある場合でも一箇所による集中管理が出来そうだし(ActiveMQ周りでの権限管理も結構細かく制御出来そう)、サービスごとにセットたてても良いと思います。
MCollectiveって何よって試してみたけど、インストール後の使い道がいまいちピンときてない。とりあえず分かったところからまとめてこう。
— TSUNEMATSU Shinya (@tnmt) January 27, 2011
MCollectiveとの比較の為にいまさらながらFuncも触ってみているけどこちらの方がなんか手になじむ感じがする。なんとなく。
— TSUNEMATSU Shinya (@tnmt) April 2, 2011
て書いてたけどMCollectiveやっぱり便利そうだよ>昔の自分