LoginSignup
7
7

More than 5 years have passed since last update.

Cassandra のインストールとデモアプリケーション twissandra の実行

Last updated at Posted at 2016-01-24

Cassandraの勉強のため、ローカルに Cassandra をインストールして、Twitter like なデモアプリケーション twissandra をインストール&実行しました。

環境

  • Vagrant 1.7.4
  • Ubuntu 14.04.3 LTS

Ubuntuは下記のVagrantfileを使って作っています。

# -*- mode: ruby -*-
# vi: set ft=ruby :

VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "ubuntu/trusty64"
  config.vm.hostname = "cassandra"
  config.vm.network "private_network", ip: "192.168.10.10"
end

OpenJDK 1.8 のインストール

Cassandra の実行にはJavaが必要なので OpenJDKをインストールします。

$ vagrant up
$ vagrant ssh
vagrant@cassandra:~$ sudo add-apt-repository -y ppa:openjdk-r/ppa
vagrant@cassandra:~$ sudo apt-get update
vagrant@cassandra:~$ sudo apt-get install -y openjdk-8-jdk
vagrant@cassandra:~$ echo 'JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64"' | sudo tee -a /etc/environment
vagrant@cassandra:~$ source /etc/environment

Cassandra のインストールと実行

Cassandra をインストールします。

vagrant@cassandra:~$ echo 'deb http://www.apache.org/dist/cassandra/debian 21x main' | sudo tee -a /etc/apt/sources.list.d/cassandra.list
vagrant@cassandra:~$ echo 'deb-src http://www.apache.org/dist/cassandra/debian 21x main' | sudo tee -a /etc/apt/sources.list.d/cassandra.list
vagrant@cassandra:~$ sudo apt-get update
vagrant@cassandra:~$ gpg --keyserver pgp.mit.edu --recv-keys 749D6EEC0353B12C
vagrant@cassandra:~$ gpg --export --armor 749D6EEC0353B12C | sudo apt-key add -
vagrant@cassandra:~$ sudo apt-get update
vagrant@cassandra:~$ sudo apt-get install -y cassandra

Ubuntu において Cassandra 2.x が正常起動しない問題があるので下記のようにします。

vagrant@cassandra:~$ sudo chmod 750 /var/run/cassandra
vagrant@cassandra:~$ sudo sed -i 's/CMD_PATT=.*/CMD_PATT="cassandra"/' /etc/init.d/cassandra

また、デフォルト設定では Out of memory: Kill process が発生したため、以下のように小さなメモリ使用量を割り当てます。

vagrant@cassandra:~$ sudo sed -i 's/^#HEAP_NEWSIZE=.*/HEAP_NEWSIZE="40M"/' /etc/cassandra/cassandra-env.sh  | grep HEAP_NEWSIZE
vagrant@cassandra:~$ sudo sed -i 's/^#MAX_HEAP_SIZE=.*/MAX_HEAP_SIZE="100M"/' /etc/cassandra/cassandra-env.sh  | grep MAX_HEAP_SIZE

Cassandra を起動して、動作確認をします。

vagrant@cassandra:~$ sudo service cassandra start
vagrant@cassandra:~$ cqlsh
Connected to Test Cluster at 127.0.0.1:9042.
[cqlsh 5.0.1 | Cassandra 2.1.12 | CQL spec 3.2.1 | Native protocol v3]
Use HELP for help.
cqlsh> DESCRIBE KEYSPACES;

system_traces  system

Python(virtualenv) のインストール

twissandra はPythonで書かれているため、Python(virtualenv)をインストールします。

vagrant@cassandra:~$ sudo apt-get install -y git python-setuptools
vagrant@cassandra:~$ sudo apt-get install -y cython
vagrant@cassandra:~$ sudo easy_install -U virtualenv
vagrant@cassandra:~$ virtualenv twiss
vagrant@cassandra:~$ source twiss/bin/activate
(twiss) vagrant@cassandra:~$ easy_install -U pip

twissandra のデプロイ

ソースコードをGithubから取得し、デプロイします。

(twiss) vagrant@cassandra:~$ git clone git://github.com/twissandra/twissandra.git
(twiss) vagrant@cassandra:~$ sed -i "s/cassandra-driver/cassandra-driver==2.7.2/" twissandra/requirements.txt
(twiss) vagrant@cassandra:~$ pip install -U -r twissandra/requirements.txt

最後にキースペースとテーブル、初期データを作成して、アプリケーションを起動します。

(twiss) vagrant@cassandra:~$ cd twissandra/
(twiss) vagrant@cassandra:~/twissandra$ python manage.py sync_cassandra
All done!
(twiss) vagrant@cassandra:~/twissandra$ python manage.py fake_data 10 100
created user
...
(twiss) vagrant@cassandra:~/twissandra$ python manage.py runserver 0.0.0.0:8080
Validating models...

0 errors found
January 24, 2016 - 07:49:03
Django version 1.5.5, using settings 'twissandra.settings'
Development server is running at http://0.0.0.0:8080/
Quit the server with CONTROL-C.

ブラウザからアクセスし、下記のように表示されればデプロイ完了です。

Screen Shot 2016-01-24 at 22.49.43.png

動作確認

右上の Login をクリックして、新規アカウントを作成します。

Screen Shot 2016-01-24 at 23.02.25.png

cqlsh でユーザが Cassandra に保存されていることを確認します。

vagrant@cassandra:~$ cqlsh
Connected to Test Cluster at 127.0.0.1:9042.
[cqlsh 5.0.1 | Cassandra 2.1.12 | CQL spec 3.2.1 | Native protocol v3]
Use HELP for help.
cqlsh> use twissandra;
cqlsh:twissandra> select * from users where username='noralife';

 username | password
----------+----------
 noralife |   *****

試しに投稿してみます。

Screen Shot 2016-01-24 at 23.02.44.png

投稿できました。

Screen_Shot_2016-01-24_at_23_04_40.png

同様に cqlsh で Cassandra に保存されていることを確認します。

cqlsh:twissandra> select * from userline where username='noralife';

 username | time                                 | tweet_id
----------+--------------------------------------+--------------------------------------
 noralife | 2a23ed90-c2a3-11e5-ae0c-080027f7e0ef | 49481cf4-25cd-4ab4-9b8f-7ea07fc40bc1

cqlsh:twissandra> select * from tweets where tweet_id=49481cf4-25cd-4ab4-9b8f-7ea07fc40bc1;

 tweet_id                             | body             | username
--------------------------------------+------------------+----------
 49481cf4-25cd-4ab4-9b8f-7ea07fc40bc1 | Hello Twissandra | noralife
7
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
7