【Ubuntu】DockerによるScyllaDBのインストール

【Ubuntu】DockerによるScyllaDBのインストール サーバー

「今後伸びてくるNoSQLデータベースとは?」
「Apache Cassandraより速いデータベースを探している」
「Amazon DynamoDB(クラウド)のコストを削減したい」

このような場合には、ScyllaDBがオススメです。
この記事では、ScyllaDBについて解説しています。

本記事の内容

  • ScyllaDBとは?
  • DockerによるScyllaDBのインストール
  • DockerによるScyllaDBの動作確認

それでは、上記に沿って解説していきます。

ScyllaDBとは?

ScyllaDBは、NoSQLデータベースです。
技術的な特徴としては、シェアードナッシング方式を採用しています。

そして、以下のデータベースとAPI互換性があります。

  • Apache Cassandra
  • Amazon DynamoDB

API互換性があることにより、同じように利用できます。
つまり、同じコマンド、同じドライバーが使えます。

これは利用する側からすると、非常に嬉しいことです。
ScyllaDBを利用する際に、学習コストを大幅に下げることができます。

知名度が劣るScyllaDBにとっては、これは有効な戦略でしょう。
それに加えて、ScyllaDBは両データベースより速いのです。

Apache Cassandraの場合だと、開発言語自体が異なります。

データベース言語
Apache CassandraJava
ScyllaDBC++

そりゃ、JavaよりはC++の方が高速ですよね。
さらには、速さだけではなく、ディスクの利用効率でもScyllaDBが優ります。

それらのことから、ScyllaDBはコスト削減に有効です。
その意味でも、ScyllaDBは将来有望なデータベースと言えます。

以上、ScyllaDBについて説明しました。
次は、DockerによるScyllaDBのインストールを説明します。

DockerによるScyllaDBのインストール

ScyllaDBには、複数のインストール方法が用意されています。
Ubuntuの場合であれば、次の方法が利用可能です。

  • パッケージ
  • ソース
  • Docker

今回は、ScyllaDBの動作確認を目的にしています。
もっと言うと、Apache Cassandraとの類似性を確認しておきたいです。

そのため、今回はDockerを用いてScyllaDBをインストールします。
公式でも、検証ではDockerを利用することを推奨しています。

では、DockerによるScyllaDBを説明していきます。
大前提として、Dockerはインストール済みとしておきます。

dockerコマンドを利用する際には、一つ注意点があります。
dockerコマンド実行時には、都度「sudo」を付けないといけません。

これが面倒だと言う場合は、dockerグループにユーザーを追加します。
ただし、セキュリテイ的にはその分だけ隙きが出来るのは理解しておきましょう。

$ sudo usermod -aG docker ユーザー名

準備が整ったら、次のコマンドでScyllaDBをインストール(イメージの作成)します。
コンテナの起動まで一気に行います。

docker run --name コンテナ名 -d scylladb/scylla

上記コマンドを実行した結果は、以下。

$ docker run --name my_scylla -d scylladb/scylla 
Unable to find image 'scylladb/scylla:latest' locally 
latest: Pulling from scylladb/scylla 
e0b25ef51634: Pull complete 
f3dccb91f93f: Pull complete 
Digest: sha256:c666dc96a6d7feae84cd86f8982e2e52fd3f45dc19d3d5bbc2700f4f48c675c3 
Status: Downloaded newer image for scylladb/scylla:latest 
437592d5bcab7c4202c0dbac11987aea3d0cb8205ef04a1c83eddf4f3b249235

これで、ScyllaDBのインストールは完了です。

以上、DockerによるScyllaDBのインストールを説明しました。
次は、DockerによるScyllaDBの動作確認を説明します。

DockerによるScyllaDBの動作確認

イメージの作成に加えて、コンテナの作成・起動まで完了している状態です。
そのため、ScyllaDBの動作確認ができる状態と言えます。

ScyllaDBは、Apache Cassandraと同じようにアクセスできます。
Apache Cassandraでは、以下のユーティリティでアクセスします。

  • nodetool
  • cqlsh

以下では、それぞれのユーティリティについて確認していきます。

nodetool

ヘルプは、次のコマンドで確認できます。

nodetool help

Dockerを経由するため、次のようなコマンドで確認することになります。

$ docker exec -it my_scylla nodetool help 
usage: nodetool [(-p <port> | --port <port>)] 
        [(-u <username> | --username <username>)] 
        [(-pw <password> | --password <password>)] 
        [(-pwf <passwordFilePath> | --password-file <passwordFilePath>)] 
        [(-h <host> | --host <host>)] <command> [<args>] 
The most commonly used nodetool commands are: 
    bootstrap                  Monitor/manage node's bootstrap process 
    checkAndRepairCdcStreams   Checks that CDC streams reflect current cluster topology and regenerates them if not. 
Warning: DO NOT use this while performing other administrative tasks, like bootstrapping or decommissioning a node. 
    cleanup                    Triggers the immediate cleanup of keys no longer belonging to a node. By default, clean all keyspaces 
    clearsnapshot              Remove the snapshot with the given name from the given keyspaces. If no snapshotName is specified we will remove all snapshots 
    compact                    Force a (major) compaction on one or more tables or user-defined compaction on given SSTables 
    compactionhistory          Print history of compaction 
    compactionstats            Print statistics on compactions 
    decommission               Decommission the *node I am connecting to* 
    describecluster            Print the name, snitch, partitioner and schema version of a cluster 
    describering               Shows the token ranges info of a given keyspace 
    disableautocompaction      Disable autocompaction for the given keyspace and table 
    disablebackup              Disable incremental backup 
    disablebinary              Disable native transport (binary protocol) 
    disablegossip              Disable gossip (effectively marking the node down) 
    drain                      Drain the node (stop accepting writes and flush all tables) 
    enableautocompaction       Enable autocompaction for the given keyspace and table 
    enablebackup               Enable incremental backup 
    enablebinary               Reenable native transport (binary protocol) 
    enablegossip               Reenable gossip 
    flush                      Flush one or more tables 
    getendpoints               Print the end points that owns the key 
    getlogginglevels           Get the runtime logging levels 
    getsstables                Print the sstable filenames that own the key 
    gettraceprobability        Print the current trace probability value 
    gossipinfo                 Shows the gossip information for the cluster 
    help                       Display help information 
    info                       Print node information (uptime, load, ...) 
    listsnapshots              Lists all the snapshots along with the size on disk and true size. 
    move                       Move node on the token ring to a new token 
    netstats                   Print network information on provided host (connecting node by default) 
    proxyhistograms            Print statistic histograms for network operations 
    rebuild                    Rebuild data by streaming from other nodes (similarly to bootstrap) 
    refresh                    Load newly placed SSTables to the system without restart 
    removenode                 Show status of current node removal, force completion of pending removal or remove provided ID 
    repair                     Repair one or more tables 
    resetlocalschema           Reset node's local schema and resync 
    ring                       Print information about the token ring 
    scrub                      Scrub (rebuild sstables for) one or more tables 
    setlogginglevel            Set the log level threshold for a given class. If both class and level are empty/null, it will reset to the initial configuration 
    settraceprobability        Sets the probability for tracing any given request to value. 0 disables, 1 enables for all requests, 0 is the default 
    snapshot                   Take a snapshot of specified keyspaces or a snapshot of the specified table 
    sstableinfo                Information about sstables per keyspace/table 
    status                     Print cluster information (state, load, IDs, ...) 
    statusbackup               Status of incremental backup 
    statusbinary               Status of native transport (binary protocol) 
    statusgossip               Status of gossip 
    stop                       Stop compaction 
    tablehistograms            Print statistic histograms for a given table 
    tablestats                 Print statistics on tables 
    toppartitions              Sample and print the most active partitions for a given column family 
    upgradesstables            Rewrite sstables (for the requested tables) that are not on the current version (thus upgrading them to said current version) 
    version                    Print cassandra version 
    viewbuildstatus            Show progress of a materialized view build 
See 'nodetool help <command>' for more information on a specific command.

各機能も同じように実行します。
Apache Cassandraのバージョン確認は、次のコマンドとなります。

$ docker exec -it my_scylla nodetool version 
ReleaseVersion: 3.0.8

cqlsh

cqlshについては、次の記事で詳細を説明しています。
ただし、Dockerでインストールした場合にエラーは関係ありません。

cqlshは、次のコマンドで起動できます。

cqlsh

Dockerを経由するため、次のようなコマンドで起動します。

docker exec -it コンテナ名 cqlsh

実行した結果、次のように表示されます。

$ docker exec -it my_scylla cqlsh 
Connected to  at 172.17.0.2:9042. 
[cqlsh 5.0.1 | Cassandra 3.0.8 | CQL spec 3.3.1 | Native protocol v4] 
Use HELP for help. 
cqlsh>

cqlshが起動できたら、テーブル作成などが可能です。
次の記事では、cqlshを利用したテーブル作成・データ登録を説明しています。

ScyllaDBの場合でも、Apache Cassandraと全く同じ要領で作業可能です。

キースペース作成

CREATE KEYSPACE scylla_sample_keyspace  
WITH REPLICATION =  { 'class' : 'SimpleStrategy', 'replication_factor' : 1 };

キースペース一覧確認

cqlsh> DESCRIBE keyspaces; 
scylla_sample_keyspace  system                         system_traces 
system_schema           system_distributed_everywhere 
system_auth             system_distributed

キースペース接続

cqlsh> USE scylla_sample_keyspace; 
cqlsh:scylla_sample_keyspace>

テーブル作成

cqlsh:scylla_sample_keyspace> CREATE TABLE user (id int PRIMARY KEY, age int, name text); 
cqlsh:scylla_sample_keyspace>

テーブル一覧確認

cqlsh:scylla_sample_keyspace> DESCRIBE tables; 
user 
cqlsh:scylla_sample_keyspace>

テーブル定義確認

cqlsh:scylla_sample_keyspace> DESCRIBE user; 
CREATE TABLE scylla_sample_keyspace.user ( 
    id int PRIMARY KEY, 
    age int, 
    name text 
) WITH bloom_filter_fp_chance = 0.01 
    AND caching = {'keys': 'ALL', 'rows_per_partition': 'ALL'} 
    AND comment = '' 
    AND compaction = {'class': 'SizeTieredCompactionStrategy'} 
    AND compression = {'sstable_compression': 'org.apache.cassandra.io.compress.LZ4Compressor'} 
    AND crc_check_chance = 1.0 
    AND dclocal_read_repair_chance = 0.0 
    AND default_time_to_live = 0 
    AND gc_grace_seconds = 864000 
    AND max_index_interval = 2048 
    AND memtable_flush_period_in_ms = 0 
    AND min_index_interval = 128 
    AND read_repair_chance = 0.0 
    AND speculative_retry = '99.0PERCENTILE';

INSERT(データ登録)

cqlsh:scylla_sample_keyspace> INSERT INTO user (id, age, name) VALUES (1, 20, '山田太郎'); 
cqlsh:scylla_sample_keyspace> INSERT INTO user (id, age, name) VALUES (2, 30, '佐藤次郎'); 
cqlsh:scylla_sample_keyspace> INSERT INTO user (id, age, name) VALUES (3, 40, '高橋三郎');

SELECT(データ抽出)

cqlsh:scylla_sample_keyspace> SELECT * FROM user; 
 id | age | name 
----+-----+---------- 
  1 |  20 | 山田太郎 
  2 |  30 | 佐藤次郎 
  3 |  40 | 高橋三郎 
(3 rows)

UPDATE(データ更新)

cqlsh:scylla_sample_keyspace> UPDATE user SET name = '山田さん' WHERE id = 1;  

DELETE(データ削除)

cqlsh:scylla_sample_keyspace> DELETE FROM user WHERE id = 3; 
cqlsh:scylla_sample_keyspace> SELECT * FROM user; 
 id | age | name 
----+-----+---------- 
  1 |  20 | 山田さん 
  2 |  30 | 佐藤次郎 
(2 rows)

以上、DockerによるScyllaDBの動作確認を説明しました。

タイトルとURLをコピーしました