Note of MogileFS #06 Using MogileFS (1)
さて実際に使ってみましょう。
telnetによるテスト
早速mogstoredにtelnetで接続してみます。
# telnet localhost 7500 Trying 127.0.0.1... Connected to localhost.localdomain (127.0.0.1). Escape character is '^]'. PUT /dev1/test HTTP/1.0 Content-length: 7 zigorou HTTP/1.0 200 OK Content-Type: text/html Content-Length: 18 Connection: close <h1>200 - OK</h1> Connection closed by foreign host.
この例だと明示的にdev1に対してファイルをPUTしています。
同じURLに対してGETすると元のContentが返されます。
# telnet localhost 7500 Trying 127.0.0.1... Connected to localhost.localdomain (127.0.0.1). Escape character is '^]'. GET /dev1/test HTTP/1.0 HTTP/1.0 200 OK Date: Mon, 16 Oct 2006 16:34:59 GMT Server: Perlbal Last-Modified: Mon, 16 Oct 2006 16:32:00 GMT Accept-Ranges: bytes Content-Type: text/plain Content-Length: 7 Connection: close zigorou
このファイルですけど、実際には、/var/mogdata/dev1/testにファイルが出来ています。*1
mogtoolを使ったテスト
MogileFS::Utilsに含まれるmogtoolを使うともう少しきちんとテストが出来ます。
manがあるのでそちらに詳しく書いてあります。*2
早速やってみましょう。
適当にダミーデータを用意します。
# cd /var/tmp # echo "dummy" > dummy.txt
injectでファイルを突っ込む例になります。
debugオプション付きでの実行なんで、ログが長いです。
# mogtool --debug --trackers="10.255.255.30:7001,10.255.255.31:7001" --domain=www.art-cod e.org --class=foo inject /var/tmp/dummy.txt dummy MogileFS object: [MogileFS::Client=ARRAY(0x8993f08)] $VAR1 = bless( [ bless( { 'readonly' => 4, 'domain' => 2, 'backend' => 3, 'root' => 1 }, 'pseudohash' ), undef, 'www.art-code.org', bless( [ bless( { 'sock_cache' => 5, 'hosts' => 1, 'timeout' => 7, 'pref_ip' => 6, 'lasterr' => 3, 'host_dead' => 2, 'lasterrstr' => 4 }, 'pseudohash' ), [ '10.255.255.30:7001', '10.255.255.31:7001' ], {}, undef, undef, undef, undef, 3 ], 'MogileFS::Backend' ), 0 ], 'MogileFS::Client' ); file dummy: f02e326f800ee26f04df7961adbf7c0a, len = 6 Spawned child 3306 to deal with chunk number 1. MogileFS object: [MogileFS::Client=ARRAY(0x8c24004)] $VAR1 = bless( [ bless( { 'readonly' => 4, 'domain' => 2, 'backend' => 3, 'root' => 1 }, 'pseudohash' ), undef, 'www.art-code.org', bless( [ bless( { 'sock_cache' => 5, 'hosts' => 1, 'timeout' => 7, 'pref_ip' => 6, 'lasterr' => 3, 'host_dead' => 2, 'lasterrstr' => 4 }, 'pseudohash' ), [ '10.255.255.30:7001', '10.255.255.31:7001' ], {}, undef, undef, undef, undef, 3 ], 'MogileFS::Backend' ), 0 ], 'MogileFS::Client' );
MogileFS::Clientを二個作りに行くのがミソでしょうね。
trackersの数だけClientを生成するんじゃないでしょうか。
SOCK: Sock_10.255.255.31:7001, REQ: create_open domain=www.art-code.org&fid=0&class=foo&multi_dest=1&key=dummy $VAR1 = undef; RESPONSE: OK dev_count=2&devid_2=2&path_1=http://10.255.255.30:7500/dev1/0/000/000/0000000011.fid&fid=11&devid_1=1&path_2=http://10.255.255.31:7500/dev2/0/000/000/0000000011.fid $VAR1 = undef; RETURN_VARS: $VAR1 = { 'dev_count' => '2', 'devid_2' => '2', 'path_1' => 'http://10.255.255.30:7500/dev1/0/000/000/0000000011.fid', 'fid' => '11', 'devid_1' => '1', 'path_2' => 'http://10.255.255.31:7500/dev2/0/000/000/0000000011.fid' }; SOCK: cached = Sock_10.255.255.31:7001, REQ: create_close domain=www.art-code.org&fid=11&devid=1&path=http://10.255.255.30:7500/dev1/0/000/000/0000000011.fid&size=6&key=dummy $VAR1 = undef; RESPONSE: OK $VAR1 = undef; RETURN_VARS: $VAR1 = {}; chunk 1 saved in 0.10 seconds. SOCK: Sock_10.255.255.31:7001, REQ: get_paths domain=www.art-code.org&noverify=1&key=dummy $VAR1 = undef; RESPONSE: OK path2=http://10.255.255.31:7500/dev2/0/000/000/0000000011.fid&path1=http://10.255.255.30:7500/dev1/0/000/000/0000000011.fid&paths=2 $VAR1 = undef; RETURN_VARS: $VAR1 = { 'path2' => 'http://10.255.255.31:7500/dev2/0/000/000/0000000011.fid', 'path1' => 'http://10.255.255.30:7500/dev1/0/000/000/0000000011.fid', 'paths' => '2' }; Child 3306 successfully finished with chunk 1. Beginning replication wait: 1 SOCK: cached = Sock_10.255.255.31:7001, REQ: get_paths domain=www.art-code.org&noverify=1&key=dummy $VAR1 = undef; RESPONSE: OK path2=http://10.255.255.30:7500/dev1/0/000/000/0000000011.fid&path1=http://10.255.255.31:7500/dev2/0/000/000/0000000011.fid&paths=2 $VAR1 = undef; RETURN_VARS: $VAR1 = { 'path2' => 'http://10.255.255.30:7500/dev1/0/000/000/0000000011.fid', 'path1' => 'http://10.255.255.31:7500/dev2/0/000/000/0000000011.fid', 'paths' => '2' };
と言う訳で2つのノードにコピーされてると言えるかと思います。
curlを使って確認してみましょう。
# curl http://10.255.255.30:7500/dev1/0/000/000/0000000011.fid dummy # curl http://10.255.255.31:7500/dev2/0/000/000/0000000011.fid dummy
ばっちりレプリカも作られてますね。mogtoolを使ってファイルを取り出すには、
extractを使います。
# mogtool --overwrite --trackers="10.255.255.30:7001,10.255.255.31:7001" --domain=www.art -code.org --class=foo extract dummy /var/tmp/dummy.txt.extract Fetching piece 1... Trying http://10.255.255.31:7500/dev2/0/000/000/0000000011.fid... Done. # mogtool --overwrite --trackers="10.255.255.30:7001,10.255.255.31:7001" --domain=www.art-code.org --class=foo extract dummy /var/tmp/dummy.txt.extract Fetching piece 1... Trying http://10.255.255.30:7500/dev1/0/000/000/0000000011.fid... Done.
二回連続で敢えて実行した所、指し示す実体に関しては別のノードを示しましたね。
ある程度負荷分散の概念も入ってる模様。*3
次回はMogileFS::Clientのサンプル書きます。