Install Cassandra
1 | sudo mkdir -p /usr/app/cassandra |
启动bin/cassandra -f
即可,-f
参数的意思是让cassandra服务在前台启动,这样可以各种上日志输出就将直接打印到终端上。
Cassandra集群搭建
我们构建一个有3个节点的cassandra集群,IP分别为:192.168.31.101
、192.168.31.102
、192.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 | data_file_directories: |
Commit log:
1 | commitlog_directory: /usr/app/cassandra/commitlog |
Saved caches:
1 | saved_caches_directory: /usr/app/cassandra/saved_caches |
先配置好一台,再把相同的配置文件和目录复制到其它节点上。在修改相应IP地址即可。之后挨个启动集群,可以看到下面这样的节点连结信息:
1 | INFO 12:33:35 Handshaking version with /192.168.31.102 |
CQLSH
创建keyspace
1 | CREATE KEYSPACE watch_log WITH replication = {'class': 'NetworkTopologyStrategy', 'dc1': 2 }; |
cqlsh支持查询中文
默认的cqlsh
是可以正常显示中文的,但当你的查询语句里有中文时,就会报错:
1 | cqlsh:mykeyspace> select * from users where fname = '羊'; |
因为cqlsh
是用Python
编写的,所以定位是Python
对中文支持的问题。这个问题也很好解决,加入以下两行代码即可:
1 | reload(sys) |
加入后代码显示如下:
1 | from glob import glob |
一些重要的Cassandra配置
- cluster_name: 限制只能加入相同名字的集群
- num_tokens:
系统优化
DataStax 推荐的ulimit
设置如下(编辑/etc/security/limits.conf
文件,添加):
1 | scdata memlock unlimited |
使用以下命令使设置马上生效:
1 | $ sudo sysctl -p |