Canssandra开始

Install Cassandra

1
2
3
4
5
6
7
sudo mkdir -p /usr/app/cassandra
sudo chown -R $(whoami) /usr/app
cd /usr/app/cassandra
wget http://apache.fayea.com/cassandra/2.1.11/apache-cassandra-2.1.11-bin.tar.gz
tar zxf apache-cassandra-2.1.11-bin.tar.gz
mv apache-cassandra-2.1.11 cassandra-2.1
mkdir data commitlog log saved_caches

启动bin/cassandra -f即可,-f参数的意思是让cassandra服务在前台启动,这样可以各种上日志输出就将直接打印到终端上。

Cassandra集群搭建

我们构建一个有3个节点的cassandra集群,IP分别为:192.168.31.101192.168.31.102192.168.31.103

编辑Cassandra配置文件:conf/cassandra.yaml

endpoint_snitch

1
endpoint_snitch: GossipingPropertyFileSnitch

配置Cassandra集群支持机架感知,推荐产品使用。

listen_address

1
listen_address: 192.168.31.101

rpc_address

1
rpc_address:

(注意:rpc_address:后面的空格也要删除掉)

seeds

1
- seeds: "192.168.31.101,192.168.31.102,192.168.31.103"

Store data

1
2
data_file_directories:
- /usr/app/cassandra/data

Commit log

1
commitlog_directory: /usr/app/cassandra/commitlog

Saved caches

1
saved_caches_directory: /usr/app/cassandra/saved_caches

先配置好一台,再把相同的配置文件和目录复制到其它节点上。在修改相应IP地址即可。之后挨个启动集群,可以看到下面这样的节点连结信息:

1
2
3
4
5
6
INFO  12:33:35 Handshaking version with /192.168.31.102
INFO 12:33:36 No gossip backlog; proceeding
INFO 12:33:36 Node /192.168.31.102 is now part of the cluster
INFO 12:33:36 Netty using native Epoll event loop
INFO 12:33:36 InetAddress /192.168.31.102 is now UP
INFO 12:33:36 Updating topology for /192.168.31.102

CQLSH

创建keyspace

1
CREATE KEYSPACE watch_log WITH replication = {'class': 'NetworkTopologyStrategy', 'dc1': 2 };

cqlsh支持查询中文

默认的cqlsh是可以正常显示中文的,但当你的查询语句里有中文时,就会报错:

1
2
cqlsh:mykeyspace> select * from users where fname = '羊';
'ascii' codec can't decode byte 0xe7 in position 35: ordinal not in range(128)

因为cqlsh是用Python编写的,所以定位是Python对中文支持的问题。这个问题也很好解决,加入以下两行代码即可:

1
2
reload(sys)
sys.setdefaultencoding("utf-8")

加入后代码显示如下:

1
2
3
4
5
6
7
8
9
from glob import glob
from StringIO import StringIO
from uuid import UUID

reload(sys)
sys.setdefaultencoding("utf-8")

description = "CQL Shell for Apache Cassandra"
version = "5.0.1"

一些重要的Cassandra配置

  • cluster_name: 限制只能加入相同名字的集群
  • num_tokens:

系统优化

DataStax 推荐的ulimit设置如下(编辑/etc/security/limits.conf文件,添加):

1
2
3
4
scdata memlock unlimited
scdata nofile 100000
scdata nproc 23768
scdata - as unlimited

使用以下命令使设置马上生效:

1
$ sudo sysctl -p