アーカイブ

Flareを使う(データ分散度合評価編)

当ブログをご覧の皆様こんにちは。さくらインターネット研究所の大久保です。
今回はFlareにおけるデータの分散度合の評価を行いましたので、そちらのご紹介をしたいと思います。

Flareのデータ分散について

以前のブログでご紹介しましたが、Flareでは、1レコード毎にパーティションと呼ばれるサーバのグループに分散します。あるレコードが格納されるパーティションは、そのキーのハッシュ値から決定されます。なお、各パーティション内にスレーブサーバを設置することでデータの冗長化を行うことができます。

概念図のみ以下再掲します。

今回はこのパーティションを多数用意し、どのようにデータが分散するかを評価します。

評価条件

今回の評価条件は以下のとおりです。

サーバ構成 インデックスサーバ 1台
プロキシサーバ 1台
ストレージサーバ 10台(10パーティション)
合計 12台
テストデータ 件数 100万件
キー名 test00000000〜test00999999
01234567890123456789012345678901234567890123456789
(50bytes)

評価環境

今回使用したサーバの一覧は以下のとおりです。ストレージサーバは、1台1パーティション(つまり全てマスター)になるようにしました。

サーバ番号 IPアドレス 役割
#1 192.168.13.41 インデックスサーバ
#2 192.168.13.42 プロキシサーバ
#3 192.168.13.43 ストレージサーバ パーティション0 マスター
#4 192.168.13.44 ストレージサーバ パーティション1 マスター
#5 192.168.13.45 ストレージサーバ パーティション2 マスター
#6 192.168.13.46 ストレージサーバ パーティション3 マスター
#7 192.168.13.47 ストレージサーバ パーティション4 マスター
#8 192.168.13.48 ストレージサーバ パーティション5 マスター
#9 192.168.13.49 ストレージサーバ パーティション6 マスター
#10 192.168.13.50 ストレージサーバ パーティション7 マスター
#11 192.168.13.51 ストレージサーバ パーティション8 マスター
#12 192.168.13.52 ストレージサーバ パーティション9 マスター

構成図は以下のとおりです。

サーバの設定

各サーバ上で起動するFlareの設定は以下の通りです。

  • インデックスサーバの設定
    data-dir = /home/admin/flare
    log-facility = local0
    server-name = 192.168.13.41
    
    monitor-threshold=3
    monitor-interval=1
    monitor-read-timeout=1000
    
  • ストレージサーバ、プロキシサーバの設定
    ※ server-nameは各サーバのIPアドレスに置き換える。
    
    data-dir = /home/admin/flare
    log-facility = local0
    storage-bucket-size = 16777216
    index-server-name = 192.168.13.41
    server-name = 192.168.13.42
    

サーバを起動した後、インデックスサーバにてストレージサーバの役割設定を行います。

% telnet localhost 12120
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
node role 192.168.13.43 12121 master 1 0
node state 192.168.13.43 12121 active
node role 192.168.13.44 12121 master 1 1
node state 192.168.13.44 12121 active
node role 192.168.13.45 12121 master 1 2
node state 192.168.13.45 12121 active
node role 192.168.13.46 12121 master 1 3
node state 192.168.13.46 12121 active
node role 192.168.13.47 12121 master 1 4
node state 192.168.13.47 12121 active
node role 192.168.13.48 12121 master 1 5
node state 192.168.13.48 12121 active
node role 192.168.13.49 12121 master 1 6
node state 192.168.13.49 12121 active
node role 192.168.13.50 12121 master 1 7
node state 192.168.13.50 12121 active
node role 192.168.13.51 12121 master 1 8
node state 192.168.13.51 12121 active
node role 192.168.13.52 12121 master 1 9
node state 192.168.13.52 12121 active

役割設定を行うと以下のようになります。

$ ./flare-status.pl
                        role     state   balance  partition
------------------------------------------------------------
 192.168.13.42:12121    proxy    active     0        -1
 192.168.13.43:12121    master   active     1         0
 192.168.13.44:12121    master   active     1         1
 192.168.13.45:12121    master   active     1         2
 192.168.13.46:12121    master   active     1         3
 192.168.13.47:12121    master   active     1         4
 192.168.13.48:12121    master   active     1         5
 192.168.13.49:12121    master   active     1         6
 192.168.13.50:12121    master   active     1         7
 192.168.13.51:12121    master   active     1         8
 192.168.13.52:12121    master   active     1         9

flare-status.plは、インデックスサーバのstats nodesコマンドの出力結果を整形して表示する独自のスクリプトです。

その後、プロキシサーバからテストデータを投入します。プログラムについては前回のブログをご覧下さい。

テスト結果

データの投入後、10台のストレージサーバのレコード数は以下のようになりました。

サーバ番号 パーティション番号 レコード数
#3 0 126210
#4 1 122471
#5 2 107676
#6 3 101425
#7 4 142079
#8 5 164229
#9 6 72134
#10 7 1101
#11 8 147599
#12 9 15076
合計 1000000

グラフ化すると以下のようになります。

若干偏りが生じていることがわかります。

サーバを100台に増やした場合

さらにサーバを増やして合計100台の構成で試してみました。レコード数も10倍に増やしております。評価条件を以下に示します。

サーバ構成 インデックスサーバ 1台
プロキシサーバ 1台
ストレージサーバ 98台(98パーティション)
合計 100台
テストデータ 件数 1000万件
キー名 test00000000〜test09999999
01234567890123456789012345678901234567890123456789
(50bytes)

テストした結果、先頭の32パーティションにしかデータが格納されず、後の66パーティションには全くデータが格納されませんでした。グラフのみ以下に示しますが、データが格納された先頭の32パーティションのみを見てもかなりの偏りが生じていることがわかります。

(先頭32パーティションのみ表示)

まとめ

今回テストに使用したキーのフォーマットにも依存するのかもしれませんが、サーバが増えた場合に均等にデータが分散しないことがわかりました。データが分散しないと、ディスク容量やアクセス負荷が特定サーバに偏る可能性が高く、サーバを増やしても特定サーバがボトルネックになり、分散KVSの特長であるスケーラビリティをいかすことができません。

この事象についてFlareの作者であるグリー藤本さんにお聞きしたところ、Flareに実装されているハッシュアルゴリズムに起因するとのことで、改善をお願いしているところです。今後進展がありましたらご紹介したいと思います。

4 comments to Flareを使う(データ分散度合評価編)

  • […] This post was mentioned on Twitter by equinox79, Naoto MATSUMOTO and 田中邦裕, 鷲北 賢. 鷲北 賢 said: さくらインターネット研究所ブログ Flareを使う(データ分散度合評価編) http://research.sakura.ad.jp/2010/07/26/f […]

  • flyhigh209

    大久保様:
    インタネットで”Flareを使う(データ分散度合評価編)”を読みました。
    該当評価は2010年の文書なので、Flareについて、現状を聞きたいです。

    ”サーバが増えた場合に均等にデータが分散しないこと”該当問題について、現在の新しいバージョンflareに未だ存在していますか?

    高翔
    2012/1/16

  • ohkubo

    高翔様

    当時バージョン1.0.9にて評価を行っておりましたが、現在1.0.12がリリースされているようですね。
    残念ながら、それ以降のバージョンにて評価を実施していないため、解消されているのかどうなのか
    不明です。もし、機会がありましたら再度評価を行ってみたいと思います。

    ありがとうございました。

  • Superb infoimatron here, ol’e chap; keep burning the midnight oil.

Leave a Reply

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

  

  

  

エラー: si-captcha.phpプラグインによると、PHPにGD image supportが見当たりません!

PHPにGD image supportが有効になっていない理由については、サーバ管理者にお問合せください。

エラー: si-captcha.phpプラグインによると、PHPにimagepng機能が見当たりません!

PHPにimagepng機能が有効になっていない理由については、サーバ管理者にお問合せください。