概要
・3台のLinux環境(CentOS7)で、Apache Cassandraを試してみます。・クライアントソフトから、SQL風にデータを置いてみたり
・node.jsのプログラムからデータを使ってみたりします。
(参考)
Apache Cassandraのサイト: http://cassandra.apache.org/doc/latest/
NTTPC社のブログ: https://www.nttpc.co.jp/technology/cassandra.html
必要なもの
・CentOS7のLinux環境4台 (最小インストールの標準的な設定で試しています)・インターネット接続
・Apache Cassandraが配布するCassandraパッケージ(リポジトリ)
・(Javaも必要ですが、自動で(=依存関係で)OpenJDKが入ります)
構成
3台のCassandraクラスターです。ここでは、・10.0.0.1
・10.0.0.2
・10.0.0.3
とします。IPアドレスのみで構成しホスト名は利用しません。
3台に違いはありませんが、seedを10.0.0.0.1としました。
1. インストール: 3台共通
作業は、
・リポジトリ追加
・yumでパッケージインストール
・設定ファイルを一つ(3つの値)変更
です。
Linux環境にて、rootで作業します。
1-0. 準備
1-0-1. Firewall設定
・Firewallで、tcpの7000,7001,7199,9042の利用を許可する設定firewall-cmd --zone=public --add-port=7000/tcp --add-port=7001/tcp --add-port=7199/tcp --add-port=9042/tcp --permanent
firewall-cmd --reload
・確認
firewall-cmd --list-all --permanent
以下が追加されていることを確認。
ports: 7000/tcp 7001/tcp 7199/tcp 9042/tcp
1-0-2. SELinux設定
軟弱なことにOFFにします。(参考: http://cassandra.apache.org/doc/4.0/faq/#selinux )
ファイル/etc/selinux/config を以下の一行を編集
SELINUX=disabled
(または、SELINUX=permissive)
とりあえずの作業のために、
setenforce 0
1-1. Apache Cassandraのリポジトリ追加
cat << EOF > /etc/yum.repos.d/cassandra.repo[cassandra]
name=Apache Cassandra
baseurl=https://www.apache.org/dist/cassandra/redhat/311x/
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://www.apache.org/dist/cassandra/KEYS
EOF
1-2. インストール
yum install cassandra1-3. 設定ファイル変更
1ファイルで3箇所(or 4箇所)を変更するだけ。
vi /etc/cassandra/conf/cassandra.yaml
1-3-1. seeds設定
「- seeds: "127.0.0.1" 」を10.0.0.0.1では「- seeds: "10.0.0.0.1" 」
10.0.0.0.2では「- seeds: "10.0.0.0.1,10.0.0.0.2" 」
10.0.0.0.3では「- seeds: "10.0.0.0.1,10.0.0.0.3" 」
1-3-2. listen_address設定
「listen_address: localhost」を、10.0.0.0.1では「listen_address: "10.0.0.0.1"」
10.0.0.0.2では「listen_address: "10.0.0.0.2"」
10.0.0.0.3では「listen_address: "10.0.0.0.3"」
1-3-3. rpc_address設定
「rpc_address: localhost」を、10.0.0.0.1では「rpc_address: "10.0.0.0.1"」
10.0.0.0.2では「rpc_address: "10.0.0.0.2"」
10.0.0.0.3では「rpc_address: "10.0.0.0.3"」
1-3-4. cluster_nameの設定 (おまけ: 変更しなくても大丈夫ですが、お好みで。)
すべてのサーバで同じ「cluster_name: 'Railway Data Cluster'」1-4. cassandraサービスの起動と自動起動設定
service cassandra start
chkconfig cassandra on
1-5. 確認
[root@host1 ~]# nodetool status
Datacenter: datacenter1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
-- Address Load Tokens Owns (effective) Host ID Rack
UN 10.0.0.1 335.18 KiB 256 69.1% 04128023-9ef2-411b-92f8-528278cf54bb rack1
UN 10.0.0.2 294.92 KiB 256 64.6% de517d21-a465-4737-9f35-4ac44884a835 rack1
UN 10.0.0.3 229.48 KiB 256 66.3% ce3013a9-4eab-4c42-812b-e64afcfe05de rack1
期待するIPアドレスの3行の表示が出て、3行の頭が「UN」であること。
2. cqlshクライアントでSQL風の命令でデータ操作してみる。
3台のうちのいずれかの上のcqlshクライアントアプリから、3台のいずれかへ接続
cqlsh 10.0.0.1
(10.0.0.2でも10.0.0.3でもOK)
操作例
[root@host1 ~]# cqlsh 192.168.100.101
Connected to Railway Data Cluster at 192.168.100.101:9042.
[cqlsh 5.0.1 | Cassandra 3.11.4 | CQL spec 3.4.4 | Native protocol v4]
Use HELP for help.
cqlsh>
・railwayというkeyspaceを作成
CREATE KEYSPACE IF NOT EXISTS railway WITH REPLICATION = { 'class': 'SimpleStrategy', 'replication_factor': 2 };
・railwayというkeyspaceを指定
USE railway;
・yamanotelineというtableを作成
CREATE TABLE yamanoteline ( stationname text PRIMARY KEY, location text, jreast int, subway int, other int);
・yamanotelineというtableにデータを3行入れてみる
INSERT INTO yamanoteline ( stationname, location, jreast, subway, other ) VALUES ('Shinagawa', 'Minato', 3, 0, 2);
INSERT INTO yamanoteline ( stationname, location, jreast, subway, other ) VALUES ('Osaki', 'Shinagawa', 2, 0, 1);
INSERT INTO yamanoteline ( stationname, location, jreast, subway, other ) VALUES ('Gotanda', 'Shinagawa', 0, 1, 1);
・yamanotelineというtableのデータを閲覧する
SELECT * FROM yamanoteline;
操作例
cqlsh> use railway;
cqlsh:railway> select * from yamanoteline;
stationname | jreast | location | other | subway
-------------+--------+-----------+-------+--------
Gotanda | 0 | Shinagawa | 1 | 1
Osaki | 2 | Shinagawa | 1 | 0
Shinagawa | 3 | Minato | 2 | 0
(3 rows)
cqlsh:railway>
3. node.jsからcassandraクラスタに格納したデータを利用してみる。
クラスタへ接続できる適当なLinuxサーバにて(もちろん3台のうちのどれかでもOK)
3-1. node.jsをインストール
yum install -y epel-release
yum install -y nodejs npm
3-2. node.js用のcassandra接続ライブラリをインストール
npm install cassandra-driver
3-3. node.jsでcassandraを操作する簡単なプログラムを作って動かしてみる。
プログラム例: nodecas.js
const cassandra = require('cassandra-driver');
const client = new cassandra.Client({ contactPoints: ['192.168.100.101', '192.168.100.102'], keyspace: 'railway', localDataCenter: 'datacenter1' });
client.execute('SELECT stationname, jreast, subway FROM yamanoteline WHERE stationname = ?', [ 'Shinagawa' ])
.then(result => console.log('station=%s, jreast=%s, subway=%s', result.rows[0].stationname, result.rows[0].jreast, result.rows[0].subway))
.then(() => client.shutdown());
実行例
[root@host0 ~]# node nodecas.js
station=Shinagawa, jreast=3, subway=0
[root@host0 ~]#
—
以上
0 件のコメント:
コメントを投稿