Serf/Consulで管理を自動化! ~実践的な手法を紹介~

第1回 Serf入門:動的に変化する環境を簡単に管理

この記事を読むのに必要な時間:およそ 3 分

Serfとは?

Serfは,HashiCorp社がオープンソースとして開発・公開しているクラスタ管理用のツールです。軽量なエージェントを起動するだけで手軽にクラスタを構成でき,複数台のサーバにまたがる作業の自動化に役立ちます。2013年後半から開発がスタートし,現在もGitHubやIRC上で開発が行われています。

登場背景と利用シーン

クラウドコンピューティングを使ったシステムの普及と,継続的な開発・運用スタイルの普及により,インフラ環境が増えたり減ったりするシーンが増えつつあります。クラウドを活用し,OSの領域までは短時間で準備できるようになりました。ミドルウェアやアプリケーションの設定も,ChefやAnsible等の構成管理ツールを使う手法が広まり,作業時間の短縮や正確性の向上が実現しています。

このようにインフラ部分が動的に変わることが当たり前になりつつある一方,運用視点で新しい課題が出てきます。例えば,増減したサーバーのホスト名・IPアドレスを監視設定に適用したり,複数台のサーバ上で一斉にコマンドを実行したりする必要性が出てきました。

PSSHであれば複数台のサーバに同時ログインするための仕組みがありました。しかし,そこには何らかのホスト情報一覧を管理するリストやログインの起点となるサーバが必要となります。また,障害発生をトリガとしてミドルウェアの設定変更を行いたい場合も,何らかの監視システムのエージェントを入れる必要があり,システムが複雑になりがちです。

これらの問題を解決するためにSerfが役立ちます。Serfであれば,管理用のサーバを準備しなくても,お互いが通信してクラスタを構成できます。Serfの機能を使えば,任意のコマンドをクラスタに所属するサーバで一斉に実行するだけでなく,サーバの追加や削除のタイミングでもコマンドを自動的に実行できます。

図1 一般的な運用とSerfの比較

図1 一般的な運用とSerfの比較

任意のコマンドを実行できることから,次のような利用方法があります。

  • ChefやAnsible等の構成管理ツールを一斉実行するタイミングの自動化
  • 特定のサーバのプロセスを,リモートから一斉に再起動
  • 障害発生を検出時,ロードバランサーの設定から自動削除,復旧時は自動回復
  • NagiosやSensu,Munin等の監視対象の追加・削除の自動化

Serfの3つの主な機能

Serfは複数台のサーバを管理するために,メンバー管理,障害検出,イベント共有機能を提供しています。これらの機能はコマンドプロンプト上での操作だけでなく,Message Pack RPCを通しても操作することができます。

メンバー管理

クラスタを構成する各サーバの死活や,メンバー(serfエージェントが稼働するサーバ)のホスト名,IPアドレス,タグを管理

障害検出

メンバーとの通信途絶時は障害情報を共有し,定期的に復帰を確認して疎通が回復できれば,クラスタへ自動復旧

イベント

メンバー管理や障害検出だけでなく,任意のタイミングで発生するイベントをクラスタ全体で瞬時に共有(100サーバでは約2秒で伝播)

このようなクラスタを構成できるのは,Serfが内部的にGossipプロトコルを拡張したSWIM方式を拡張したプロトコルを採用しているためです。次の図はクラスタで障害発生したイベントが伝わる様子です。複数台のサーバ上で,Serfエージェントが独自のクラスタを形成します。一定の間隔でエージェントが相互に通信し,お互いの監視を行っています。サーバCがサーバDの障害を検出すると,その情報は直ちに残りのサーバにも送られます。

図2 クラスタ構成とイベント

図2 クラスタ構成とイベント

Serfの他にもクラスタを形成するツールがありますが,構成や運用上の管理が複雑になりがちです。Serfであれは,1つのバイナリファイルをサーバに置くだけでセットアップが完了します。クラスタ構成のためにミドルウェアやライブラリをセットアップする必要もありません。ファイルをサーバに置く以外,今のシステムに変更を加えることなく,すぐに使える手軽さも大きな特徴です。

クラスタを形成する方法も簡単です。サーバ上でSerfエージェントを起動し,複数のサーバ上のエージェントが通信する設定を行うだけです。サーバの管理や操作を手軽にまとめることが目的であれば,Serfの導入のしやすさは注目です。

また,特集後半では同じくHashiCorpが提供するConsulを紹介します。Consulは,Serfが持っていないサービスレベルに対するメンバー管理・監視や,システム全体の可用性を高める仕組みが導入されています。その代わり,Serfよりも構成や管理が少し複雑になってしまいます。

著者プロフィール

前佛雅人(ぜんぶつまさひと)

クリエーションライン株式会社 Technology Evangelist

ホスティングサービスで運用保守サポートに携わった後,現職へ。サポート業務や新技術検証・開発業務を行う。趣味で監視や自動化に関するOSS検証や翻訳を行うのが好き。辛口の日本酒が大好き。

Twitter:@zembutsu

コメント

コメントの記入