Dockerの勉強ついでに
あんまりDB・ストレージ系の性能を気にしたことが無くて(気にしないといけないんですが)、 VoltDBがインメモリで速いらしい、ということで性能を試したくなりました。(本当はriakを試すつもりだったんですが、興味がコロコロと…)
が、今回はインストールからバンドルされてるサンプルプロジェクトを動かすまでのメモです。
せっかくなのでDockerコンテナ上のUbuntuに入れて動かしてみます。どちらかというとDockerのメモがメインです。
Volt DBとは
VoltDBはIngresやPostgreSQLに携わったマイケル・ストーンブレーカーにより設計されたインメモリデータベースである。 - WikiPediaより引用
ということで、Postgresの開発に関わってる人が作ってるみたいです。MemcachedやRedisの代替で使えそうだけど、 SQLはJavaから動かしたりプロシージャを介してなんやかんやするらしいのでハードル高そうな感じ(´ω`)Javaワカリマセン
Dockerfileの設定から起動まで
Dockerのコンテナ作りから始めます。メイン端末がMacなのでboot2docker上で動かします(boot2dockerのインストールなどは省略)。 こんな感じで書いた。
FROM ubuntu:12.04
MAINTAINER Yoshiaki Sugimoto
# system update
RUN apt-get update
# install dependency middlewares
RUN apt-get install wget openssh-server openjdk-7-jdk gcc ntp -y
# get and extract voltdb
RUN cd /root && wget -q http://voltdb.com/downloads/technologies/server/LINUX-voltdb-ent-4.5.tar.gz
RUN tar xfz /root/LINUX-voltdb-ent-4.5.tar.gz -C /usr/local
# enable to use voltdb management commands
ENV PATH /usr/local/voltdb-ent-4.5/bin:$PATH
# ssh settings
RUN mkdir -p /var/run/sshd
RUN sed -ri "s/#PermitRootLogin yes/PermitRootLogin yes/" /etc/ssh/sshd_config
RUN echo "root:root" | chpasswd
# port ssh
EXPOSE 22
# port voltdb admin
EXPOSE 8080
CMD ["/usr/sbin/sshd"undefined "-D"]
色々試してて気づいたけど、CMDセクションは一つしか駄目みたい(起動後にdocker inspectしてもConfig.Cmdは最後の一つしか渡っていなかった)。 もしかしたら方法あるかもしれないし、起動スクリプトをADDしてまとめて実行するとかでもいいかな?今回は一旦セットアップを済ませた後にsshdを起動しておいて、後からsshでログインして起動する方法にした。
で、docker imageをビルド。
$ docker build -t voltdb
成功したらバックグラウンドで起動させる。ポートフォワーディングの指定を忘れずに。
$ docker run -d -p 60001:22 -p 60002 8080 --name voltdbsample voltdb
8080ポートを解放・フォワード指定しているのは、VoltDBの管理ツールみたいなのがこのポートで実行されるから。 あとはdocker psで起動を確認できればOK。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b74a21a58639 voltdb:latest /usr/sbin/sshd -D 5 seconds ago Up 3 seconds 0.0.0.0:60001->22/tcpundefined 0.0.0.0:60002->8080/tcp voltdbsample
ここまで来たら後は通常通り。SSHでログインして起動する。 ポートフォワーディングとかDockerfileの設定などは以下を参考に。ここでは60001(ssh)/8899(http)をそれぞれホスト->ゲストにフォワードさせた。
安定のhavelogである。
VoltDBの起動まで
SSHでログインしたら、サンプルプロジェクトをコンパイル・起動する。サンプルプロジェクトはjson-sessionsを使う。
$ ssh root@localhost -p60001
root@xxxxxxx:~# cd /usr/local/voltdb-ent-4.5/examples/json-sessions && ./run.sh
すると、以下のようなAAが出て起動すればOK。
http:/loclhost:8899にアクセス(ポートフォワーディングが異なる場合はそのように)すれば起動状態が確認できる。
とりあえず、ここまで
VoltDBはNode/PHP/Rubyなどのクライアントもあるようなので、アプリから接続して実行するところまでやってみたい。 今回はDockerの勉強の方が優先だったので…。
今までこういうことをやろうと思うとVirtualBoxだったり別でVPS用意したりで結構手間がかかるものだけど、楽に軽量に生成と起動ができるのは素晴らしいですね。 特に同じ設定で複数インスタンスを作る場合は圧倒的に効率が良さそう。
現場からは以上です。