Mar
14

MogileFSの冗長化機能のテストをしてみる

昨日の記事で、今度はLinux上にXenのDomainUを複数用意して実験をすると書きましたが、実験環境を用意するのに時間がかかるので、FreeBSD 6.2上の mogstored に複数の device を用意することで、冗長化機能のテストをしたいと思います。
物理的な host を複数台用意しても、その上には device を作成し、ファイルは device の上に作成される domainclass の上に生成されるので、host は1台でも device を複数用意すれば、同じような実験ができるものと考えられます。

さて、今回はMogileFS上の device が突然壊れた場合でもちゃんと冗長化機能が働いているかどうかの実験をしたいと思います。

多くの場合、あるファイルは2個所に存在していれば十分な冗長性が確保できると考えられます。仮に片方のストレージが物理的に壊れてしまっても、もう片方が生きていればファイルの消失は避けられます。2台のストレージが同時に壊れる可能性は、そんなに高くはないでしょう。

MogileFSで2個所のストレージを定義するためには、device を2つ作成する必要があります。

しかし、本当に2つで大丈夫でしょうか?

仮に2つの device うちの1つが壊れたとします。すると、この時にMogileFS上には各々のデータは1つしか存在しないことになります。1つの device が壊れている間に追加されるデータもまた、1つしか作成されていないことになります。

すぐに壊れた device を復旧することができればいいですが、常にそうできるとも限らないので、device は3つ以上あると運用上都合がよいと考えられます。3つのうち1つが壊れてしまっても、壊れたことがわかった時点ですぐにその device をMogileFSから切り離せば(device の状態を dead にする)、その device に保存されていたデータはMogileFSの冗長化機能によって他の2つの device のどちらかに作成されます。この間に新たに追加されるデータもまた、この2つの device 上に作成されます。そして、2つの device で運用できている間に壊れた device を復旧して、また3つの構成に戻せばよいのです。

では、MogileFS上に3つの device を作成してみます。
まずは現在の状態をチェックしてみます。


% sudo -u mogile mogadm --trackers=127.0.0.1:6001 check
Checking trackers...
  127.0.0.1:6001 ... OK

Checking hosts...
No devices found on tracker(s).

まだ hostdevice も登録していないので、何も表示されています。
では、host を登録してみます。


% sudo -u mogile mogadm --trackers=127.0.0.1:6001 host add localhost --status=alive
% sudo -u mogile mogadm --trackers=127.0.0.1:6001 check
Checking trackers...
  127.0.0.1:6001 ... OK

Checking hosts...
  [ 1] localhost ... OK

Checking devices...
  host device         size(G)    used(G)    free(G)   use%   ob state   I/O%
  ---- ------------ ---------- ---------- ---------- ------ ---------- -----
  ---- ------------ ---------- ---------- ---------- ------
             total:     0.000      0.000      0.000   0.00%

localhostで動作する mogstoredhost に登録することができました。--status オプションに alive を指定したので、OK になっています。--status オプションを指定しないとデフォルトでは down です。

続いて device を登録してみます。mogadm コマンドを実行する前に、実際にファイルを格納するためのディレクトリを作成しておきます。


% sudo -u mogile mkdir -p /home/mogile/var/mogdata/dev{1,2,3}

ディレクトリを作成したら、mogadm コマンドにて device を登録します。


% sudo -u mogile mogadm --trackers=127.0.0.1:6001 device add localhost 1 --status=alive
% sudo -u mogile mogadm --trackers=127.0.0.1:6001 device add localhost 2 --status=alive
% sudo -u mogile mogadm --trackers=127.0.0.1:6001 device add localhost 3 --status=alive
% sudo -u mogile mogadm --trackers=127.0.0.1:6001 check
Checking trackers...
  127.0.0.1:6001 ... OK

Checking hosts...
  [ 1] localhost ... OK

Checking devices...
  host device         size(G)    used(G)    free(G)   use%   ob state   I/O%
  ---- ------------ ---------- ---------- ---------- ------ ---------- -----
  [ 1] dev1            62.495      8.305     54.190  13.29%  writeable   0.0
  [ 1] dev2            62.495      8.305     54.190  13.29%  writeable   0.0
  [ 1] dev3            62.495      8.305     54.190  13.29%  writeable   0.0
  ---- ------------ ---------- ---------- ---------- ------
             total:   187.486     24.915    162.571  13.29%

ちゃと登録できているようです。

それでは domainclass を登録してみます。


% sudo -u mogile mogadm --trackers=127.0.0.1:6001 domain add testdomain
% sudo -u mogile mogadm --trackers=127.0.0.1:6001 domain list
 domain               class                mindevcount
-------------------- -------------------- -------------
 testdomain           default                   2
% mogadm --trackers=127.0.0.1:6001 class add testdomain testclass
% mogadm --trackers=127.0.0.1:6001 class list
 domain               class                mindevcount
-------------------- -------------------- -------------
 testdomain           default                   2
 testdomain           testclass                 2

mindevcount はMogileFS上に最低いくつのコピーを作成するか、という値です。ここでは2なので、2個所にファイルが保存される、ということになります。コピーを作成する数を明示的に指定するためには --mindevcount=3 のようにしてオプションを指定します。

さて、下準備ができたところで、実際にファイルを置いてみましょう。
MogileFS ClientはPerlによるAPIが用意されていますが、プログラムを組まなくても mogtool という付属のツールを使えばとりあえずファイルを置いたり消したりするくらいのことはできます。
では、ファイルを置いてみます。


% echo 'hello mogilefs.' > hellomogilefs.txt
% sudo -u mogile mogtool --trackers=127.0.0.1:6001 --domain=testdomain --class=testclass inject hellomogilefs.txt hellomogilefs
file hellomogilefs: 6effbe3656628417f044194d21ae8559, len = 16
Spawned child 1461 to deal with chunk number 1.
        chunk 1 saved in 0.14 seconds.
Child 1461 successfully finished with chunk 1.
Beginning replication wait: 1
% sudo -u mogile mogtool --trackers=127.0.0.1:6001 --domain=testdomain --class=testclass locate hellomogilefs

http://127.0.0.1:7500/dev1/0/000/000/0000000002.fid

http://127.0.0.1:7500/dev3/0/000/000/0000000002.fid

#2 paths found

2個所にファイルが置かれたことがわかります。

では dev1 が壊れたことにして、dev1 のstatusを dead にしてみます。


% sudo -u mogile mogadm --trackers=127.0.0.1:6001 device mark localhost dev1 dead
% sudo -u mogile mogadm --trackers=127.0.0.1:6001 check
Checking trackers...
  127.0.0.1:6001 ... OK

Checking hosts...
  [ 1] localhost ... OK

Checking devices...
  host device         size(G)    used(G)    free(G)   use%   ob state   I/O%
  ---- ------------ ---------- ---------- ---------- ------ ---------- -----
  [ 1] dev2            62.495      8.306     54.190  13.29%  writeable   0.0
  [ 1] dev3            62.495      8.306     54.190  13.29%  writeable   0.0
  ---- ------------ ---------- ---------- ---------- ------
             total:   124.991     16.611    108.380  13.29%

dev1 がなくなりました。dev1 に置かれていたファイルはどうなったでしょうか。


% sudo -u mogile mogtool --trackers=127.0.0.1:6001 --domain=testdomain --class=testclass locate hellomogilefs

http://127.0.0.1:7500/dev2/0/000/000/0000000002.fid

http://127.0.0.1:7500/dev3/0/000/000/0000000002.fid

#2 paths found

ちゃんと dev2 にコピーされていました。

以上、MogileFSのレプリケーション機能がちゃんと動作することが確認できました。画像などデータベースに格納するには大きいデータを冗長性を考慮して保持したい場合には便利なシステムだと思います。

8 Responses to “MogileFSの冗長化機能のテストをしてみる”

Love Epicentre is one of the most popular online dating sites, and has a huge member database with thousands of free profiles to browse. It is a trusted and safe online dating site that caters to long term relationship seekers and finds your match based on personality traits.

Posted on May 14th, 2009.

leldAcess said:

where can i get antibiotics without prescription http://drugstore.gd/category/cholesterol.html temet system 1000 transpak blood circuit

Posted on August 3rd, 2009.

collapsed colony disorder http://drugstore.gd/product/microzide.html lipp prescription

Posted on August 6th, 2009.

what causes chills after heart surgery http://drugstore.gd/product/mobic.html third party health welfare trust canada

Posted on August 6th, 2009.

Redeslild said:

sun and cholesterol make vitamin d http://pharmacyrxworld.info/search.php?letter=Q&lng=it&cv=eu college in medical singapore

Posted on August 11th, 2009.

health shops clevedon http://pharmacyrxworld.info/item.php?id=5123&lng=fr&cv=eu feedback la loss weight

Posted on August 18th, 2009.

review on born is blood and fire http://pharmacyrxworld.info/item.php?id=819&lng=us&cv=us breast pump rental

Posted on August 20th, 2009.

uses of laser in the field of medicine http://legalrxdrugstore.com/item/glucotrol_xl.html?id=758&cv=ch penis synonym

Posted on August 25th, 2009.

Leave a Reply

You must be logged in to post a comment.