Cassandra 的安装和 Twissandra 演示应用的运行

为了学习Cassandra,我在本地安装了Cassandra,并安装并运行了一个类似Twitter的演示应用程序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

另外,由于发生了内存不足导致进程被终止的默认设置,我们将分配较小的内存使用量,如下所示。

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 (virtualenv) ,因为它是用Python编写的。

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

确认操作

点击右上方的“登录”,创建一个新账户。

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

在Cassandra中,使用cqlsh同样可以确认存储了相同的数据。

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
广告
将在 10 秒后关闭
bannerAds