share facebook facebook2 twitter menu hatena pocket slack

2014.07.10 THU

既存のNoSQL型データベースより10倍高速をうたう「Aerospike」をAWS上に構築してみた

廣瀬 一海

WRITTEN BY廣瀬 一海

はじめまして、デプロイ王子こと廣瀬一海(@kazumihirose)です。

はじめに

既存のNoSQL型データベースより10倍高速をうたう「Aerospike」、オープンソースで公開

Couchbase serverに惚れ込んでガッツリと使い込んできた僕としては、もちろんこの製品を意識しないわけがありません。
以前までは、有償ライセンスもしくは体験版ライセンスが必要だったAerospikeですが、この度サーバがGNU AGPLとして公開された事を機にAWS EC2(VPC)上にクラスタを構築してみる事にしました。
今回公開されたのは、AerospikeのCommunity Edition(CE)版バージョン3.3.5。

準備

とりあえず、対応するディストーションを準備しましょう、Debianやubuntu大好き人間なので、今回はubuntu 14.04 server PVを準備しました。

  • Redhat 6
  • Ubuntu 12.04+
  • Debian 6
  • Debian 7
  • Linux

ダウンロード

いつもの様にVPCの上にEC2を起動したら、sshでログインしましょう。
ログインしたら、とりあえずサイトからダウンロードしちゃってください。

Serverダウンロード先サイト

Aerospike Management Console CE ダウンロード先サイト

ダウンロードできたら、サクっとdpkgでインストールです。serverとtoolsどちらも入れてしまいましょう。

</p>

<h1>tar zxvf aerospike-server-community-3.3.5-ubuntu12.04.tgz</h1>

<p>aerospike-server-community-3.3.5-ubuntu12.04/
aerospike-server-community-3.3.5-ubuntu12.04/license.txt
aerospike-server-community-3.3.5-ubuntu12.04/aerospike-tools-3.2.13.ubuntu12.04.x86_64.deb
aerospike-server-community-3.3.5-ubuntu12.04/aerospike-server-community-3.3.5.ubuntu12.04.x86_64.deb</p>

<h1>cd aerospike-server-community-3.3.5-ubuntu12.04</h1>

<h1>dpkg -i aerospike-server-community-3.3.5.ubuntu12.04.x86_64.deb</h1>

<p>Selecting previously unselected package aerospike-server-community.
(Reading database ... 51050 files and directories currently installed.)
Preparing to unpack aerospike-server-community-3.3.5.ubuntu12.04.x86_64.deb ...
Unpacking aerospike-server-community (3.3.5-1) ...
Setting up aerospike-server-community (3.3.5-1) ...
Processing triggers for ureadahead (0.100.0-16) ...</p>

<h1>dpkg -i aerospike-tools-3.2.13.ubuntu12.04.x86_64.deb</h1>

<p>Selecting previously unselected package aerospike-tools.
(Reading database ... 51101 files and directories currently installed.)
Preparing to unpack aerospike-tools-3.2.13.ubuntu12.04.x86_64.deb ...
Unpacking aerospike-tools (3.2.13) ...
Setting up aerospike-tools (3.2.13) ...
Installing /opt/aerospike
Writing /usr/local/lib/python2.7/dist-packages/aerospike.pth
Adding python path /opt/aerospike/lib/python
#

管理コンソールも忘れずに・・・依存関係から以下のパッケージが必要でした。

apt-get install gcc python-dev

依存関係のパッケージインストールが終わったら、管理コンソールも入れちゃいましょう。

</p>

<h1>dpkg -i aerospike-amc-community-3.4.3.all.x86_64.deb</h1>

<p>(Reading database ... 54955 files and directories currently installed.)
Preparing to unpack aerospike-amc-community-3.4.3.all.x86_64.deb ...
Successfully Uninstalled AMC
Unpacking aerospike-amc-community (3.4.3) over (3.4.3) ...
Setting up aerospike-amc-community (3.4.3) ...
amc/
amc/amc/
amc/amc/bin/
amc/amc/bin/amc_rpm.sh
....
amc/amc/config/
amc/amc/config/amc.cfg
amc/amc/config/gunicorn_config.py
amc/README
amc/install
/tmp/tmpgH2dhe/simple.c:1:6: warning: function declaration isn’t a prototype [-Wstrict-prototypes]
 void foo(){}
      ^
Linking /opt/amc/server/setups/greenlet/greenlet-0.4.1/build/lib.linux-x86_64-2.7/greenlet.so to /opt/amc/server/setups/greenlet/greenlet-0.4.1/greenlet.so
Successfully installed AMC.
#

なんか、エラー出ているけど・・・気になりますが、管理コンソールなのであとから考える事にしました。

設定

/etc/aerospike.confは以下の様な感じで設定、本来Aerospikeはマルチキャストで起動したノードを自動検出し、ハートビートのやりとりを行います。
VPC上ではマルチキャスト通らないので、デフォルトのコンフィグを元に、mesh通信にして、初期起動したNode1とのハートビートの設定を行います。
この辺りはCircularとか、メッシュ構成をもう少し何か方法考えたい所ですが、後回しにします。

root@node1:/etc/aerospike# cat aerospike.conf</p>

<h1>Aerospike database configuration file.</h1>

<h1>This stanza must come first.</h1>

<p>service {
    user root
    group root
    paxos-single-replica-limit 1 # Number of nodes where the replica count is automatically reduced to 1.
    pidfile /var/run/aerospike/asd.pid
    service-threads 4
    transaction-queues 4
    transaction-threads-per-queue 4
    proto-fd-max 15000
}</p>

<p>logging {
    # Log file must be an absolute path.
    file /var/log/aerospike/aerospike.log {
        context any info
    }
}</p>

<p>network {
    service {
        address any
        port 3000
    }</p>

<pre><code>heartbeat {
</code></pre>

<h1>mode multicast</h1>

<h1>address 239.1.99.222</h1>

<h1>port 9918</h1>

<pre><code>    # To use unicast-mesh heartbeats, comment out the 3 lines above and
    # use the following 4 lines instead.
    mode mesh
    port 3002
    mesh-address 一番最初に起動するノードのIP
    mesh-port 3002

    interval 150
    timeout 10
}

fabric {
    port 3001
}

info {
    port 3003
}
</code></pre>

<p>}</p>

<p>namespace test {
    replication-factor 2
    memory-size 4G
    default-ttl 30d # 30 days, use 0 to never expire/evict.</p>

<pre><code>storage-engine memory
</code></pre>

<p>}</p>

<h1>namespace bar {</h1>

<h1>replication-factor 2</h1>

<h1>memory-size 4G</h1>

<h1>default-ttl 30d # 30 days, use 0 to never expire/evict.</h1>

<h1>storage-engine memory</h1>

<pre><code># To use file storage backing, comment out the line above and use the
# following lines instead.
</code></pre>

<h1>storage-engine device {</h1>

<h1>file /opt/aerospike/data/bar.dat</h1>

<h1>filesize 16G</h1>

<h1>data-in-memory true # Store data in memory in addition to file.</h1>

<h1>}</h1>

<h1>}</h1>

<p>

Node1の試験起動

初回起動時にはカーネルパラメーターを調整するみたいですね。

</p>

<h1>/etc/init.d/aerospike start</h1>

<ul>
<li>Start aerospike:  asd
kernel.shmall too low, setting to 4G pages
kernel.shmall = 4294967296
kernel.shmmax too low, setting to 1GB
kernel.shmmax = 1073741824
[ OK ]

rc.dへの登録

うまく起動できたら、自動起動するようにしましょう、各ディストロに合わせて、適宜行ってください。

</p>

<h1>update-rc.d aerospike defaults</h1>

<p>update-rc.d: warning: /etc/init.d/aerospike missing LSB keyword 'default-stop'</p>

<p>Adding system startup for /etc/init.d/aerospike ...
   /etc/rc0.d/K20aerospike -> ../init.d/aerospike
   /etc/rc1.d/K20aerospike -> ../init.d/aerospike
   /etc/rc6.d/K20aerospike -> ../init.d/aerospike
   /etc/rc2.d/S20aerospike -> ../init.d/aerospike
   /etc/rc3.d/S20aerospike -> ../init.d/aerospike
   /etc/rc4.d/S20aerospike -> ../init.d/aerospike
   /etc/rc5.d/S20aerospike -> ../init.d/aerospike

Security Groupsの調整

コンフィグで使っているポートはサブネットの中で相互に通信できるように許可しておきましょう。今回は以下のポートをオープンしました。

  • TCP 3000
  • TCP 3001
  • TCP 3002
  • TCP 3003

Node2以降の起動

Node2以降の起動は楽なものです、以下の手順での作業になります。

  1. スナップショットを取る
  2. とったスナップショットイメージからの起動を台数分繰り返す

クラスタステータスの確認

各インスタンスの起動が終わったら、ちゃんとジョインしているか動作の確認をしてみましょう。
いずれかのNodeから、以下のコマンドでステータスを確認します。

root@ip-192-168-200-21:/etc/aerospike# asmonitor -e info</p>

<p>Enter help for help</p>

<p>4 hosts in cluster: 192.168.200.21:3000,192.168.200.7:3000,192.168.200.8:3000,192.168.200.9:3000
===NODES===
2014-06-26 13:30:27.204616
Sorting by IP, in Ascending order:
ip:port           Build   Cluster      Cluster   Free   Free   Migrates              Node         Principal   Replicated    Sys
                      .      Size   Visibility   Disk    Mem          .                ID                ID      Objects   Free
                      .         .            .    pct    pct          .                 .                 .            .    Mem
192.168.200.21    3.3.5         4         true      0    100      (0,0)   BB9214F0B829406   BB9E706DC091A06      0.000 M     97
192.168.200.7     3.3.5         4         true      0    100      (0,0)   BB99952456C0B06   BB9E706DC091A06      0.000 M     97
192.168.200.8     3.3.5         4         true      0    100      (0,0)   BB9D9E98DAE9706   BB9E706DC091A06      0.000 M     97
192.168.200.9     3.3.5         4         true      0    100      (0,0)   BB9E706DC091A06   BB9E706DC091A06      0.000 M     97
Number of nodes displayed: 4</p>

<p>===NAMESPACE===
Total (unique) objects in cluster for test : 0.000 M
Note: Total (unique) objects is an under estimate if migrations are in progress.</p>

<p>ip/namespace           Avail   Evicted   Objects     Repl     Stop   Used   Used     Used   Used    hwm   hwm
                         Pct   Objects         .   Factor   Writes   Disk   Disk      Mem    Mem   Disk   Mem
                           .         .         .        .        .      .      %        .      %      .     .
192.168.200.7/test       n/a         0   0.000 M        2    false    n/a    n/a   0.00 B      0     50    60
192.168.200.8/test       n/a         0   0.000 M        2    false    n/a    n/a   0.00 B      0     50    60
192.168.200.21/test      n/a         0   0.000 M        2    false    n/a    n/a   0.00 B      0     50    60
192.168.200.9/test       n/a         0   0.000 M        2    false    n/a    n/a   0.00 B      0     50    60
Number of rows displayed: 4
root@ip-192-168-200-21:/etc/aerospike#

終わりに

ひとまずガーッと構築だけしちゃったので、次はマネジメントコンソールと実際のパフォーマンステストを行ってみたいと思います。

元記事はこちら

廣瀬 一海

廣瀬 一海