前回LeoFSをinstallするところまでやったので、今回は実際に動かしてみる。下記のドキュメントを参考にしながらやってみる。
Getting Started — LeoFS 1.0 documentation
起動
$ cd /usr/local/dev/leofs/package
$ leo_manager_0/bin/leo_manager start
$ leo_manager_1/bin/leo_manager start
$ leo_storage/bin/leo_storage start
起動の確認
$ leo_manager_0/bin/leo_manager ping
pong
$ leo_manager_1/bin/leo_manager ping
pong
$ leo_storage/bin/leo_storage ping
Node 'storage_0@127.0.0.1' not responding to pings.
むむむ。leo_storageがうまく起動できていないっぽい。一応telnetしてみようとしたら、telnet入れてなかったから、いれる。
$ sudo yum -y install telnet
$ telnet 127.0.0.1 10010
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
start
[ERROR] Storage cluster does not start, yet
やっぱり無理かー。仕方ないのでleo_storageの起動コマンドをデバッグモードにしてみる。
$ vi leo_storage/bin/leo_storage
shell scriptは最初の一行目の#!/bin/sh
→#!/bin/sh -x
こうすればデバッグモードになる。もう一度起動。
$ leo_storage/bin/leo_storage start
<中略>
+ mkdir -p /tmp//usr/local/dev/leofs/package/leo_storage/
+ shift
+ /usr/local/dev/leofs/package/leo_storage/erts-5.9.3.1/bin/run_erl -daemon /tmp//usr/local/dev/leofs/package/leo_storage/ /usr/local/dev/leofs/package/leo_storage/log 'exec /usr/local/dev/leofs/package/leo_storage/bin/leo_storage console '
+ exit 0
なんか、この最後のあたりが怪しい?scriptにmkdirがあるとパーミッション関連な気がする。その辺に当たりをつけて、コードを読んでみる。
…いまいちどこが原因かわからない。構成とかパーミッションが原因だったら起動スクリプトを読めばわかるが、怪しいところがないので、内部的な挙動な気がする。内部的な挙動が原因の時は迷わず質問を投げたほうが早い。
質問をしたところleveldbを内部的に使っていて、sigle CPUだとうまく起動しないらしい。これはちょっとわからなかった。virtual boxの設定でcpu数を2にあげてOS再起動。そうしたら上手く起動できた。
$ leo_storage/bin/leo_storage ping
pong
telnetでstartできた。
$ telnet 127.0.0.1 10010
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
start
Generating RING...
Generated RING
OK 100% - storage_0@127.0.0.1
OK
status
[System config]
System version : 1.0.2
Cluster Id : leofs_1
DC Id : dc_1
Total replicas : 1
# of successes of R : 1
# of successes of W : 1
# of successes of D : 1
# of DC-awareness replicas : 0
ring size : 2^128
Current ring hash : dd054643
Prev ring hash : dd054643
[Multi DC replication settings]
max # of joinable DCs : 2
# of replicas a DC : 1
[Node(s) state]
-------+--------------------------+--------------+----------------+----------------+----------------------------
type | node | state | current ring | prev ring | updated at
-------+--------------------------+--------------+----------------+----------------+----------------------------
S | storage_0@127.0.0.1 | running | dd054643 | dd054643 | 2014-07-02 13:55:40 +0900
quit
BYE
Connection closed by foreign host.
gatewayとかいうのを起動する。イメージ的にはmanagerがapp、storageがDB、gatewayがwebserverなのかな?
Introduction — LeoFS 1.0 documentation
$ leo_gateway/bin/leo_gateway start
$ leo_gateway/bin/leo_gateway ping
pong
telnetでstatusがどう変わったか確認。
$ telnet 127.0.0.1 10010
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
status
[System config]
System version : 1.0.2
Cluster Id : leofs_1
DC Id : dc_1
Total replicas : 1
# of successes of R : 1
# of successes of W : 1
# of successes of D : 1
# of DC-awareness replicas : 0
ring size : 2^128
Current ring hash : dd054643
Prev ring hash : dd054643
[Multi DC replication settings]
max # of joinable DCs : 2
# of replicas a DC : 1
[Node(s) state]
-------+--------------------------+--------------+----------------+----------------+----------------------------
type | node | state | current ring | prev ring | updated at
-------+--------------------------+--------------+----------------+----------------+----------------------------
S | storage_0@127.0.0.1 | running | dd054643 | dd054643 | 2014-07-02 13:55:40 +0900
G | gateway_0@127.0.0.1 | running | dd054643 | dd054643 | 2014-07-02 14:02:02 +0900
nodeにgatewayが増えていることが確認できる。たぶん、この辺を増やしたりできるのが分散ファイルシステムなんだろう。
そのままtelnetでマネージャーコンソールからuserをつくる。
create-user tarr
access-key-id: b0b13a47973f28e70ee8
secret-access-key: 7315fb1215c71273bdc721b57b7f2850437ce6ce
get-users
user_id | role_id | access_key_id | created_at
------------+---------+------------------------+---------------------------
_test_leofs | 9 | 05236 | 2014-07-01 16:46:09 +0900
tarr | 1 | b0b13a47973f28e70ee8 | 2014-07-02 14:08:21 +0900
これらのkeyをつかってAPI叩いたりしてLeoFS上のファイルを管理するのかな?
ドキュメント上では「これでクライアントを使えるようになったよ」って書いてあるけど、S3とか触ったこと無いので、よくわからん。とりあえずスキップして進めてみる。
なんかbucketというのを追加しなければいけないらしい。ググったところ、S3ではレポジトリ的なものをbucketと呼ぶらしい。file systemなどで使われている汎用的な言葉なのか?よくわからないけど、とにかくファイルを突っ込む場所をbucketと呼ぶと理解。
add-bucket tarr-bucket b0b13a47973f28e70ee8
OK
get-buckets
cluster id | bucket | owner | permissions | created at
-------------+-------------+--------+------------------+---------------------------
leofs_1 | tarr-bucket | tarr | Me(full_control) | 2014-07-02 14:18:14 +0900
これで準備が整ったかな。次は実際にファイルを置いたり消したりしてみる。