ScyllaDBとは
ScyllaDB(スキュラDB)とは、Apache CassandraをJAVAからC++でリプレースし、Cassandraより10倍以上高速であり、その速さを利用してノード数を1/5~1/10に圧縮できる異次元のデータベースです(スケールアップファーストのクラスター設計思想)。Cassandraとは互換性があり、開発ではCassandraのドライバ―やCQL、各種コネクター、CLIなどをそのまま利用できます。
ここでは、本格的なScyllaDB体験の入口として、マルチノードクラスタ―の構築手順をご紹介します。
事前準備
最小構成として3台のサーバが必要です。
筆者は、次のように構成しています。
- 2core/8GB ✖ 3
- Unbuntu16.04
クラウドを利用する場合、次のようなポートを開けておく必要があります。
ScyllaDBのパッケージインストール
パッケージのインストールは、「ScyllaDBのスタンドアロンクラスタ―を構築してみる」を参照してください。パッケージインストール及びScyllaDBセットアップ(scylla_setup)までの手順は、まったく同じです。
パッケージをインストールしてからクラスタ―の環境を設定します。
/etc/scylla/scylla.yamlの設定
ScyllaDBのクラスタ―構築に必要なパラメータを簡略に説明します。
- cluster_name
任意クラスタ―名を指定する。 - seeds
必ず、1台以上のシードノードを指定する。シードノードは、他のノードのステータスに関する情報が集まるノードであり、他のノードのステータスを取得するためのハブノードでもある。シードノードが存在しないと初期のクラスター形成ができない。シードノードの一時的な不在でも致命的にはならないが、不在の状態でクラスタ―のメンテナンスは出来ない。事実上のレポジトリノードの役割を果たしているとみたほうがいい。商用環境の実装時には、冗長性を考慮するべきである。 - listen_address
クラスタ―内で他のノードと通信を行うために使用するIPアドレス - auto_bootstrap
falseにする。デフォルトでは、trueになっている。 - endpoint_snitch
GossipingPropertyFileSnitch。実稼働環境にはこのスニッチを推奨。/etc/scylla/cassandra-rackdc.propertiesファイルに定義されているデータセンターとラック配置の情報を参照する。 - rpc_address
クライアント接続のためのIPアドレス
では、各サーバ上で設定を行います。筆者は、次のような構成にしています。
- 10.0.0.6(seed)
- 10.0.0.11
- 10.0.0.5(seed)
10.0.0.6(seed)の設定
cluster_name: 'Scylla_cluster_demo'
seeds: "10.0.0.6,10.0.0.5 "
endpoint_snitch: GossipingPropertyFileSnitch
listen_address: 10.0.0.6
rpc_address: 10.0.0.6
/etc/scylla/cassandra-rackdc.properties
dc=DC1
rack=RAC1
prefer_local=true
10.0.0.11の設定
cluster_name: 'Scylla_cluster_demo'
seeds: "10.0.0.6,10.0.0.5"
endpoint_snitch: GossipingPropertyFileSnitch
listen_address: 10.0.0.11
rpc_address: 10.0.0.11
/etc/scylla/cassandra-rackdc.properties
dc=DC1
rack=RAC1
prefer_local=true
10.0.0.5の設定
cluster_name: 'Scylla_cluster_demo'
seeds: "10.0.0.6,10.0.0.5"
endpoint_snitch: GossipingPropertyFileSnitch
listen_address: 10.0.0.5
rpc_address: 10.0.0.5
/etc/scylla/cassandra-rackdc.properties
dc=DC1
rack=RAC1
prefer_local=true
ScyllaDBクラスターの起動
各サーバでScyllaDBのサービスをストップします。パッケージインストール時にプロセスが起動状態になっているはずです。
$ sudo systemctl stop scylla-server
$ sudo systemctl status scylla-server
各サーバで初期データを削除します。
$ sudo rm -rf /var/lib/scylla/data/system/*
各シードノードを先に起動にします。クラスターの初期形成時には、最初に起動したノードがリングの起点になります。
$ sudo systemctl start scylla-server
$ sudo systemctl status scylla-server
クラスタ―のステータスを確認します。2ノードが起動しているはずです。
$ nodetool status
Datacenter: DC1
===============
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
-- Address Load Tokens Owns Host ID Rack
UN 10.0.0.5 811.88 KB 256 ? 2713d751-7592-441d-b13c-616bd9c263d9 RAC1
UN 10.0.0.6 786.95 KB 256 ? 4e0d3ebc-43cc-489b-bb24-1cf17252e5bf RAC1
シードノードの起動を確認してから、ワーカーノード(10.0.0.11)を起動します。
$ sudo systemctl start scylla-server
$ sudo systemctl status scylla-server
クラスタ―のステータスを確認します。
$ nodetool status
Datacenter: DC1
===============
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
-- Address Load Tokens Owns Host ID Rack
UN 10.0.0.5 811.88 KB 256 ? 2713d751-7592-441d-b13c-616bd9c263d9 RAC1
UN 10.0.0.6 786.95 KB 256 ? 4e0d3ebc-43cc-489b-bb24-1cf17252e5bf RAC1
UJ 10.0.0.11 ? 256 ? aa4cbe9f-cf79-415e-9e13-3ebeeb30f889 RAC1
ScyllaDBへの接続
CQL(Cassandra Query Language)で接続します。
$ cqlsh [IP Address]
Connected to at 127.0.0.1:9042.
[cqlsh 5.0.1 | Cassandra 3.0.8 | CQL spec 3.3.1 | Native protocol v4]
Use HELP for help.
cqlsh>
cqlsh> help
Documented shell commands:
===========================
CAPTURE CLS COPY DESCRIBE EXPAND LOGIN SERIAL SOURCE UNICODE
CLEAR CONSISTENCY DESC EXIT HELP PAGING SHOW TRACING
CQL help topics:
================
AGGREGATES CREATE_KEYSPACE DROP_TRIGGER TEXT
ALTER_KEYSPACE CREATE_MATERIALIZED_VIEW DROP_TYPE TIME
ALTER_MATERIALIZED_VIEW CREATE_ROLE DROP_USER TIMESTAMP
ALTER_TABLE CREATE_TABLE FUNCTIONS TRUNCATE
ALTER_TYPE CREATE_TRIGGER GRANT TYPES
ALTER_USER CREATE_TYPE INSERT UPDATE
APPLY CREATE_USER INSERT_JSON USE
ASCII DATE INT UUID
BATCH DELETE JSON
BEGIN DROP_AGGREGATE KEYWORDS
BLOB DROP_COLUMNFAMILY LIST_PERMISSIONS
BOOLEAN DROP_FUNCTION LIST_ROLES
COUNTER DROP_INDEX LIST_USERS
CREATE_AGGREGATE DROP_KEYSPACE PERMISSIONS
CREATE_COLUMNFAMILY DROP_MATERIALIZED_VIEW REVOKE
CREATE_FUNCTION DROP_ROLE SELECT
CREATE_INDEX DROP_TABLE SELECT_JSON
cqlsh> exit;
さらに、CQLを試すなら、こちら参照してください。
http://cassandra.apache.org/doc/latest/cql/index.html
まとめ
ScyllaDBのマルチノードクラスター構築の手順も、ScyllaDBセットアップ(scylla_setup)を除いては、Apache Cassandraと同じです。筆者は、クラスタ―の構築や運用においてノード数という悩みの種を一掃してくれるScyllaDBのスケールアップファーストのアーキテクチャーに注目しています。マルチノードクラスターの構築が出来たということは、その体験が目前ということですね。