分散DBシステム Apache Cassandraの学習

下記サイトを参考

https://www.nttpc.co.jp/technology/cassandra.html

・サーバー構成を次の通り作成

Cassandraのサーバー 2台 (CentOS 7)

ホスト名: cassandra1, cassandra2

2台にした理由は、3台にするとかなりメモリを食うため

vagrantで複数サーバ作成は以下参考にした https://www.yoheim.net/blog.php?q=20170704 https://qiita.com/48hands/items/05c2ad0ea89fe13afd57

Vagrant.configure("2") do |config|
  # The most common configuration options are documented and commented below.
  # For a complete reference, please see the online documentation at
  # https://docs.vagrantup.com.

  # Every Vagrant development environment requires a box. You can search for
  # boxes at https://vagrantcloud.com/search.
  #config.vm.box = "bento/centos-6.8"

  (1..2).each do |no|
    name = "cassandra#{no}"
    config.vm.define name do |node|
      node.vm.box = "centos/7"
      node.vm.hostname = name
      node.vm.network "private_network", ip: "192.168.33.4#{no}"
    end
  end
end

2台が相互に通信できることを確認 f:id:kenji148:20181106192515p:plain

以下の課題が発生 ・sshでログインできるのに、cyberduckに接続できない

cyberduckにログインできたが、ファイルをアップロードできない

仮想マシンで3台分のメモリをくう(1台あたり1G) 見直しが必要

ただ環境作って、とりあえず複数サーバでcassandraに接続したいだけなのに、なかなかさせてくれない・・・

3回はほどvagrant destroyをした。

(1)Cassandra インストールとクラスター作成 vagrant ssh-config f:id:kenji148:20181106193509p:plain

cassandra1 f:id:kenji148:20181106193749p:plain

cassandra2 f:id:kenji148:20181106204927p:plain

以下を2台(cassandra1、cassandra2)のサーバで実施 (下記はcassandra1の例)

①インストールパッケージ取得

②解凍して保存 アップロード先ディレクトリ作成

[vagrant@cassandra1 ~]$ pwd          
/home/vagrant
[vagrant@cassandra1 ~]$ mkdir tmp
[vagrant@cassandra1 ~]$ chmod 777 tmp 

.アップロード 上記tmpにアップロード

・移動先ディレクトリに移動

[vagrant@cassandra1 tmp]$ pwd
/home/vagrant/tmp
[vagrant@cassandra1 tmp]$ ls
apache-cassandra-3.11.3-bin (1).tar.gz
[vagrant@cassandra1 ~]$ sudo chmod 777 /usr/local
[vagrant@cassandra1 ~]$ mv apache-cassandra-3.11.3-bin\ \(1\).tar.gz  /usr/local
[vagrant@cassandra1 ~]$ cd /usr/local

・解凍

[vagrant@cassandra1 local]$ tar -zxvf apache-cassandra-3.11.3-bin\ \(1\).tar.gz       

・解凍後

[vagrant@cassandra1 local]$ pwd
/usr/local
[vagrant@cassandra1 local]$ ls
apache-cassandra-3.11.3                 bin  games    lib    libexec  share
apache-cassandra-3.11.3-bin (1).tar.gz  etc  include  lib64  sbin     src

シンボリックをはる

[vagrant@cassandra1 local]$ ln -s /usr/local/apache-cassandra-3.11.3 /usr/local/cassandra
[vagrant@cassandra1 local]$ ls -ld /usr/local/*cassandra*
drwxrwxr-x. 10 vagrant vagrant      208 Nov  4 02:46 /usr/local/apache-cassandra-3.11.3
-rw-rw-r--.  1 vagrant vagrant 37317433 Nov  4 02:36 /usr/local/apache-cassandra-3.11.3-bin (1).tar.gz
lrwxrwxrwx.  1 vagrant vagrant       34 Nov  4 02:59 /usr/local/cassandra -> /usr/local/apache-cassandra-3.11.3

Javaのインストール

[vagrant@cassandra1 local]$ sudo yum install java

④設定ファイル(cassanra.yaml)の編集 変更前にバックアップ

[vagrant@cassandra1 local]$ cd /usr/local/cassandra//conf
[vagrant@cassandra1 conf]$ cp -p cassandra.yaml cassandra.yaml.bk

sudoにて記載通りrootユーザで変更。
/usr/local/cassandra/conf/cassandra.yaml

⑤Cassandra起動スクリプトの作成 ※Init.dの把握要 Init.dはシンボリックが張られている。初心者にはわからない。

[vagrant@cassandra1 conf]$ cd /etc
[vagrant@cassandra1 etc]$ cd rc.d
[vagrant@cassandra1 rc.d]$ ls
init.d  rc.local  rc0.d  rc1.d  rc2.d  rc3.d  rc4.d  rc5.d  rc6.d
[vagrant@cassandra1 rc.d]$ cd init.d
[vagrant@cassandra1 init.d]$ ls
README  functions  netconsole  network
[vagrant@cassandra1 init.d]$ sudo vi cassandra

下記内容を記載

#!/bin/sh

case "$1" in
  start)
     /usr/local/cassandra/bin/cassandra  -R -p /var/run/cassandra.pid > /dev/null 2>&1
     echo "Start Cassandra"
     ;;
  stop)
     kill `cat /var/run/cassandra.pid`
     echo "Stopped Cassandra"
     ;;
  *)
     echo "Usage: $0 {start|stop}"
     exit 1
esac
exit 0

⑥Cassandra起動 権限の変更要

[root@cassandra1 init.d]# chmod 777 cassandra
[root@cassandra1 init.d]# /etc/init.d/cassandra start
Start Cassandra

⑦起動状態の確認

[root@cassandra1 init.d]# cd /usr/local/cassandra/conf
[root@cassandra1 conf]# /usr/local/cassandra/bin/nodetool status
nodetool: Failed to connect to '127.0.0.1:7199' - ConnectException: 'Connection refused (Connection refused)'.

なぜか繋がらない。全サーバで行わないといけないのか。
もう一つのサーバで上記作業を行っても繋がらない。

でも繋がっている時もある。

^C[root@cassandra1 conf]# /usr/local/cassandra/bin/nodetool status
Datacenter: datacenter1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address        Load       Tokens       Owns (effective)  Host ID                               Rack
UN  192.168.33.41  148.39 KiB  256          100.0%            c2c8a839-7322-4cfc-b84c-a6de3c5ab6b4  rack1
UN  192.168.33.42  114.5 KiB  256          100.0%            3dd12b70-d283-4023-86ff-c34fd1ce13b9  rack1

[root@cassandra1 conf]# /usr/local/cassandra/bin/nodetool status
nodetool: Failed to connect to '127.0.0.1:7199' - ConnectException: 'Connection refused (Connection refused)'.