読者です 読者をやめる 読者になる 読者になる

多趣味なやつの雑談

六本木で働くITエンジニアが内容を絞らずいろいろ書きます

分散型NoSQLのAerospikeを触ってみようぜ!(導入編)

NoSQL

今回は 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/
f:id:eva-hashimoto:20151222164254p:plain
どのクラスタを見たいのか?というダイアログが初期ではでます。
今回の場合は192.168.56.101(localhost)ですが入力してもノードが立ち上がってないのでエラーになります。

ノードを立ち上げてみましょう

まずはNode1のみを立ち上げてみる

[node1_amc]# service aerospike start

今度はクラスタを指定すると管理画面が表示されます。
かっこいい〜
f:id:eva-hashimoto:20151222165156p:plain

引き続きnode2を立ち上げて管理画面を見てみるとジョインしたことがわかります。
ノードが追加されるまでは10秒くらいかかってそうです。
この時にデータが入っている状態でシャーディングなど起きたらもっと時間がかかると思いますが、今回は試しませんw
f:id:eva-hashimoto:20151222165503p:plain

最後にNode3を立ち上げてみる
f:id:eva-hashimoto:20151222165907p:plain
無事3台によるクラスタ構築がおわりました。

namespaceの領域を増やしてみる

aerospikeはDBでいうところのスキーマみたいにnamespaceによる管理ができます。
namespace毎に各ノードのメモリ量など設定ファイルに記載できますので
サーバスペックが違った場合でも増減管理がやりやすい特徴があると思います。
今回のノードにはtestというnamespaceで128MBの領域を用意しました。
f:id:eva-hashimoto:20151222170143p:plain

ではnode2だけ領域を増やしてみたいと思います。

namespace test {
  	replication-factor 2
  	memory-size 256M  # 128M -> 256MB
  	default-ttl 30d
  	storage-engine memory
  }

再起動してみる

[node2]# service aerospike restart

すぐに落ちたことを認識しました
f:id:eva-hashimoto:20151222170526p:plain

そしてnode2が再度認識されたらちゃんとnamespace内のメモリ量も増えてました!
f:id:eva-hashimoto:20151222170645p:plain
今回は仕様についての確認は行いませんが後ほどフェールバックの動きやシャーディング動作を検証してみたいと思います。
実運用や各サービス特性にマッチしていれば採用できるポテンシャルは十分にありそうです。(まだテストしてないけどw)

さて次はデータ入れて検証遊んでみようと思います。