0%

Cassandra on DockerでIoT用データストアを用意する - Part1: Single Nodeインストール

IoT用のデータストアとして使える時系列データベースを調査しています。オープンソースのBluefloodKairosDBや、商用IoTプラットフォームのThingWorxのバックエンドにCassandraが採用されています。

IoTに適した時系列データベース

IoT用の時系列データベースはバックエンドにCassandraやMongoDB、HBaseを使うケースが多いようです。商用だとRealtime.coのBaaSはDynamoDBを、TempoIQは以前TempoDBと呼ばれていましたが、社名を変えエンタープライズ向けのセンサーデータ解析に特化したサービスになりました。

spotify/docker-cassandra

IoT用のデータストアにはCassandraベースだと相性が良さそうな気がするので、DockerにCassandraの学習環境を用意しようと思います。Docker Registry Hubで良さそうなDockerイメージを探します。

いくつか見つかりましたが、LuigiSnakebiteが気に入っているので、SpotifyのDockerイメージを使ってみます。SpotifyではプレイリストのパーソナライゼーションにCassandraを使っています。

CoreOSホスト

CoreOSクラスタの1台にログインします。しばらくログインしないでいるとバージョンが522.4.0に上がっていました。

$ cat /etc/os-release
NAME=CoreOS
ID=coreos
VERSION=522.4.0
VERSION_ID=522.4.0
BUILD_ID=
PRETTY_NAME="CoreOS 522.4.0"
ANSI_COLOR="1;32"
HOME_URL="https://coreos.com/"
BUG_REPORT_URL="https://github.com/coreos/bugs/issues"

Dockerのバージョンは1.3.3です。

$ docker -version
docker version
Client version: 1.3.3
Client API version: 1.15
Go version (client): go1.3.2
Git commit (client): 54d900a
OS/Arch (client): linux/amd64
Server version: 1.3.3
Server API version: 1.15
Go version (server): go1.3.2
Git commit (server): 54d900a

Single Node起動

spotify/docker-cassandraのDockerイメージを使います。最初のSingle Node起動なので、fleetのunitファイルは作成せずに直接docker runで起動します。

$ docker run -d  --name cassandra spotify/cassandra

docker psで起動を確認します。

$ docker ps|head -2
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f955a0d522ce spotify/cassandra:latest "cassandra-singlenod 44 seconds ago Up 44 seconds 7001/tcp, 7199/tcp, 8012/tcp, 9042/tcp, 9160/tcp, 22/tcp, 61621/tcp, 7000/tcp cassandra cassandra

docker execからコンテナのbashを起動して、Cassandraの動作確認をします。

$ docker exec -it cassandra /bin/bash

cassandra-cliの確認

Cassandraクライアントのcassandra-cliを起動します。Cassandraのバージョンは2.0.10です。

$ cassandra-cli
Connected to: "Test Cluster" on 127.0.0.1/9160
Welcome to Cassandra CLI version 2.0.10

The CLI is deprecated and will be removed in Cassandra 3.0. Consider migrating to cqlsh.
CQL is fully backwards compatible with Thrift data; see http://www.datastax.com/dev/blog/thrift-to-cql3

Type 'help;' or '?' for help.
Type 'quit;' or 'exit;' to quit.

[default@unknown]

RDBのデータベース相当のキースペースを確認します。

[default@unknown] show keyspaces;
...
Keyspace: system_traces:
Replication Strategy: org.apache.cassandra.locator.SimpleStrategy
Durable Writes: true
Options: [replication_factor:2]
Column Families:

cqlshの確認

SQLライクに問い合わせができるCQLの確認をします。

$ cqlsh
Connected to Test Cluster at localhost:9160.
[cqlsh 4.1.1 | Cassandra 2.0.10 | CQL spec 3.1.1 | Thrift protocol 19.39.0]
Use HELP for help.
cqlsh>

キースペースを確認します。

cqlsh> DESCRIBE keyspaces;

system system_traces

CQLにはCREATE TABLEで定義できるテーブルがあります。

cqlsh> DESCRIBE tables;

Keyspace system
---------------
IndexInfo hints range_xfers sstable_activity
NodeIdInfo local schema_columnfamilies
batchlog paxos schema_columns
compaction_history peer_events schema_keyspaces
compactions_in_progress peers schema_triggers

Keyspace system_traces
----------------------
events sessions