8. Cassandra 的操作¶
在此,对 Cassandra 的操作方法进行说明。本文使用【表1. Cassandra连接信息设定例子】来记述以下说明。
【表1. Cassandra连接信息设定例子】
集群名
IMBox Cluster
主机IP地址
localhost
主机端口号
9160
认证设定的有效化
false
键空间
default
8.1. 键空间的生成方法¶
启动 Cassandra 。
确认 Cassandra 已启动,并启动cassandra-cli。
- OS是Windows时,双击<%CASSANDRA_HOME%/bin/cassandra-cli.bat>。
- OS是Linux时,使用下述命令启动。
/usr/local/cassandra/bin/cassandra-cli启动控制台后,请输入下述命令。
connect localhost/9160;请确认连接已成功,并输入下述命令。
create keyspace default;显示以下信息,可确认键空间“default”的生成已成功。
... schemas agree across the cluster
8.2. 键空间的生成方法(有认证设定时)¶
对 Cassandra 中在以下条件下生成键空间的步骤进行介绍。
- 连接用户名 : aoyagi
- 密码 : aoyagi_pwd
- 键空间名 : imbox_keyspace
在连接认证设定 (passwd.properties)中添加密码。
admin=admin_pwd user=user_pwd aoyagi=aoyagi_pwd在访问权设定 (access.properties)中添加aoyagi可访问的键空间。
# The magical '<modify-keyspaces>' property lists users who can modify the # list of keyspaces: all users will be able to view the list of keyspaces. <modify-keyspaces>=admin # Access to Keyspace 'default' default.<rw>=admin default.<ro>=user # Access to all ColumnFamily default.*.<rw>=admin default.*.<ro>=user # Access to Keyspace 'imbox_keyspace' imbox_keyspace.<rw>=aoyagi imbox_keyspace.<ro>=user # Access to all ColumnFamily imbox_keyspace.*.<rw>=aoyagi imbox_keyspace.*.<ro>=user警告
使用了认证设定时,无法生成已在access.properties中设定的键空间以外键空间。启动 Cassandra 。
接下来,指定认证信息并启动cassandra-cli。
OS是Windows时,启动命令提示,并执行下述命令。
%CASSANDRA_HOME%/bin/cassandra-cli -u aoyagi -pw aoyagi_pwdOS是Linux时,使用下述命令启动。
/usr/local/cassandra/bin/cassandra-cli -u aoyagi -pw aoyagi_pwd注解
关于认证信息的指定方法,请参照“连接认证的确认方法”。确认连接已成功,并输入下述命令,生成“imbox_keyspace”。
create keyspace imbox_keyspace;显示以下信息,可确认键空间“imbox_keyspace”已被添加。
... schemas agree across the cluster注解
构筑集群并要在多个Cassandra上生成键空间时,可在种子节点的Cassandra上生成键空间后通过执行nodetool repair命令在其他节点上也生成键空间,因此不需要在全部节点上生成键空间。
8.3. 键空间的删除方法¶
启动 Cassandra 。
确认 Cassandra 已启动,并启动cassandra-cli。
cassandra-cli的启动方法如下。
OS是Windows时,双击<%CASSANDRA_HOME%/bin/cassandra-cli.bat>。
OS是Linux时,使用下述命令启动。
/usr/local/cassandra/bin/cassandra-cli启动控制台后,请输入下述命令。
connect localhost/9160;在控制台中会显示“Connected to: “IMBox Cluster” on localhost/9160”,请输入下述命令。
drop keyspace default;若控制台中显示了“... schemas agree across the cluster”则删除完成。
8.4. 快闪备份¶
Cassandra 中,数据被保存在被称为memtable的内存上。若要将数据写入到已在cassandra.yaml的“data_file_directories”属性中设定的文件系统上的SStable,需要执行nodetool的flush命令。未采取冗余化措施时,有可能会因为在将memtable的数据写入到SStable之前发生服务器停止而产生数据损失,因此建议定期执行Flush。
OS是Windows时,启动命令提示,并执行下述命令。
%CASSANDRA_HOME%/bin/nodetool -h “想执行Flush的节点的IP地址” flushOS是Linux时,使用下述命令启动。
# /usr/local/cassandra/bin/nodetool -h “想执行的节点的IP地址” flush执行后,会在 Cassandra 输出下述日志。
INFO 15:12:11,104 Enqueuing flush of Memtable-Versions@2895088(83/103 serialized/live bytes, 3 ops) INFO 15:12:11,105 Writing Memtable-Versions@2895088(83/103 serialized/live bytes, 3 ops) INFO 15:12:11,258 Completed flushing %CASSANDRA_HOME%\data\system\Versions\system-Versions-he-3-Data.db (247 bytes) for commitlog position ReplayPosition(segmentId=42805933509718, position=544)
8.5. 快照¶
若要备份 Cassandra 的数据,需要使用nodetool的snapshot命令来取得快照。但是,由于 Cassandra 的快照只复制SStable文件,所以必须在执行快照之前,执行Flush命令。执行Flush的步骤如下。
OS是Windows时,启动命令提示,并执行下述命令。
%CASSANDRA_HOME%/bin/nodetool -h “想执行Flush的节点的IP地址” flush %CASSANDRA_HOME%/bin/nodetool -h “想执行操作的节点的IP地址” snapshot -t (任意快照名)OS是Linux时,使用下述命令启动。
# /usr/local/cassandra/bin/nodetool -h “想执行的节点的IP地址” flush # /usr/local/cassandra/bin/nodetool -h “想执行操作的节点的IP地址” snapshot -t (任意快照名)注解
快照数据被存放于由conf/cassandra.yaml的“data_file_directories”属性指定的目录下面。详细信息请参照下述内容。以下是%CASSANDRA_HOME%/conf/cassandra.yaml的“data_file_directories”为/var/lib/cassandra/data/时的
Cassandra 的系统信息 /var/lib/cassandra/data/system/(列族名)/snapshot/(快照名) IMBox数据 /var/lib/cassandra/data/default/(列族名)/snapshot/(快照名) 注解
快照的删除
删除全部snapshot目录。
# /usr/local/cassandra/bin/nodetool -h “想执行的节点的IP地址” clearsnapshot删除任意snapshot。
# /usr/local/cassandra/bin/nodetool -h “想执行操作的节点的IP地址” clearsnapshot -t (任意快照名)警告
Windows环境中执行clearsnapshot命令时,由于要删除的文件被Cassandra进程占用,删除处理会失败。通过执行下述命令可重新生成SSTable,并解除对文件的参照。nodetool upgradesstables之后可通过执行clearsnapshot来正常删除快照。此外,Linux环境下不会发生上述问题。
8.6. 通过快照数据恢复(还原)¶
使用快照存档数据后,可通过下述步骤,将数据恢复(还原)到快照时间点时的数据。
- OS为Windows时
- 停止 Cassandra
- 删除commitlog文件(例如:C:/var/lib/cassandra/commit_log)
- 删除SSTable(删除C:/var/lib/cassandra/data/default/(列族名)/的各db文件)
- 将快照的各db文件复制到C:/var/lib/cassandra/data/default/(列族名)。
- 启动 Cassandra
- OS为Linux时
- 停止 Cassandra
- 删除commitlog文件(例如:/var/lib/cassandra/commit_log)
- 删除SSTable(删除/var/lib/cassandra/data/default/(列族名)/ 的各db文件)
- 将快照的各db文件复制到/var/lib/cassandra/data/default/(列族名)。
- 启动 Cassandra