Masanobu Yasui authored on 2008/10/14 04:44:40
Showing 2 changed files
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