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.
如果您能从浏览器中访问并显示如下所示,则表示部署已完成。

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

使用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 | *****
我試著發表一下看看。

我已经成功投稿了。

在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