分散型NoSQLのAerospikeを触ってみようぜ!(導入編)
今回は Speee Advent Calendar 2015 - Qiita 22日目です。
昨日の記事はTei1988さんのPebble Watchでmrubyを試す(まだ動かせて無いよ編) - Qiitaでした。
Aerospikeとは?
前から気になってた分散型NoSQLのミドルウェアだったんですが有料版しかなかったので、なかなか試すことができない状態でした。しかし最近OSS化されたのでお手軽に試すことができるようになりました。
詳しい紹介はWEB+DB PRESS Vol.87|技術評論社で紹介されてます !
特徴としてはトランザクションを備えつつ高速な処理を実現しスケールが楽にできるらしい
ということでアド業界では注目されておりすでに導入している企業も多いようです
スマホ広告向けソリューションツール「F.O.X」、ミドルウェア「Aerospike」を採用し、広告効果測定におけるデータ基盤を強化 | CyberZ|スマートフォン広告マーケティング事業
今回の記事ではスループットのテストしませんので他のブログや自身で確認してください
インストール
Aerospikeはノードサーバと管理サーバ(amc)の2種がありますので個別で手順を載せます。
環境
VirtualBox
CentOS 6.7 x64(minimal)
- 192.168.56.101 node1 + amc
- 192.168.56.102 node2
- 192.168.56.103 node3
必要なパッケージのインストール
[node1_amc]# yum install wget gcc python python-devel libffi-devel
AeroSpikeのnodeインストール
各Nodeサーバにインストールしましょう
[node1_amc]# wget -O aerospike.tgz 'http://aerospike.com/download/server/latest/artifact/el6' [node1_amc]# tar -xvf aerospike.tgz [node1_amc]# cd aerospike-server-community-3.7.0.2-el6 [node1_amc]# ./asinstall # will install the .rpm packages
クラスタ設定
設定ファイルはここに用意されてます
/etc/aerospike/aerospike.conf
クラスタは大きく分けてブロードキャストとメッシュ(Nodeを指定)の方法が用意されてますが、昨今のクラウドサービスではブロードキャスト通信ができないのでメッシュによる設定をやってみようと思います。
今回は3台あるのでnode1を軸にnode2,node3をクラスタにジョインさせる構築をしたいと思います。
node1 (192.168.56.101)
service { user root group root paxos-single-replica-limit 1 pidfile /var/run/aerospike/asd.pid service-threads 4 transaction-queues 4 transaction-threads-per-queue 4 proto-fd-max 15000 } logging { file /var/log/aerospike/aerospike.log { context any info } } network { service { address 192.168.56.101 port 3000 } heartbeat { mode mesh port 3002 address 192.168.56.101 mesh-seed-address-port 192.168.56.101 3002 # 自身をメッシュの軸にする interval 250 timeout 10 } fabric { port 3001 } info { port 3003 } } namespace test { replication-factor 2 memory-size 128M default-ttl 30d storage-engine memory }
Node2(192.168.56.102)
service { user root group root paxos-single-replica-limit 1 pidfile /var/run/aerospike/asd.pid service-threads 4 transaction-queues 4 transaction-threads-per-queue 4 proto-fd-max 15000 } logging { file /var/log/aerospike/aerospike.log { context any info } } network { service { address 192.168.56.102 port 3000 } heartbeat { mode mesh port 3002 address 192.168.56.102 mesh-seed-address-port 192.168.56.101 3002 interval 250 timeout 10 } fabric { port 3001 } info { port 3003 } } namespace test { replication-factor 2 memory-size 128M default-ttl 30d storage-engine memory }
Node3(192.168.56.103)
service { user root group root paxos-single-replica-limit 1 pidfile /var/run/aerospike/asd.pid service-threads 4 transaction-queues 4 transaction-threads-per-queue 4 proto-fd-max 15000 } logging { file /var/log/aerospike/aerospike.log { context any info } } network { service { address 192.168.56.103 port 3000 } heartbeat { mode mesh port 3002 address 192.168.56.103 mesh-seed-address-port 192.168.56.101 3002 interval 250 timeout 10 } fabric { port 3001 } info { port 3003 } } namespace test { replication-factor 2 memory-size 128M default-ttl 30d storage-engine memory }
起動は後ほど!!
管理サーバ(AMC)のインストール
aerospikeが標準で用意している管理ソフトウェアの見た目(だけではない)がいいのでそれもインストールしたいと思います。
基本的には本家のインストール手順をやればいいです
Install on Red Hat and Centos | Aerospike Management Console Manual | Aerospike
pipのインストール
[node1_amc]# wget https://bootstrap.pypa.io/get-pip.py [node1_amc]# python get-pip.py [node1_amc]# pip install markupsafe [node1_amc]# pip install paramiko [node1_amc]# pip install ecdsa [node1_amc]# pip install pycrypto [node1_amc]# pip install bcrypt
AMCのインストール
本家サイトからダウンロードCommunity版をダウンロード
執筆時点では3.6.4でした
[node1_amc]# rpm -ivh aerospike-amc-community-3.6.4-el5.x86_64.rpm ・・・・・ You may check greenlet compilation output in /tmp/greenlet.log and delete it if all is OK building setproctitle... You may check setproctitle compilation output in /tmp/setproctitle.log and delete it if all is OK Copied /opt/amc/config/ to /etc/amc/ Successfully installed AMC.
まずは管理サーバを起動させます
[node1_amc]# service amc start
Webインターフェースが用意されてるのでアクセスしてみましょう!
http://192.168.56.101:8081/
どのクラスタを見たいのか?というダイアログが初期ではでます。
今回の場合は192.168.56.101(localhost)ですが入力してもノードが立ち上がってないのでエラーになります。
ノードを立ち上げてみましょう
まずはNode1のみを立ち上げてみる
[node1_amc]# service aerospike start
今度はクラスタを指定すると管理画面が表示されます。
かっこいい〜
引き続きnode2を立ち上げて管理画面を見てみるとジョインしたことがわかります。
ノードが追加されるまでは10秒くらいかかってそうです。
この時にデータが入っている状態でシャーディングなど起きたらもっと時間がかかると思いますが、今回は試しませんw
最後にNode3を立ち上げてみる
無事3台によるクラスタ構築がおわりました。
namespaceの領域を増やしてみる
aerospikeはDBでいうところのスキーマみたいにnamespaceによる管理ができます。
namespace毎に各ノードのメモリ量など設定ファイルに記載できますので
サーバスペックが違った場合でも増減管理がやりやすい特徴があると思います。
今回のノードにはtestというnamespaceで128MBの領域を用意しました。
ではnode2だけ領域を増やしてみたいと思います。
namespace test { replication-factor 2 memory-size 256M # 128M -> 256MB default-ttl 30d storage-engine memory }
再起動してみる
[node2]# service aerospike restart
すぐに落ちたことを認識しました
そしてnode2が再度認識されたらちゃんとnamespace内のメモリ量も増えてました!
今回は仕様についての確認は行いませんが後ほどフェールバックの動きやシャーディング動作を検証してみたいと思います。
実運用や各サービス特性にマッチしていれば採用できるポテンシャルは十分にありそうです。(まだテストしてないけどw)
さて次はデータ入れて検証遊んでみようと思います。