Blog

Go言語実装 オープンソース 分散ストレージ・システム Torus その実力とは Part 1


アドテク本部の成尾です。

Torus について検証をしているので、数回に分けてご紹介していきたいと思います。
今回は、構築と実際にI/Oがどうなのかベンチ結果までをご紹介していきます。

まず、 Torus は Go言語で実装された etcd という KVS 上で動作する分散ストレージ・システムです。
個人的に特徴をあげるとしたら、ネットワークブロックデバイス(ブロックデバイスをネットワーク経由でマウント可能)が利用できる事です。
Torus のリポジトリを見ると Initial public release が 2016/06/02 となっているので
オープンソースとして公開されてからまだ間もないので、日本語の情報は少ないようですが
バックエンドとして使われている etcd 自体は kubernetes でも使われていたりするためいくつか記事が見つかります。

 

検証環境
弊社プライベートクラウド上で以下インスタンスを作成し行っています。

CPU: 4 Core
Memory: 14 GB
SSD: 128 GB
OS: Ubuntu 16.04.1 LTS

今回は 3台 用意しました。
nario-torus-test01 (10.4.1.114)
nario-torus-test02 (10.4.1.115)
nario-torus-test03 (10.4.1.117)

当初 CentOS 6.8 にて検証を行っていたのですが、ネットワークブロックデバイスをマウントするために nbd というモジュールが必要となり
CentOS 6.8 では kernel のソースからコンパイルできるのですが
バージョンが古く正常にマウントできなかったため Ubuntu を最終的に利用しています。

 

etcd
Version 3 以降が必要だったので etcd-v3.0.7-linux-amd64.tar.gz を利用しました。

今回は検証目的だったので簡易的にシンボリックリンクで設定しています。

 

etcd 設定
各サーバーで以下コマンドにて起動しています
※このまま実行するとフォアグラウンドで動作します。

nario-torus-test01

nario-torus-test02

nario-torus-test03

 

etcd 確認
Cluster 状態の確認

Leader の確認

Member の確認

 

Torus
検証時点最新の torus_v0.1.1_linux_amd64.tar.gz を利用しています。

今回は検証目的だったので簡易的にシンボリックリンクで設定しています。

 

Torus 設定

各サーバーで以下コマンドにて起動しています。
※test01 サーバーのみ初期化コマンドを実行しています。
※このまま実行するとフォアグラウンドで動作します。

nario-torus-test01

nario-torus-test02

nario-torus-test03

 

Torus ボリューム作成

 

ボリュームのマウント

 

Torus 確認

Volumeの確認

Clusterの状態確認

Ringの状態

 

ベンチマーク

Torus 公式には fio での ベンチマーク結果 が掲載されています。
今回は Oracle ORION を利用し
Read 100% Write 0% から Read 20% Write 80% までをローカルディスクとマウントした領域とで比較してみました。

 Torus Maximum Large MBPS
最大データ転送帯域(MB/sec)
Maximum Small IOPS
最大IO回数(IOPS)
Minimum Small Latency
最小応答遅延時間(msec)
read 100% 5889.88 318501 0
read 80% write 20% 437.21 61998 0.02
read 60% write 40% 131.61 25534 0.04
read 40% write 60% 94.8 2548 0.39
read 20% write 80% 74.85 1215 1.63

 

 Local Disk Maximum Large MBPS
最大データ転送帯域(MB/sec)
Maximum Small IOPS
最大IO回数(IOPS)
Minimum Small Latency
最小応答遅延時間(msec)
read 100% 5167.45 318264 0.01
read 80% write 20% 2481.2 44152 0.02
read 60% write 40% 1305.58 22271 0.05
read 40% write 60% 887.68 14995 0.07
read 20% write 80% 665.55 11315 0.09

上記は、複数回実施の中で一番良い結果だけを列挙したものですが
Read 60% Write 40% までであれば Localと変わらないか、ケースによっては良い数値が出ているように見えますね

しかし細かく複数回のデータを見ていくと、Local Disk では安定していますが
Torus 側だと write の割合が増えるにつれて安定しなくなっているのがわかるかと思います。

 Torus 1 回目 2 回目 3 回目
read 100% 268727 293435 307266
read 80% write 20% 61718 61998 58960
read 60% write 40% 25534 1813 885
read 40% write 60% 2548 1894 995
read 20% write 80% 441 1215 884

 

 Local Disk 1 回目 2 回目 3 回目
read 100% 313507 316071 318264
read 80% write 20% 42281 44100 44152
read 60% write 40% 22271 21784 21997
read 40% write 60% 14850 14916 14995
read 20% write 80% 11239 11059 10869

 

今後は条件を変えて更にベンチマークを取ると共に
チューニング、障害試験等々、実用に耐えうるかを深く検証していく予定です。

Author

アバター
nario