/**************************************************************************/
/*                                                                        */
/* MAKUOSAN README.ja                                                     */
/* Multicasts All-Kinds of Updating Operation                             */
/*                                    for Servers on Administered Network */
/*                                                                        */
/*                                           Copyright (C) 2008 KLab Inc. */
/**************************************************************************/

【makuosanとは】
 makuosan(まくおさん:通称「まくお」)は、複数のサーバへ同時にファイルを転
送するソフトウエアです。以下のような特徴があります。

・転送にかかる時間がサーバ台数に依存しない
 サーバが増えても、転送にかかる時間はほとんどかわりません。10台のサーバに転
 送しても、20台のサーバに転送しても、ほとんど同じ時間で完了します。ただし、
 転送時間は一番応答が遅いサーバの性能に引っ張られるので、同程度のスペックの
 サーバで構築された環境で利用することが望ましいです。

・すべてのサーバのファイルを同時に更新
 マルチキャストでファイルを転送するので、すべてのサーバのファイルが一斉に更
 新されます。そのため、「このサーバのファイルは更新されているけど、あのサー
 バのファイルはまだ更新されていない」といったことがありません。

・面倒な設定は不要
 「まくお」のメインプログラムは、全サーバにデーモンとして常駐させておきます。
 それぞれのサーバに常駐している「まくお」は、互いの存在を確認しあうことで、
 自動的にネットワーク上のサーバ構成を把握します。したがって、サーバ増設や撤
 去の際でも、既設サーバの設定を変更する必要はありません。


【インストール方法】
  $ tar zxvf makuosan-x.x.x.tar.gz
  $ cd makuosan-x.x.x
  $ ./configure
  $ make
  $ su -
  # make install


【ファイル構成】
 以下のファイルがインストールされます。

  /usr/local/sbin/makuosan # まくおさん本体
  /usr/local/bin/msync     # コマンドラインツール


【起動と停止】
 まくおを利用するには、送信元と送信先のサーバすべてでmakuosanを起動しておく
必要があります。また、起動時には -b オプションでベースディレクトリを指定しま
す。転送するファイルは、msyncでベースディレクトリからの相対パスを指定します。
 
   # makuosan -b /var/www -u www-data -g www-data

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

   # pkill makuosan


【使用方法】
 ファイル転送は、makuosanが動いているサーバ上でmsyncコマンドを実行します。

  例1)ベースディレクトリ以下のディレクトリツリーを全部転送する
   $ msync -r

 例2)転送されるファイルを確認する(dry run)
   $ msync -rn

  例3)ベースディレクトリ直下のindex.htmlを転送する(/var/www/index.html)
   $ msync index.html

msyncで指定するファイルやディレクトリは、makuosan起動時に指定したベースディ
レクトリからの相対パスです。カレントディレクトリは一切関知しませんのでご注
意ください。ベースディレクトリは以下のコマンドで確認することができます。

   $ msync --status

また、転送先サーバの一覧は以下のコマンドで取得できます

   $ msync --members


【利用するメリット】
rsyncやscpなどの、1対1のファイル転送ツールでは、必ず転送先を指定しますが、
「まくお」では、コマンドラインから転送先を指定する必要がありません。

rsyncやscpで複数のサーバに対してファイルを転送したい場合、以下のようにサー
バの数だけ実行する必要があります。

 $ for h in host2 host3 host4 host5 host6;do rsync -aRv hogehoge $h:/;done

 「まくお」では、makuosanが起動しているサーバ同士でファイルの転送をします。
そのため、転送したいファイルやディレクトリを一度指定するだけで済みます。

 $ msync -r hogehoge

このコマンドひとつで「まくお」が稼働している全てのサーバに hogehogeを転送す
ることができます。

また「指定したサーバにだけ転送したい」というニーズのために、特定のサーバにだ
け転送するオプション(-t)も用意しています。この場合も、送信元と送信先のサーバ
でmakuosanが動いている必要があります。

 $ msync -t host3 -r hogehoge/


【簡単な使用例】

 == ネットワーク構成 ==
 host1のファイルを host2, host3, host4に転送します。

                  +-------+
                  | host2 |
                  +-------+
                      |
  +-------+     +-----------+     +-------+
  | host1 |-----| L2 SWITCH |-----| host3 |
  +-------+     +-----------+     +-------+
                      |
                  +-------+
                  | host4 |
                  +-------+


 == makuosanを起動する ==

 host1:~# makuosan -b /var/www -u www-data -g www-data
 host2:~# makuosan -b /var/www -u www-data -g www-data
 host3:~# makuosan -b /var/www -u www-data -g www-data
 host4:~# makuosan -b /var/www -u www-data -g www-data

 == 転送するファイルを作る ==
 host1の /var/www/ 以下にファイルを作ります。

 host1:~# cd /var/www/
 host1:/var/www# echo hoge > hoge.html
 host1:/var/www# echo fuga > fuga.html
 host1:/var/www# chown www-data:www-data hoge.html fuga.html
 host1:/var/www# ls -la
 total 16
 drwxr-xr-x  3 root     root      176 Oct 10 10:31 .
 drwxr-xr-x 15 root     root      360 Oct  9 04:52 ..
 -rw-r--r--  1 www-data www-data    5 Oct 10 10:31 fuga.html
 -rw-r--r--  1 www-data www-data    5 Oct 10 10:31 hoge.html

 他のホストにはファイルはありません。

 host2:/var/www# ls -la
 total 16
 drwxr-xr-x  3 root     root      176 Oct 10 10:31 .
 drwxr-xr-x 15 root     root      360 Oct  9 04:52 ..

 host3:/var/www# ls -la
 total 16
 drwxr-xr-x  3 root     root      176 Oct 10 10:31 .
 drwxr-xr-x 15 root     root      360 Oct  9 04:52 ..

 host4:/var/www# ls -la
 total 16
 drwxr-xr-x  3 root     root      176 Oct 10 10:31 .
 drwxr-xr-x 15 root     root      360 Oct  9 04:52 ..


 == ファイルを転送する ==

 host1:~$ msync -r


 == 転送されたファイルを確認 ==

 host2:/var/www# ls -la
 total 16
 drwxr-xr-x  3 root     root      176 Oct 10 10:31 .
 drwxr-xr-x 15 root     root      360 Oct  9 04:52 ..
 -rw-r--r--  1 www-data www-data    5 Oct 10 10:31 fuga.html
 -rw-r--r--  1 www-data www-data    5 Oct 10 10:31 hoge.html
 
 host3:/var/www# ls -la
 total 16
 drwxr-xr-x  3 root     root      176 Oct 10 10:31 .
 drwxr-xr-x 15 root     root      360 Oct  9 04:52 ..
 -rw-r--r--  1 www-data www-data    5 Oct 10 10:31 fuga.html
 -rw-r--r--  1 www-data www-data    5 Oct 10 10:31 hoge.html

 host4:/var/www# ls -la
 total 16
 drwxr-xr-x  3 root     root      176 Oct 10 10:31 .
 drwxr-xr-x 15 root     root      360 Oct  9 04:52 ..
 -rw-r--r--  1 www-data www-data    5 Oct 10 10:31 fuga.html
 -rw-r--r--  1 www-data www-data    5 Oct 10 10:31 hoge.html