资料
Cassandra WIki
Cassandra是一个高扩展性, 一致性, 分布式, Key-value 式的数据库. Cassandra 从Dynamo和Google的BigTable学习了一些分布式系统的技术. 和Dynamo一样, Cassandra具有一致性. 如BigTable, Cassandra 又提供了基于列族的数据模型, 比一般的Key-value系统更加丰富.
Facebook 在2008年的时候把Cassandra开源了, 由Avinash Lakshman( Dynamo的一个作者)和Prashant Malik( Facebook 工程师)设计. 在很多方面, Cassandra跟 Dynamo和 BigTable 是很类似, 紧密的. Facebook 已经在使用 Cassandra了, 但Cassandra 仍然还在持续的开发当中
General Infomation
- Cassandra 官方网址 ( 下载, BUG 跟踪, 联系邮件等)
- 文章与使用展示
- Cassandra data model 描述
- Cassandra 使用限制: 哪些地方不适合使用 Cassandra
开发人员与操作人员手册
- Gettting Started
- 客户端访问Cassandra的方式
- 管理工具
- 使用例子
- FAQ
- 关于计数器
- Secondary Indexes
高级配置
- 数据库配置
- 创建一个多节点集群
- 操作
- 内存阀值和其它的性能调节
- 硬件
- 大数据集的设计
客户端开发API文档
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
一般来说学习某样东西, 我们都是找个范例照着范例先做一遍. 之后再可以通过资料, 自己使用积累去学习掌握它. 对于Cassandra, 我也不例外. 先按照官方文档部署一个简单的单节点服务出来玩一玩.
Step 0: 安装JAVA环境, JDK 1.6或以上
Step 1: 下载 Cassandra
- 最新版本下载地址
- Windows 版的 cassandra就是一个压缩包, 解压到你想安装的路径即可
Step 2: 基本配置
配置文件存放在<安装目录>/conf下面
Step 2.1: 配置cassandra需要使用的文件夹, 打开conf/cassandra.yaml文件
data_file_directories 修改成Windows下你想存放数据的路径, 如就存放到<安装目录>/data文件夹下. 注意前面的-是不能省略的
data_file_directories:
commitlog_directory 修改成Windows下你想存放Log的路径
saved_caches_directory 修改成Windwos下你想存放cache的路径
Step 2.2: 打开conf/log4j-server.properties
log4j.appender.R.File=<安装目录>/system.log
确保这些文件夹是存在的, 且有写入的权限.
Step 2.3: 配置内存( 可选)
cassandra默认分配内存是基于你物理内存大小的, 为物理内存的1/4到1/2. 如果你想自己配置内存使用大小, 可以打开 conf/cassandra-env.sh, 修改如下配置
#MAX_HEAP_SIZE="4G" #HEAP_NEWSIZE="800M"
一般经验来说, 你应该设置HEAP_NEWSIZE为MAX_HEAP_SIZE的1/4大小. 如果你遇到OutOfMemory的异常或者大量的GCs, 你可以尝试调大这两个值来解决这个问题.
Step 3: 启动 cassandra
到BIN目录下双击启动批处理文件cassandra.bat
只要把窗口关掉就可以关闭cassandra服务了
Step 4: 使用 cassandra-cli
cassandra-cli是一个与cassandra服务交互的命令行的接口, 可以执行创建KEYSPACE, COLUMN FAMILY, 擦入数据, 查询数据等操作.
运行在BIN目录下的cassandra-cli.bat就可以打开客户端了。cassanra-cli.bat是支持参数的,在命令行下,中转到BIN目录,运行
cassandra-cli.bat help;
可以查看如何传入参数,比如cassandra.yaml的默认配置的rpc的IP与端口分别是localhost, 9160。如果你把localhost改成本机的IP(非127.0.0.1),那你双击cassandra-cli.bat就无法连接到服务器了。这时你可以使用connect IP/PORT来连接到正确的IP与端口上。你也可以写一个批
处理:
cassandra-cli.bat -h 16.158.81.54 -u lewis -pw lewis
启动后可以看到如下信息:
注意cli的命令是以;为结束的.
Connected to: "Test Cluster" on 127.0.0.1/9160 Welcome to Cassandra CLI version 1.0.7 Type 'help;' or '?' for help. Type 'quit;' or 'exit;' to quit. [default@unknown]
可以使用HELP;命令查看所有支持的命令, 以及命令的使用方法. 如:
HELP GET;
接下来我们就来操作一下cassandra数据库
首先, 创建一个Keyspace:
create keyspace DEMO; 回车执行
第二步, 指名要操作的keyspace
use DEMO; 回车执行
第三步, 创建一个叫Users的列族
[default@DEMO]create column family Users ... with key_validation_class = 'UTF8Type' ... and comparator = 'UTF8Type' ... and default_validation_class = 'UTF8Type';
好了, 接下来你就可以往里面存数据了
[default@DEMO] set Users[1234][name] = scott; Value inserted. Elapsed time: 10 msec(s). [default@DEMO] set Users[1234][password] = tiger; Value inserted. Elapsed time: 10 msec(s).
取数据如下:
[default@DEMO] get Users[1234]; => (column=name, value=scott, timestamp=1350769161684000) => (column=password, value=tiger, timestamp=1350769245191000) Returned 2 results. Elapsed time: 67 msec(s).
配置多节点集群
刚才的步骤只是建立了一个单节点的cassandra. 其实也是一个cassandra集群, 但只包含一个节点而已. 通过添加更多的节点, 就可以让它成为一个多节点的集群了.
权限管理
- 内部权限管理:使用帐号与密码登录
- 对象权限管理:基于GRANT/REVOKE范例
- 客户端到节点的访问权限管理:使用SSL
内部权限管理
- 配置内部权限管理
1. 修改cassandra.yaml中authentication相关的两个配置节点,分别修改为
authenticator: org.apache.cassandra.auth.PasswordAuthenticator
authorizer:org.apache.cassandra.auth.CassandraAuthorizer
2. 配置dse_auth keyspace的replication: 你需要配置dse_auth keyspace的replication factor来预防一个潜在的登录问题。不要使用默认的replication factor: 1,如果你配置使用了如下权限设置:
authenticator: com.datastax.bdp.cassandra.auth.KerberosAuthenticator
authenticator: com.datastax.bdp.cassandra.auth.PasswordAuthenticator
authorizer: com.datastax.bdp.cassandra.auth.CassandraAuthorizer
在一个多节点的集群中,使用默认值1会阻止用户登录当存储用户数据的节点DOWN了的话。所以与dse_auth相关的Query,cassandra都是使用QUORUM的一致性级别的。
修改步骤如下:
1. 打开cassandra.yaml
2. 修改auth_replication_options 节点,如:
Example for SimpleStrategy:
auth_replication_options:
replication_factor: 3
Example for NetworkTopologyStrategy:
auth_replication_options:
DC1: 3
DC2: 3
3. 如果修改已经存在的集群要注意以下几点:确保每个节点中的配置文件都有修改,重启所有节点,在每个节点上运行nodetool repair
NOTE:
Cassandra: dse_auth.users
PasswordAuthenticator: hashed passwords 存于 dse_auth.credentials
CassandraAuthorizer: 权限存于dse_auth.permissions
-
使用Authentication
当你完成以上的权限相关配置后就不能使用空的用户名与密码使用CQLSH或者CASSSANDRA-CLI了。可以先使用超级用户来登录 :<客户端启动命令> -u cassandra -p cassandra.
这里要注意的是,你需要用HELP命令查看一下确实的命令使用方式,官方文档虽然说是-u -p, 但实际上我使用下来是-u -pw, -p是-port。因为cassandra版本在不段的更新中,每次更新你都应该去看一下安装目录里的NEWS,看一下有哪些变动。
-u cassandra -pw cassandra 是默认的超级管理员。
- 更改超级用户的密码
1. 创建一个新的超级用户,用户名不能再是cassandra
2. 登录这个超级用户
3. 更新cassandra用户的密码,并不要再使用这个帐户了
4. 取消掉cassandra用户超级管理员的角色
- 权限相关命令: 配置好之后,就可以使用相关命令来使用权限管理
cassandra配置集群还是比较简单的。步骤如下:
- 打开cassandra.yaml文件,
- 修改cluster_name:'Test Cluster'为你想要的集群名字
- 去掉屏蔽num_tokens:256,这个值是计算负载用的,比如你集群有2个节点,都配的是256,那么两台机子就是平分压力各为50%
- 修改seeds:"localhost"为本机IP,这个seeds是个什么东西呢?比方说,一个数据中心有很多机器,你需要一个或多个来做分配,统筹,与其它数据中心交互,这个就是seed。IP与IP之间用逗号隔开。
- 把listen_address等默认配置为localhost的全改为本机IP
- 修改endpoint_snith为PropertyFileSnith
- 打开conf\cassandra-topology.properties
配置IP与数据中心的关系,如我的两台机器为
- 确保所有cassandra节点配置都做了如上的更新操作,并删除所有节点中data目录, commitlog目录中的文件
这里我为什么会说要把commitlog里的文件也删除呢?主要是这些文件中存了当前节点的token。有的人贪快可能会想,既然配置一样,把cassandra整个文件夹COPY到另一台机器上,启动就建好集群了。这时你启动多个COPY的服务之后,会发现有节点加入不了的,并可以在运行窗口看到关于token相同的错误,原因就是commitlog中存了token而且好像不能更新,cassandra官方给出的结决办法就是把commitlog中的文件删除,之后当cassandra服务启动的时候就会重新生成token了。
- 逐一启动cassandra服务,节点就会自动加入集群了
- 使用BIN目录下的nodetool并加参数 status查看建立集群是否成功
cassandra cluster加节点
cassandra比较智能,需要做的工作不多。
A:10..1 单节点cluster
B:10..2 需要加入的新机器
步骤:
- 首先将A的程序目录都拷贝到B上
- 在B上修改conf/cassandra.yaml,有如下要点:
- cluster_name 这个是自动发现集群的,必须和A一致
- initial_token 这个各节点不同,cassandra share bin里有个caculater可以算的
- seeds 种子服务器,设为A
- listen_address, rpc_address 设为B ip
- 建立数据目录,根据yaml里的来,主要是data和commitlog的目录
- 启动B,观察一段时间,用nodetool status验证集群状态。也可以用nodetool status <keyspace>来查看指定的表空间复制状态
- 集群架好后,两边操作数据,相互验证