1 | 1 |
deleted file mode 100644 |
... | ... |
@@ -1,80 +0,0 @@ |
1 |
-[install] |
|
2 |
-$ tar zxvf makuosan-0.9.0beta.tar.gz |
|
3 |
-$ make |
|
4 |
-$ make install |
|
5 |
- |
|
6 |
- |
|
7 |
-[TEST] |
|
8 |
- |
|
9 |
- |
|
10 |
-host1:~# makuosan -u www-data -g www-data -b /var/www |
|
11 |
-host2:~# makuosan -u www-data -g www-data -b /var/www |
|
12 |
-host3:~# makuosan -u www-data -g www-data -b /var/www |
|
13 |
-host4:~# makuosan -u www-data -g www-data -b /var/www |
|
14 |
- . |
|
15 |
- . |
|
16 |
- . |
|
17 |
- |
|
18 |
- |
|
19 |
-【準備】 |
|
20 |
-host1の /var/www/ 以下にファイルを作ります。 |
|
21 |
- |
|
22 |
-host1:~# cd /var/www/ |
|
23 |
-host1:/var/www# echo hoge > hoge.html |
|
24 |
-host1:/var/www# echo fuga > fuga.html |
|
25 |
-host1:/var/www# chown www-data:www-data hoge.html fuga.html |
|
26 |
-host1:/var/www# ls -la |
|
27 |
-total 16 |
|
28 |
-drwxr-xr-x 3 root root 176 Oct 10 10:31 . |
|
29 |
-drwxr-xr-x 15 root root 360 Oct 9 04:52 .. |
|
30 |
--rw-r--r-- 1 www-data www-data 5 Oct 10 10:31 fuga.html |
|
31 |
--rw-r--r-- 1 www-data www-data 5 Oct 10 10:31 hoge.html |
|
32 |
- |
|
33 |
-他のホストにはファイルはありません。 |
|
34 |
-host2:/var/www# ls -la |
|
35 |
-total 16 |
|
36 |
-drwxr-xr-x 3 root root 176 Oct 10 10:31 . |
|
37 |
-drwxr-xr-x 15 root root 360 Oct 9 04:52 .. |
|
38 |
- |
|
39 |
-host3:/var/www# ls -la |
|
40 |
-total 16 |
|
41 |
-drwxr-xr-x 3 root root 176 Oct 10 10:31 . |
|
42 |
-drwxr-xr-x 15 root root 360 Oct 9 04:52 .. |
|
43 |
- |
|
44 |
-host4:/var/www# ls -la |
|
45 |
-total 16 |
|
46 |
-drwxr-xr-x 3 root root 176 Oct 10 10:31 . |
|
47 |
-drwxr-xr-x 15 root root 360 Oct 9 04:52 .. |
|
48 |
- |
|
49 |
-【同期】 |
|
50 |
-host1:~$ makuo tcp:127.0.0.1:5000 send -r |
|
51 |
- |
|
52 |
-または |
|
53 |
- |
|
54 |
-host1:~$ telnet 127.0.0.1 5000 |
|
55 |
-> send -r |
|
56 |
-> quit |
|
57 |
- |
|
58 |
-【確認】 |
|
59 |
-host2:/var/www# ls -la |
|
60 |
-total 16 |
|
61 |
-drwxr-xr-x 3 root root 176 Oct 10 10:31 . |
|
62 |
-drwxr-xr-x 15 root root 360 Oct 9 04:52 .. |
|
63 |
--rw-r--r-- 1 www-data www-data 5 Oct 10 10:31 fuga.html |
|
64 |
--rw-r--r-- 1 www-data www-data 5 Oct 10 10:31 hoge.html |
|
65 |
- |
|
66 |
-host3:/var/www# ls -la |
|
67 |
-total 16 |
|
68 |
-drwxr-xr-x 3 root root 176 Oct 10 10:31 . |
|
69 |
-drwxr-xr-x 15 root root 360 Oct 9 04:52 .. |
|
70 |
--rw-r--r-- 1 www-data www-data 5 Oct 10 10:31 fuga.html |
|
71 |
--rw-r--r-- 1 www-data www-data 5 Oct 10 10:31 hoge.html |
|
72 |
- |
|
73 |
-host4:/var/www# ls -la |
|
74 |
-total 16 |
|
75 |
-drwxr-xr-x 3 root root 176 Oct 10 10:31 . |
|
76 |
-drwxr-xr-x 15 root root 360 Oct 9 04:52 .. |
|
77 |
--rw-r--r-- 1 www-data www-data 5 Oct 10 10:31 fuga.html |
|
78 |
--rw-r--r-- 1 www-data www-data 5 Oct 10 10:31 hoge.html |
|
79 |
- |
|
80 |
- |
... | ... |
@@ -1,185 +1,177 @@ |
1 |
-【はじめに】 |
|
2 |
- Webサーバを負荷分散環境で運用していると、大量のファイルを複数台のサーバへ、 |
|
3 |
-できるだけ速く転送する必要がでてきます。以下のスクリプトのように、rsyncを使っ |
|
4 |
-て1台づつ順番に転送するのは簡単で確実ですが、これではサーバ台数に比例して転送 |
|
5 |
-にかかる時間が増えていってしまいます。 |
|
6 |
- |
|
7 |
-#!/bin/sh |
|
8 |
-for i in host2 host3 host4 do |
|
9 |
- rsync -aRv /var/www/ $i:/ |
|
10 |
-done |
|
11 |
- |
|
12 |
- +-------+ +-------+ |
|
13 |
- | host1 |------->| host2 | |
|
14 |
- +-------+ +-------+ |
|
15 |
- |
|
16 |
- +-------+ +-------+ |
|
17 |
- | host1 |------->| host3 | |
|
18 |
- +-------+ +-------+ |
|
19 |
- |
|
20 |
- +-------+ +-------+ |
|
21 |
- | host1 |------->| host4 | |
|
22 |
- +-------+ +-------+ |
|
23 |
- |
|
24 |
-また、このスクリプトのように転送先のホスト名をハードコードしてしまうと、サー |
|
25 |
-バが増えたり減ったりした場合にスクリプトを書き換える必要があります。サーバが |
|
26 |
-故障したり増設した際に、うっかりこの作業を忘れてしまうと「ファイルが転送され |
|
27 |
-ない!」という障害に直結してしまいます。 |
|
28 |
- |
|
29 |
-これらの問題は、「稼働中のサーバをきちんと管理する仕組」と「並列にファイル転 |
|
30 |
-送する仕組(下図参照)」を作ることで解決できます。この構成はとても転送効率は |
|
31 |
-よいのですが、システム構成や転送プログラムの処理が必要以上に複雑になってしま |
|
32 |
-う点が悩ましいところです。 |
|
33 |
- +-------+ |
|
34 |
- +--->| host4 | |
|
35 |
- +-------+ | +-------+ |
|
36 |
- +--->| host2 |--+ |
|
37 |
- | +-------+ | +-------+ |
|
38 |
- | +--->| host5 | |
|
39 |
- +-------+ | +-------+ |
|
40 |
- | host1 |--+ |
|
41 |
- +-------+ | +-------+ |
|
42 |
- | +--->| host6 | |
|
43 |
- | +-------+ | +-------+ |
|
44 |
- +--->| host3 |--+ |
|
45 |
- +-------+ | +-------+ |
|
46 |
- +--->| host7 | |
|
47 |
- +-------+ |
|
48 |
- |
|
49 |
-その結果として、今度は以下のような別の問題を抱えることになります。 |
|
50 |
- ・軽微な変更や機能追加をするだけでもかなりの労力が必要 |
|
51 |
- ・不具合が発生したときに挙動を追うのが結構大変 |
|
52 |
- ・動作検証も結構大変 |
|
53 |
- |
|
54 |
-============= 「まくお」はこれらの悩みをすべて解消してくれます ============= |
|
55 |
- |
|
56 |
-【まくおとは】 |
|
1 |
+【makuosanとは】 |
|
57 | 2 |
makuosan(まくおさん:通称「まくお」)は、複数のサーバへ同時にファイルを転 |
58 | 3 |
送するソフトウエアです。以下のような特徴があります。 |
59 | 4 |
|
60 |
-・デーモンとして各サーバに常駐 |
|
61 |
- |
|
62 |
-・各サーバの「まくお」が互いの存在を通知しあって自動的にメンバシップを構築 |
|
63 |
- - サーバを増設した際の設定変更作業などは不要 |
|
64 |
- - 新しいサーバ上で「まくお」を起動させるだけ |
|
65 |
- - 既設サーバの設定変更なども不要 |
|
66 |
- |
|
67 |
-・サーバが増えても、転送にかかる時間はほとんどかわらない |
|
68 |
- - 5台のサーバが10台に増えても、ほとんど同じ時間で転送が完了する |
|
69 |
- - ただし、転送時間は一番応答が遅いサーバの性能に引っ張られる |
|
70 |
- - 同程度のスペックのサーバで構築された環境で利用できると望ましい |
|
71 |
- |
|
72 |
-・「簡単!安全!高速!なファイル転送システム」というコンセプトで開発中 |
|
73 |
- |
|
74 |
- |
|
75 |
-【転送のしくみ】 |
|
76 |
- ファイル転送にTCPは利用しません。以下の図の host1 はUDPパケットをマルチキャ |
|
77 |
-ストアドレスに送出することでファイル転送しています。その他のサーバは、そのマ |
|
78 |
-ルチキャストパケットを受け取ってローカルファイルを生成します。 |
|
79 |
- |
|
80 |
- +-------+ +-------+ |
|
81 |
- | host2 |<-----+-------->| host4 | |
|
82 |
- +-------+ | +-------+ |
|
83 |
- | |
|
84 |
-+-------+ | +-------+ |
|
85 |
-| host1 |------->(Multicast)---->| host5 | |
|
86 |
-+-------+ 224.0.0.108 +-------+ |
|
87 |
- | |
|
88 |
- | |
|
89 |
- +-------+ | +-------+ |
|
90 |
- | host3 |<----+-------->| host6 | |
|
91 |
- +-------+ +-------+ |
|
92 |
- |
|
93 |
-【まくおのメリット】 |
|
94 |
- 「まくお」の最大のメリットは、ファイルを転送する際に転送先ホストを指定しな |
|
95 |
-くてもよいという点です。 |
|
96 |
- |
|
97 |
-rsync などの1対1の汎用の同期ツールを利用して全サーバにファイルを転送したい場 |
|
98 |
-合は、どうしても転送先のサーバを指定する必要があるので、どこのサーバを指定す |
|
99 |
-るかを別システム(ノード管理マネージャみたいな感じのなにか)から取得すること |
|
100 |
-になります。その上で、どうにか工夫して、すべての稼働中のサーバに対して rsync |
|
101 |
-を実行する処理を書かなければいけません。 |
|
102 |
- |
|
103 |
-「まくお」では、送信先サーバの管理はすべて「まくお」が担います。 |
|
104 |
-ファイルを転送したい場合は、転送対象のファイル名を「まくお」に伝えるだけでよ |
|
105 |
-いです。例えばこんな感じでいけます。 |
|
5 |
+・面倒な設定は不要 |
|
6 |
+ 各サーバに常駐している「まくお」同士が、互いの存在を確認しあって自動的にサ |
|
7 |
+ ーバリストを管理します。新しいサーバを増設する場合も、既設サーバの設定を一 |
|
8 |
+ 切変更せずに転送対象へ追加することができます。また、正常稼働しているサーバ |
|
9 |
+ のみをファイル転送の対象とするので、停止しているサーバのタイムアウトを待ち |
|
10 |
+ つづけて処理が滞ることもありません。 |
|
106 | 11 |
|
107 |
- $ makuo send -r hogehoge/ |
|
12 |
+・転送にかかる時間がサーバ台数に依存しない |
|
13 |
+ サーバが増えても、転送にかかる時間はほとんどかわりません。10台のサーバに転 |
|
14 |
+ 送しても、20台のサーバに転送しても、ほとんど同じ時間で完了します。ただし、 |
|
15 |
+ 転送時間は一番応答が遅いサーバの性能に引っ張られるので、同程度のスペックの |
|
16 |
+ サーバで構築された環境で利用することが望ましいです。 |
|
17 |
+ |
|
18 |
+・すべてのサーバで同時にファイルが更新される |
|
19 |
+ IPマルチキャストを使って全サーバへ同時にファイルを転送します。そのため、 |
|
20 |
+ 「このサーバのファイルは更新されているけど、あのサーバのファイルはまだ更新 |
|
21 |
+ されていない」といったことがありません。 |
|
108 | 22 |
|
109 |
-このコマンド一発で、全ての稼働中のサーバに hogehoge/ を転送できます。 |
|
110 |
-rsyncを駆使する場合と比べて、遥かにシンプルに実現できることがおわかりいただけ |
|
111 |
-ると思います。 |
|
112 | 23 |
|
113 |
-============================================================================ |
|
114 |
-【インストール手順】 |
|
24 |
+【インストール方法】 |
|
115 | 25 |
$ tar zxvf makuosan-x.x.x |
116 | 26 |
$ cd makuosan-x.x.x |
117 | 27 |
$ make |
28 |
+ $ su - |
|
118 | 29 |
# make install |
119 | 30 |
|
31 |
+ |
|
120 | 32 |
【ファイル構成】 |
121 |
- 「まくお」をインストールすると、以下のファイルがインストールされます。 |
|
33 |
+ 以下のファイルがインストールされます。 |
|
122 | 34 |
|
123 |
- /usr/local/sbin/makuosan # 「まくお」本体。全サーバで起動しておく。 |
|
124 |
- /usr/local/bin/makuo # コマンドラインツール。転送したい時に使用する。 |
|
35 |
+ /usr/local/sbin/makuosan # 「まくお」の本体、全サーバで動かすデーモン |
|
36 |
+ /usr/local/bin/makuo # 「まくお」のフロントエンド、転送したい時に使う |
|
125 | 37 |
|
126 | 38 |
|
127 | 39 |
【起動と停止】 |
128 |
- 「まくお」起動時には -bオプションでベースディレクトリを指定します。転送する |
|
129 |
-ファイルを指定する際には、ベースディレクトリからの相対パスを指定します。 |
|
40 |
+ makuosan起動時には -b オプションでベースディレクトリを指定します。指定され |
|
41 |
+なかった場合は、起動時のカレントディレクトリをベースディレクトリとします。 |
|
42 |
+転送ファイルの指定は、ベースディレクトリからの相対パスとなります。 |
|
130 | 43 |
|
131 | 44 |
# makuosan -b /var/www -u www-data -g www-data |
132 | 45 |
|
133 |
-まくおを停止するには、killコマンドなどでSIGTERMを送って下さい。 |
|
46 |
+まくおを停止するには、killコマンドなどでSIGTERMを送ります。 |
|
134 | 47 |
|
135 | 48 |
# killall makuosan |
136 | 49 |
|
137 | 50 |
|
138 | 51 |
【使用方法】 |
139 |
- 実際にファイルを転送するには「makuoコマンド」を使用します。 |
|
52 |
+ ファイルを転送するには「makuoコマンド」を使用します。 |
|
53 |
+ |
|
54 |
+ 例)ベースディレクトリ直下のindex.htmlを転送する(/var/www/index.html) |
|
55 |
+ $ makuo send index.html |
|
140 | 56 |
|
141 | 57 |
例)ベースディレクトリ以下のディレクトリツリーを全部転送する |
142 | 58 |
$ makuo send -r |
143 | 59 |
|
144 |
- 例)ベースディレクトリ直下のindex.htmlを転送する(/var/www/index.html) |
|
145 |
- $ makuo send index.html |
|
60 |
+ 例)転送されるファイルを確認する(dry run) |
|
61 |
+ $ makuo send -r -n |
|
62 |
+ |
|
63 |
+このコマンドで、makuosanが起動している全てのサーバへファイルが転送されます。 |
|
64 |
+ |
|
65 |
+ |
|
66 |
+【まくおを利用するメリット】 |
|
67 |
+ 「まくお」では、ファイル転送の際に転送先サーバを指定する必要がありません。 |
|
68 |
+rsyncやscpのような、1対1の転送ツール利用する場合は、必ず転送先を指定する必要 |
|
69 |
+があります。そのため、複数のサーバに対してファイルを転送したい場合は、サーバ |
|
70 |
+の数だけrsyncやscpを実行しなければいけません。例えば以下のような感じです。 |
|
71 |
+ |
|
72 |
+ $ for h in host2 host3 host4 host5 host6;do rsync -aRv hogehoge $h:/;done |
|
73 |
+ |
|
74 |
+ 「まくお」では、makuosanが起動しているサーバ同士でファイルの転送をします。 |
|
75 |
+したがって、転送したいサーバ全部でmakuosanを起動しておく必要があります。 |
|
76 |
+そのかわり、ファイル転送は、以下の例のように転送したいファイルやディレクトリ |
|
77 |
+を伝えるだけで済みます。 |
|
78 |
+ |
|
79 |
+ $ makuo send -r hogehoge/ |
|
80 |
+ |
|
81 |
+このコマンド一発で、「まくお」が稼働している全てのサーバに hogehoge/を転送す |
|
82 |
+ることができます。rsyncやscpを利用する場合と比べて、遥かにシンプルで簡単に転 |
|
83 |
+送スクリプトを記述できると思います。 |
|
84 |
+ |
|
85 |
+また「指定したサーバにだけ転送したい」というニーズもあるので、 |
|
86 |
+ |
|
87 |
+ $ makuo send -t host3 -r hogehoge/ |
|
88 |
+ |
|
89 |
+というように、特定のサーバにだけ転送するオプションも用意しています。 |
|
90 |
+ |
|
91 |
+ |
|
92 |
+【簡単な使用例】 |
|
93 |
+ |
|
94 |
+ == ネットワーク構成 == |
|
95 |
+ host1のファイルを host2, host3, host4に転送します。 |
|
96 |
+ |
|
97 |
+ +-------+ |
|
98 |
+ | host2 | |
|
99 |
+ +-------+ |
|
100 |
+ | |
|
101 |
+ +-------+ +-----------+ +-------+ |
|
102 |
+ | host1 |-----| L2 SWITCH |-----| host3 | |
|
103 |
+ +-------+ +-----------+ +-------+ |
|
104 |
+ | |
|
105 |
+ +-------+ |
|
106 |
+ | host4 | |
|
107 |
+ +-------+ |
|
108 |
+ |
|
109 |
+ |
|
110 |
+ == makuosanを起動する == |
|
111 |
+ |
|
112 |
+ host1:~# makuosan -b /var/www -u www-data -g www-data |
|
113 |
+ host2:~# makuosan -b /var/www -u www-data -g www-data |
|
114 |
+ host3:~# makuosan -b /var/www -u www-data -g www-data |
|
115 |
+ host4:~# makuosan -b /var/www -u www-data -g www-data |
|
116 |
+ |
|
117 |
+ == 転送するファイルを作る == |
|
118 |
+ host1の /var/www/ 以下にファイルを作ります。 |
|
119 |
+ |
|
120 |
+ host1:~# cd /var/www/ |
|
121 |
+ host1:/var/www# echo hoge > hoge.html |
|
122 |
+ host1:/var/www# echo fuga > fuga.html |
|
123 |
+ host1:/var/www# chown www-data:www-data hoge.html fuga.html |
|
124 |
+ host1:/var/www# ls -la |
|
125 |
+ total 16 |
|
126 |
+ drwxr-xr-x 3 root root 176 Oct 10 10:31 . |
|
127 |
+ drwxr-xr-x 15 root root 360 Oct 9 04:52 .. |
|
128 |
+ -rw-r--r-- 1 www-data www-data 5 Oct 10 10:31 fuga.html |
|
129 |
+ -rw-r--r-- 1 www-data www-data 5 Oct 10 10:31 hoge.html |
|
130 |
+ |
|
131 |
+ 他のホストにはファイルはありません。 |
|
132 |
+ |
|
133 |
+ host2:/var/www# ls -la |
|
134 |
+ total 16 |
|
135 |
+ drwxr-xr-x 3 root root 176 Oct 10 10:31 . |
|
136 |
+ drwxr-xr-x 15 root root 360 Oct 9 04:52 .. |
|
137 |
+ |
|
138 |
+ host3:/var/www# ls -la |
|
139 |
+ total 16 |
|
140 |
+ drwxr-xr-x 3 root root 176 Oct 10 10:31 . |
|
141 |
+ drwxr-xr-x 15 root root 360 Oct 9 04:52 .. |
|
142 |
+ |
|
143 |
+ host4:/var/www# ls -la |
|
144 |
+ total 16 |
|
145 |
+ drwxr-xr-x 3 root root 176 Oct 10 10:31 . |
|
146 |
+ drwxr-xr-x 15 root root 360 Oct 9 04:52 .. |
|
147 |
+ |
|
148 |
+ |
|
149 |
+ == ファイルを転送する == |
|
150 |
+ |
|
151 |
+ host1:~$ makuo send -r |
|
152 |
+ |
|
153 |
+ |
|
154 |
+ == 転送されたファイルを確認 == |
|
155 |
+ |
|
156 |
+ host2:/var/www# ls -la |
|
157 |
+ total 16 |
|
158 |
+ drwxr-xr-x 3 root root 176 Oct 10 10:31 . |
|
159 |
+ drwxr-xr-x 15 root root 360 Oct 9 04:52 .. |
|
160 |
+ -rw-r--r-- 1 www-data www-data 5 Oct 10 10:31 fuga.html |
|
161 |
+ -rw-r--r-- 1 www-data www-data 5 Oct 10 10:31 hoge.html |
|
162 |
+ |
|
163 |
+ host3:/var/www# ls -la |
|
164 |
+ total 16 |
|
165 |
+ drwxr-xr-x 3 root root 176 Oct 10 10:31 . |
|
166 |
+ drwxr-xr-x 15 root root 360 Oct 9 04:52 .. |
|
167 |
+ -rw-r--r-- 1 www-data www-data 5 Oct 10 10:31 fuga.html |
|
168 |
+ -rw-r--r-- 1 www-data www-data 5 Oct 10 10:31 hoge.html |
|
169 |
+ |
|
170 |
+ host4:/var/www# ls -la |
|
171 |
+ total 16 |
|
172 |
+ drwxr-xr-x 3 root root 176 Oct 10 10:31 . |
|
173 |
+ drwxr-xr-x 15 root root 360 Oct 9 04:52 .. |
|
174 |
+ -rw-r--r-- 1 www-data www-data 5 Oct 10 10:31 fuga.html |
|
175 |
+ -rw-r--r-- 1 www-data www-data 5 Oct 10 10:31 hoge.html |
|
146 | 176 |
|
147 |
-また、makuoコマンドを使わずに転送する方法もあります。 |
|
148 |
- |
|
149 |
- $ telnet 127.0.0.1 5000 |
|
150 |
- > send -r |
|
151 |
- > quit |
|
152 |
- |
|
153 |
-これで、makuo send -r と同じことができます。つまり、makuoコマンドは単純にソケッ |
|
154 |
-ト通信をしてコマンドを中継しているだけなので、telnet や socatを利用しても同様の |
|
155 |
-操作が可能です。 |
|
156 |
- |
|
157 |
- host1:~$ telnet 127.0.0.1 5000 |
|
158 |
- Trying 127.0.0.1... |
|
159 |
- Connected to 127.0.0.1. |
|
160 |
- Escape character is '^]'. |
|
161 |
- > help |
|
162 |
- COMMAND: |
|
163 |
- quit |
|
164 |
- exclude add PATTERN |
|
165 |
- exclude del PATTERN |
|
166 |
- exclude list |
|
167 |
- exclude clear |
|
168 |
- send [-n] [-r] [-t host] [filename] |
|
169 |
- md5 [-r] [-t host] [filename] |
|
170 |
- loglevel num (0-9) |
|
171 |
- members |
|
172 |
- help |
|
173 |
- > quit |
|
174 |
- host1:~$ |
|
175 |
- |
|
176 |
- |
|
177 |
-【現状の問題/課題など】 |
|
178 |
- |
|
179 |
- ・ブロックデバイスやキャラクタデバイスは転送できない |
|
180 |
- ・転送先のファイルを消せない(rsync --delete相当の機能がない) |
|
181 |
- ・sendコマンドのファイル指定にワイルドカードが使えない |
|
182 |
- ・起動/停止用のスクリプトを作っていない |
|
183 |
- |
|
184 |
- 今後のバージョンアップで随時対応していく予定です。 |
|
185 | 177 |
|