【備忘録】okuyamaFuseでハマったのでメモ
okuyamaとはKVSの特徴を生かし、
データをディスクやメモリに保存し、分散してアクセスする機能を持ったファイルシステムですが、
通常のファイルシステムと異なり、専用のクライアントからしか利用する事ができません。
FUSE(Filesystem in Userspace)というユーザー空間でファイルシステムとして実装できるようにし、
okuyamaを上記方法で従来通りのファイルシステムとして利用できるようにしたのがokuyamaFuseです。
現在@ITでokuyamaFuseの記事が掲載されていますが、
okuyamaFuseをCentOS6で構築する際にハマったのでメモを残しておきます。
■okuyamaの構築
okuyamaFuseが利用するための元となるokuyamaを構築します。
特に設定はしていませんので構築は簡単です。
・前提パッケージのインストール
yum -y install fuse* ant
・okuyamaユーザの追加、okuyamaのダウンロード、実行
useradd okuyama passwd okuyama su okuyama wget http://iij.dl.sourceforge.jp/okuyama/57589/okuyama-0.9.4.zip unzip okuyama-0.9.4.zip cd okuyama-0.9.4 /usr/bin/ant serverrun
■okuyamaFuseの構築
okuyamaFuseを構築するために必要となるFUSE-Jを構築します。これがかなりハマりました。
・Java SEダウンロードページよりJDKをダウンロード
wgetで上記ファイルをダウンロードします。
tar xvzf jdk-7u25-linux-***.tar.gz
・/opt/jdkに解凍したファイルを移動
mv jdk1.7.0_25 /opt/jdk
・FUSE-Jの構築
・FUSE-Jのダウンロード
wget http://downloads.sourceforge.net/project/fuse-j/fuse-j/FUSE-J%202.4%20prerelease1/fuse-j-2.4-prerelease1.tar.gz tar -xvzf fuse-j-2.4-prerelease1.tar.gz mkdir fuse-j-2.4-prerelease1/build
・環境に合わせるためbuild.confを修正
vi fuse-j-2.4-prerelease1/build.conf -------------------------------------------------- # JDK 1.5 or greater HOME JDK_HOME=/opt/jdk # FUSE library & headers base directory FUSE_HOME=/usr/include --------------------------------------------------
・環境に合わせるためjniのMakefileを修正
vi fuse-j-2.4-prerelease1/jni/Makefile -------------------------------------------------- (変更前) INCLUDES := -I${FUSE_HOME}/include -I${JDK_HOME}/include -I${JDK_HOME}/include/linux (変更後/i386用) INCLUDES := -I${FUSE_HOME}/include -I${JDK_HOME}/include -I${JDK_HOME}/include/linux -L/opt/jdk/jre/lib/i386/server (変更後/x86_64用) INCLUDES := -I${FUSE_HOME}/include -I${JDK_HOME}/include -I${JDK_HOME}/include/linux -L/opt/jdk/jre/lib/x86_64/server --------------------------------------------------
・FUSE-Jのコンパイル
cd fuse-j-2.4-prerelease1 make all
コンパイル完了後にjni/libjavafs.soが作られたらOKです。
・okuyamaFuseの準備
mkdir /home/okuyama/okuyamaFuse cp /home/okuyama-0.9.4/okuyama-0.9.4.jar /home/okuyamaFuse/ cp /home/okuyama-0.9.4/okuyamaFuse/lib/fuse-j-2.4/lib/commons-logging-1.0.4.jar /home/okuyamaFuse/ cp /home/okuyama-0.9.4/okuyamaFuse/lib/fuse-j-2.4/fuse-j.jar /home/okuyamaFuse/ cp /home/okuyama-0.9.4/okuyamaFuse/okuyamaFuse-0.0.1.jar /home/okuyamaFuse/ cp /home/okuyama-0.9.4/lib/javamail-1.4.1.jar /home/okuyamaFuse/ cp /home/fuse-j-2.4-prerelease1/jni/libjavafs.so /home/okuyamaFuse/
・okuyamaFuseの起動&マウント
前提ファイルのコピーが終わったokuyamaFuseのディレクトリへ移動し、okuyamaFuseを起動します。
cd /home/okuyamaFuse LD_LIBRARY_PATH=./:/lib \ /opt/jdk/bin/java -classpath ./okuyamaFuse-0.0.1.jar:./fuse-j.jar:./commons-logging-1.0.4.jar:./okuyama-0.9.4.jar:./javamail-1.4.1.jar \ -Dorg.apache.commons.logging.Log=fuse.logging.FuseLog \ -Dfuse.logging.level=INFO \ -Xmx1024m -Xms1024m \ -server -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+UseParNewGC \ fuse.okuyamafs.OkuyamaFuse \ -f -o allow_other \ /mnt \ localhost:8888
・起動メッセージ
上記コマンドの実行により以下のメッセージが表示されます。
エラーが出る場合には、okuyamaが起動しているか、マウント先が存在しているかを確認してください。
15:27:48.312 main INFO [fuse.okuyamafs.OkuyamaFilesystem]: okuyama file system init start... 15:27:50.156 main INFO [fuse.okuyamafs.OkuyamaFilesystem]: okuyama file system init end... 15:27:50.180 main INFO [fuse.FuseMount]: Mounting filesystem
・動作確認
dfを叩いてみましたが、
readmeにあるようにβ版のため11TB固定となる他、ディレクトリ全体の容量は増減しませんでした。
$ df -h Filesystem Size Used Avail Use% マウント位置 /dev/sda2 20G 2.3G 17G 13% / tmpfs 503M 0 503M 0% /dev/shm /dev/sda1 194M 40M 144M 22% /boot javafs 11T 0 11T 0% /mnt
β版状態とは言え、一通り読み書きができるレベルとなっているようです。
分散ファイルシステムは多数がAPI操作を必要とし、
FUSE経由でマウントできる物はあまり例がありませんので、今後の発展に期待したいところです。
今回用意したマシンスペックの問題も少なからずありそうですが、
okuyamaとokuyamaFuseを実行したのみで800MB近いメモリ消費と、
CPUもokuyamaで1コア×1.5GHz分ほど消費される他、
パフォーマンスも最大で5MB/s、通常は1MB/s前後とあまり振わない結果でした。
次回の@IT記事更新でパフォーマンスチューニングの内容に期待しつつ、
改めて4コア程度のマシンで環境を構築してディスク別・メモリ別でベンチマークを取ってみたいと思います。