よかろうもん!

アプリからインフラまで幅広くこなすいまどきのクラウドエンジニアが記す技術ブログ

大規模システム運用でpuppetやchefだけでは解決しづらいことを解決するMCollective!

もはや説明は不要かもしれませんが、"puppet"は、Puppet Labsが開発しているシステム運用管理ツールで、puppet管理下にあるサーバ群のシステムの状態を"あるべき状態"に保つための補助ツールです。
chefもpuppetと同等の機能を持ち、システムの運用管理をするには大変便利ではありますが、管理するサーバ台数が増加してくると、chef/puppetだけでは解決しづらいことも発生し始めます。

例えば、数百台のサーバの運用管理をしていたら、その中の一部だけサーバの状態が不安定になり、daemonが停止してしまったり、予期せぬレスポンスを返してしまったりする事態に遭遇することが稀にあります。
他にも、特定のロケールに配置してあるサーバでのみ、何かしらの処理を1度だけ実行しなければならないと事態も発生しがちです。

そのような場合は、puppetを利用して状況確認や処理の実行をすることはベストではない(※1)ために、SSHで全サーバのにログインして、不安定なサーバを特定したり処理を実行するのが一般的かと思いますが(script化して自動化する場合もあります)、できればこの作業がさらに効率的に実現できるような仕組みがあれば、システム運用管理者は幸せです。
※1 状況確認にレシピを書いて、スクリプトを再配置して実行するのは効率が悪い

これを実現するのが、MCollectiveです。
一言で言うと、"定例作業を効率的に行うのがpuppet/chefの役割"で、"MCollectiveは非定例作業を効率的に行う"ことのできるツールです。
#活用の仕方次第では上記で述べている以外の役割があるのかもしれません。

詳細は以下の動画で解説してありますので、まずは見てください。
Introducing MCollective
Publish Subscribe風の仕組みで、処理リクエストが条件にマッチしたサーバ伝えられ、実行結果がまとめられて返ってくる仕組みで実現されているようです。
中でも注目すべきは、Filteringの機能でシステムの情報を取得可能なgemであるfacterとpuppetの機能をうまく活用することで、管理しているサーバのシステム内部情報を取得し、それをキーにして特定の処理を実行させるかどうかの条件を指定することができます。
例えば、"architectureがi386のサーバでのみ○○を実行する"というような処理を簡単に行えるようになります。

もし実際に試してみたいという場合は、Amazon EC2でAMIも準備されているので、こちらを利用するとよいかと思います。
http://www.puppetlabs.com/mcollective/ec2demo/

AMI ID Description
ami-21c8e355 Server and Node for MCollective 0.4.2

今後は、クラウド環境の活用&運用自動化の仕組みの導入が進むにつれ、多くのサーバを管理できるような仕組みおよび能力が求められる時代が到来するかと思いますので、今のうちからMCollectiveのような仕組みについて学んでおくとよいかと思います。

chefやpuppet単体での活用から、Puppet + MCollectiveのような、より大規模システム(cluster)の運用を楽にするような仕組みが注目されることでしょう。