Makuosan

出典: KLablabWiki

目次

概要

MAKUOSAN
(Multicasts All-Kinds of Updating Operation for Servers on Administered Network)

makuosan(まくおさん:通称「まくお」)は、複数のサーバへ同時にファイルを転送するソフトウエアです。

以下のような特徴があります。

サーバが増えても転送時間が変わらない
サーバが増えても、転送にかかる時間はほとんどかわりません。10台のサーバに転送しても、20台のサーバに転送しても、ほとんど同じ時間で完了します。ただし、転送時間は一番応答が遅いサーバの性能に引っ張られるので、同程度のスペックのサーバで構築された環境で利用することが望ましいです。
すべてのサーバで同時にファイルが更新される
マルチキャストを使って全サーバへ同時にファイルを転送するため、「このサーバのファイルは更新されてるけど、あのサーバのファイルはまだ更新されていない」といったことがありません。
面倒な設定は不要
「まくお」のメインプログラムは、全サーバにデーモンとして常駐させておきます。それぞれのサーバに常駐している「まくお」は、互いの存在を確認しあうことで、自動的にネットワーク上のサーバ構成を把握します。したがって、サーバを増設もしくは撤去する際においても、既設サーバの設定を変更する必要はありません。

更新履歴

ダウンロード

インストール

$ tar zxvf makuosan-1.2.1.tar.gz
$ cd makuosan-1.2.1
$ ./configure
$ make
$ su
# make install

インストールされるファイルは以下の二つです。

/usr/local/sbin/makuosan
「まくお」の本体です。サーバに常駐させます。
/usr/local/bin/msync
「まくお」のコマンドラインツールです。ファイルを転送したいときに使います。

使い方

まくおでファイルを転送するには、転送元のサーバと転送先のサーバでmakuosanを起動しておく必要があります。


起動と停止

makuosanを起動する際は、-bオプションでファイル転送の起点となる「ベースディレクトリ」を指定します。

host1:~$ makuosan -b /home/hoge/public_html/
host2:~$ makuosan -b /home/hoge/public_html/
host3:~$ makuosan -b /home/hoge/public_html/

makuosanのログは、ファシリティLOG_DAEMONでsyslogへ出力されます。

makuosanを停止するには、killコマンドなどでSIGTERMを送ります。

host1:~$ pkill makuosan

ちょっとした動作確認であれば、-n オプション(don't fork)を使うと便利です。

~$ makuosan -n -b /home/hoge/public_html/
makuosan version 1.2.1
loglevel  : 0
base dir  : /home/hoge/public_html/
multicast : 224.0.0.108
port      : 5000
uid       : 1000
gid       : 1000
parallel  : 3
don't recv: No
don't send: No
don't fork: Yes
encrypt   : No
console   : Yes
passwoed  : No
ownermatch: No
listen    : 127.0.0.1


ファイル転送

ファイルの転送には msync コマンドを使います。host1で以下のコマンドを実行すると、 host1:/home/hoge/public_html/以下のファイルがhost2とhost3に転送されます。

host1:~$ msync -r

以下のようにファイルやディレクトリを指定して転送することもできます。

host1:~$ msync -r images

この例の場合、host1:/home/hoge/public_html/images/以下のファイルが転送されます。

まくおでは、転送するファイルやディレクトリは ベースディレクトリからの相対パスで指定します。

カレントディレクトリからの相対パスではありませんのでくれぐれもご注意下さい。


ステータス確認

msyncコマンドでは、以下のオプションでmakuosanの状態を確認することができます。

--membersオプション
転送先となるサーバの一覧を表示します
--statusオプション
ベースディレクトリやバージョン情報などを表示します
host1:~$ msync --members
w102 192.168.1.2 (Ver1.2.1)
w103 192.168.1.3 (Ver1.2.1)
w107 192.168.1.7 (Ver1.2.1)
w108 192.168.1.8 (Ver1.2.1)
w109 192.168.1.9 (Ver1.2.1)
Total: 5 members

host1:~$ msync --status
process: 24564
version: 1.2.1
basedir: /home/hoge/public_html/
mfalloc: 8
command: 0
send op: 0
recv op: 0


makuosanとmsyncの関係

ファイル転送などの他のサーバと通信する処理はmakuosanがすべて担っています。

  • msyncはmakuosanに対して転送依頼を発行するだけです
  • msyncはmakuosanに対してソケット通信をし、転送依頼をしたりステータスを確認したりできます
  • makuosanはデフォルトで tcp:127.0.0.1:5000 で接続を待っています
  • msyncはデフォルトで tcp:127.0.0.1:5000 へ接続しようとします


makuosanの受け口指定

makuosanの受け口は、コマンドラインオプションで変更できます。

-p <ポート番号>
  ポート番号を指定する(default: 5000)
-l <IPアドレス>
  待ち受けアドレスを指定する(default: 127.0.0.1)
-U <PATH>
  UNIXドメインソケットを指定する

※ -Uオプションを指定した場合、TCP接続はできなくなります


msyncの接続先指定

mysncは -c オプションで接続先を指定します。

host1:~$ makuosan -b /home/hoge/public_html/ -U /tmp/makuosan.sock
host1:~$ msync -c unix:/tmp/makuosan.sock --status
version  : 1.2.1
basedir  : /home/hoge/public_html/
send file: 0
recv file: 0

環境変数MSYNC_TARGETで接続先を指定することもできます。

host1:~$ makuosan -b /home/hoge/public_html/ -U /tmp/makuosan.sock
host1:~$ MSYNC_TARGET=unix:/tmp/makuosan.sock
host1:~$ msync --status
version  : 1.2.1
basedir  : /home/hoge/public_html/
send file: 0
recv file: 0

今後の課題

  • 転送先のファイルを消せない(rsync --delete相当の機能がない)
  • SysVinit向けの、起動/停止スクリプトを作っていない
  • マニュアルが不十分(><)
  • 輻輳制御って必要かなあ(^^;
  • ファイルの転送効率をもっと上げられるはず

これらは、今後のバージョンアップで随時対応していく予定です。

作者

  • YASUI Masanobu


連絡先

  • info-makuosan <at> klab.jp


リンク

■このサイトについて

このサイトはKLab株式会社が開発したソフトウェアやノウハウ、実験的なサービスを公開していきます。

 RSS Feed

■メニュー