Cassandra简单介绍和二进制安装
cassandra简介:
apache cassandra最初由facebook开发,用于储存收件箱等简单格式数据,集googlebigtable的数据模型与amazon dynamo的完全分布式的架构于一身facebook于2008将 cassandra 开源,
apache cassandra是一个高度可扩展的高性能分布式数据库,用于处理大量商用服务器上的大量数据,提供高可用性,无单点故障,是一种nosql类型的数据库。
由于cassandra良好的可扩展性,被digg、twitter等知名web 2.0网站所采纳,成为了一种流行的分布式结构化数据存储方案。
cassandra特点:
cassandra因其卓越的技术特性而变得如此受欢迎。下面给出了cassandra的一些特性:
-
弹性可扩展性 - cassandra是高度可扩展的; 它允许添加更多的硬件以适应更多的客户和更多的数据根据要求。
-
始终基于架构 - cassandra没有单点故障,它可以连续用于不能承担故障的关键业务应用程序。
-
快速线性性能 - cassandra是线性可扩展性的,即它为你增加集群中的节点数量增加你的吞吐量。因此,保持一个快速的响应时间。
-
灵活的数据存储 - cassandra适应所有可能的数据格式,包括:结构化,半结构化和非结构化。它可以根据您的需要动态地适应变化的数据结构。
-
便捷的数据分发 - cassandra通过在多个数据中心之间复制数据,可以灵活地在需要时分发数据。
-
事务支持 - cassandra支持属性,如原子性,一致性,隔离和持久性(acid)。
-
快速写入 - cassandra被设计为在廉价的商品硬件上运行。 它执行快速写入,并可以存储数百tb的数据,而不牺牲读取效率。
cassandra架构:
cassandra的设计目的是处理跨多个节点的大数据工作负载,而没有任何单点故障。
cassandra在其节点之间具有对等分布式系统,并且数据分布在集群中的所有节点之间。
-
集群中的所有节点都扮演相同的角色。 每个节点是独立的,并且同时互连到其他节点。
-
集群中的每个节点都可以接受读取和写入请求,无论数据实际位于集群中的何处。
-
当节点关闭时,可以从网络中的其他节点提供读/写请求。
cassandra中的数据复制
在cassandra中,集群中的一个或多个节点充当给定数据片段的副本。
如果检测到一些节点以过期值响应,cassandra将向客户端返回最近的值。
返回最新的值后,cassandra在后台执行读修复以更新失效值。
下图显示了cassandra如何在集群中的节点之间使用数据复制,以确保没有单点故障的示意图。
注 - cassandra在后台使用gossip协议,允许节点相互通信并检测集群中的任何故障节点。
gossip协议是一个通信协议,一种传播消息的方式,灵感来自于:瘟疫、社交网络等。
使用gossip协议的有:redis cluster、consul、apache cassandra等。
cassandra的组件:
cassandra的关键组件如下:
-
节点 - 它是存储数据的地方。
-
数据中心 - 它是相关节点的集合。
-
集群 - 集群是包含一个或多个数据中心的组件。
-
提交日志 - 提交日志是cassandra中的崩溃恢复机制。每个写操作都写入提交日志。
-
mem-表 - mem-表是存储器驻留的数据结构。提交日志后,数据将被写入mem表。有时,对于单列族,将有多个mem表。
-
sstable - 它是一个磁盘文件,当其内容达到阈值时,数据从mem表中刷新。
-
布隆过滤器 - 这些只是快速,非确定性的算法,用于测试元素是否是集合的成员。它是一种特殊的缓存。 每次查询后访问bloom过滤器。
java&cassandra安装:
环境条件:
- cassandra 3.0及更高版本需要java 8u40或更高版本。
- java 8的最新版本,即oracle java standard edition 8或openjdk 8。要验证您是否安装了正确的java版本,请输入。
java -version
- 对于使用cqlsh,最新版本的python 2.7。要验证您是否安装了正确的python版本,请输入。
python --version
创建用户和组:
在开始时,建议为cassandra创建一个单独的用户,这样可以不使用root达到权限隔离。
[root@tse3 cassandra]# /usr/sbin/groupadd -g 10001 cassandra [root@tse3 cassandra]# /usr/sbin/useradd -u 10001 -g cassandra cassandra [root@tse3 cassandra]# id cassandra uid=10001(cassandra) gid=10001(cassandra) groups=10001(cassandra) [root@tse3 cassandra]# passwd cassandra [root@tse3 cassandra]# chown -r cassandra:cassandra /cassandra [root@tse3 cassandra]# chmod -r 775 /cassandra
ssh设置和密钥生成:
需要ssh设置才能在集群上执行不同的操作,例如启动,停止和分布式守护程序shell操作。
要对cassandra的不同用户进行身份验证,需要为cassandra用户提供公钥/私钥对,并与不同的用户共享。
以下命令用于使用ssh生成键值对:
- 将公共密钥表单id_rsa.pub复制到authorized_keys,
- 并提供所有者,
- 分别对authorized_keys文件的读写权限。
[root@tse3 cassandra]# ssh-keygen -t rsa generating public/private rsa key pair. enter file in which to save the key (/root/.ssh/id_rsa): created directory '/root/.ssh'. enter passphrase (empty for no passphrase): enter same passphrase again: your identification has been saved in /root/.ssh/id_rsa. your public key has been saved in /root/.ssh/id_rsa.pub. the key fingerprint is: sha256:pewpzrcxd/bvbiujthdmtqtlp7o7uqspbtq8hspsqqw root@tse3 the key's randomart image is: +---[rsa 2048]----+ | + o+xo=| | . o * o =.x | | e = * * * = .| | o o + + o . | | o s + .| | o + o | | . o o | | . + o | | ..o oo+o | +----[sha256]-----+ [root@tse3 .ssh]# cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys [root@tse3 .ssh]# chmod 775 ~/.ssh/authorized_keys
验证ssh:
[root@tse3 .ssh]# ssh localhost
安装java环境:
java是cassandra的主要先决条件。 首先,您应该使用以下命令验证系统中是否存在java:
[root@tse3 ~]# java -version -bash: java: command not found
如果您的系统中没有java,请按照以下步骤安装java。
以下链接下载jdk8:
cassandra 3.0及更高版本需要java 8u40或更高版本
我这边下载了最新版的:jdk-8u241-linux-x64.tar.gz
我这边是下载了tar包上传到服务器,因为服务器下载速度太慢了
[root@tse3 downloads]# wget https://download.oracle.com/otn-pub/java/jdk/14+36/076bab302c7b4508975440c56f6cc26a/jdk-14_linux-x64_bin.tar.gz
下载好的包,解压:
[root@tse3 downloads]# tar -zxvf jdk-8u241-linux-x64.tar.gz
移动jdk到/usr/local下面,对所有用户可用:
[root@tse3 downloads]# mv jdk1.8.0_241 /usr/local/
要设置path和java_home变量:
export java_home=/usr/local/jdk1.8.0_241 export path=$path:$java_home/bin export classpath=.:$java_home/lib/dt.jar:$java_home/lib/tools.jar export jre_home=$java_home/jre
将更改生效:
[root@tse3 lib]# source ~/.bash_profile
输入命令查询java版本,出现如下代表装成功:
[root@tse3 bin]# java -version java version "1.8.0_241" java(tm) se runtime environment (build 1.8.0_241-b07) java hotspot(tm) 64-bit server vm (build 25.241-b07, mixed mode)
安装cassandra:
先创建相关目录
[root@tse3 /]# mkdir -p /var/lib/cassandra/{data,commitlog,saved_caches} 设置读写权限: [root@tse3 /]# chmod 777 /var/lib/cassandra [root@tse3 /]# chmod 777 /var/log/cassandra [root@tse3 /]# chown -r cassandra:cassandra /cassandra/ [root@tse3 /]# chmod -r 777 /cassandra/
设置环境变量
[root@tse3 bin]# vim ~/.bash_profile export cassandra_home=/cassandra export path=$path:$cassandra_home/bin [root@tse3 bin]# source ~/.bash_profile
1、先从官方网站获取最新的tar包,我这里是按照3.11版本,已经获取到地址了
[root@tse3 downloads]# wget https://www.apache.org/dyn/closer.lua/cassandra/3.11.6/apache-cassandra-3.11.6-bin.tar.gz
2、解压下载的tar包
[root@tse3 downloads]# tar -zxvf apache-cassandra-3.11.6-bin.tar.gz
3、创建一个cassandra目录,然后移动数据到这个目录下
[root@tse3 downloads]# mv apache-cassandra-3.11.6/* /cassandra/
配置cassandra:
注意:如果您从deb或rpm包安装了cassandra,配置文件将位于cassandra的/etc/cassandra目录中。
我的是二进制安装方法,所以配置文件在/conf里面。
用vi或者vim打开cassandra.yaml文件。验证以下配置。 默认情况下,这些值将设置为指定的目录。
[root@tse3 conf]# vim cassandra.yaml [root@tse3 conf]# pwd /cassandra/conf
#存储数据的目录,如果未设置则默认目录为$cassandra_home/data/data. data_file_directories: - /var/lib/cassandra/data #提交日志,如果未设置,则默认目录为$cassandra_home/data/commitlog. commitlog_directory: /var/lib/cassandra/commitlog #保存缓存,如果未设置,默认目录$cassandra_home/data/saved_caches. saved_caches_directory: /var/lib/cassandra/saved_caches
cluster_name:集群的名称。 seeds:用逗号分隔的群集种子ip地址列表。 storage_port注意:您不一定需要更改此设置,但请确保没有防火墙阻止此端口。 listen_address:节点的ip地址,这是允许其他节点与此节点通信的地址,因此更改它很重要。或者,您可以设置listen_interface告诉cassandra使用哪个接口,以及连续使用哪个地址。仅设置一个,而不要同时设置两个。 native_transport_port:对于storage_port,请确保此端口未被防火墙阻止,因为客户端将在此端口上与cassandra通信。
data_file_directories:数据文件所在的一个或多个目录。 commitlog_directory:提交日志文件所在的目录。 saved_caches_directory:保存的缓存所在的目录。 hints_directory:提示所在的目录。 出于性能原因,如果您有多个磁盘,请考虑将提交日志和数据文件放在不同的磁盘上。
启动cassandra:
进入cassandra主目录
[root@tse3 bin]# pwd /cassandra/bin
[root@tse3 bin]# cassandra -f -r
cqlsh使用连接测试:
cqlsh是用于通过cql(cassandra查询语言)与cassandra交互的命令行外壳。
它随每个cassandra软件包一起提供,可以在cassandra可执行文件旁边的bin/目录中找到。
cqlsh利用python本机协议驱动程序,并连接到命令行上指定的单个节点。
使用cqlsh,你可以
- 定义模式,
- 插入数据,
- 执行查询。
[root@tse3 bin]# cqlsh connected to test cluster at 127.0.0.1:9042. [cqlsh 5.0.1 | cassandra 3.11.6 | cql spec 3.4.4 | native protocol v4] use help for help. cqlsh>
记录的shell命令
下面给出了cqlsh记录的shell命令。这些是用于执行任务的命令,如显示帮助主题,退出cqlsh,描述等。
-
help -显示所有cqlsh命令的帮助主题。
-
capture -捕获命令的输出并将其添加到文件。
-
consistency -显示当前一致性级别,或设置新的一致性级别。
-
copy -将数据复制到cassandra并从cassandra复制数据。
-
describe -描述cassandra及其对象的当前集群。
-
expand -纵向扩展查询的输出。
-
exit -使用此命令,可以终止cqlsh。
-
paging -启用或禁用查询分页。
-
show -显示当前cqlsh会话的详细信息,如cassandra版本,主机或数据类型假设。
-
source -执行包含cql语句的文件。
-
tracing -启用或禁用请求跟踪。
cql数据定义命令
-
create keyspace -在cassandra中创建keyspace。
-
use -连接到已创建的keyspace。
-
alter keyspace -更改keyspace的属性。
-
drop keyspace -删除keyspace。
-
create table -在keyspace中创建表。
-
alter table -修改表的列属性。
-
drop table -删除表。
-
truncate -从表中删除所有数据。
-
create index -在表的单个列上定义新索引。
-
drop index -删除命名索引。
cql数据操作指令
-
insert -在表中添加行的列。
-
update -更新行的列。
-
delete -从表中删除数据。
-
batch -一次执行多个dml语句。
cql字句
-
select -此子句从表中读取数据
-
where -where子句与select一起使用以读取特定数据。
-
orderby -orderby子句与select一起使用,以特定顺序读取特定数据。