Cassandra简介和使用

网友投稿 806 2022-05-29

一、Cassandra是什么

1.1、应用场景

1.1.1、互联网类应用

1.1.2、多活

1.1.3、业务灵活多变

1.1.4、写密集、统计和分析型工作

1.1.5、数据驱动的业务

一、Cassandra是什么

1.1、应用场景

1.1.1、互联网类应用

1.1.2、多活

1.1.3、业务灵活多变

1.1.4、写密集、统计和分析型工作

1.1.5、数据驱动的业务

1.2、名词解释

1.3、Cassandra vs. MongoDB vs. Couchbase vs. HBase

1.4、常用端口

二、架构简介

2.1. 核心结构

2.2. 核心组件

三、安装

3.3、docker安装

3.4、Docker创建Cassandra集群

四、常见配置

4.1、Cassandra开启远程连接

4.2、配置补全功能

4.3、安装Windows客户端

4.4、版本问题

五、参考文档

Cassandra([kəˈsændrə])是云原生和微服务化场景中最好的NoSQL数据库。

一、Cassandra是什么

高可用性和可扩展的分布式数据库

Apache Cassandra™是一个开源分布式NoSQL数据库系统,可提供当今最苛刻的应用程序所需的高可用性、高性能和线性可伸缩性。它提供了跨云服务提供商、数据中心和地理位置的操作简便性和轻松的复制,并且可以在混合云环境中每秒处理PB级信息和数千个并发操作。

在Hadoop关联的项目中对Cassandra的解释是:A scalable multi-master database with no single points of failure.

可以看出,高可用性和高可伸缩性是Cassandra最闪亮的特点。没有单点故障。

1.1、应用场景

1.1.1、互联网类应用

Cassandra能够支持大并发低延时的访问需求,具备高可用和弹性扩容能力,适合日志、消息、feed流、订单、账单、网站等各种大数据量的互联网在线应用场景。

1.1.2、多活

Cassandra原生支持多DC部署方式,实现更好的可用性和容灾能力。云数据库Cassandra可以很容易添加新的数据中心,不同的数据中心可以设定不同的副本数,既可以作为跨数据中心多活高可用,也可以作备份容灾或离线分析使用。

1.1.3、业务灵活多变

云数据库Cassandra的数据模型灵活,对表结构的变更是一个非常轻量级的操作,非常适用于初创型的业务需求,让您的数据库能更快地跟上业务改进的步伐。

1.1.4、写密集、统计和分析型工作

Cassandra是为优异的写吞吐量而特别优化的,能够支持很高的多客户线程并发写性能和突发的峰值,这些特性使得Cassandra能够很好支持写多于读的场景,例如用户状态更新、社交网络、建议/评价以及应用统计等。

1.1.5、数据驱动的业务

云数据库Cassandra可以支持数百个节点的集群规模,适合大数据量的存储。在一些需要应用大量数据对用户行为进行分析的场景中,可以通过整合多种数据来源,存储用户行为数据,构建用户画像,实时存储在Cassandra中,提供大数据风控、推荐等服务。

1.2、名词解释

1.3、Cassandra vs. MongoDB vs. Couchbase vs. HBase

Apache Cassandra™在高负载下提供了更高的性能,在许多用场景中都超过了它的NoSQL数据库竞争对手。

Apache Cassandra: 高度可伸缩、高性能的分布式数据库,设计用于处理许多商用服务器上的大量数据,提供高可用性,没有单点故障。

Apache HBase: 基于谷歌的BigTable的开源、非关系型、分布式数据库,是用Java编写的。它是Apache Hadoop项目的一部分,在HDFS上运行,为Hadoop提供类似于BigTable的功能。

MongoDB: 跨平台的面向文档的数据库系统,避开了传统的基于表的关系数据库结构,转而使用具有动态模式的类JSON文档,从而使数据在某些类型的应用程序中的集成更加容易和快捷。

Couchbase: 为交互式应用程序优化的分布式NoSQL面向文档的数据库。

1.4、常用端口

7199 - JMX(8080 pre Cassandra 0.8.xx)

Cassandra简介和使用

7000 - 节点间通信(如果启用了TLS,则不使用)

7001 - TLS节点间通信(使用TLS时使用)

9160 - Thrift客户端API

9042 - CQL本地传输端口

二、架构简介

Cassandra被设计用来处理跨多个节点的大数据工作负载,没有单点故障。Cassandra通过采用跨同构节点的对等分布式系统来解决故障问题,其中数据分布在集群中的所有节点中。每个节点使用点对点gossip通信协议频繁地交换自己和集群中其他节点的状态信息。每个节点上按顺序写入的提交日志被捕获写入活动,以确保数据的持久性。然后,数据被编入索引并写入内存结构,称为memtable,它类似于回写缓存。每次内存结构满了,数据就被写到一个SSTables数据文件的磁盘上。所有写操作都会自动分区并在整个集群中复制。Cassandra定期使用一个称为压缩的进程合并SSTables,丢弃用tombstone标记为要删除的过时数据。为了确保集群中的所有数据保持一致,需要使用各种修复机制。

Cassandra是一个分区的行存储数据库,其中行被组织成具有所需主键的表。Cassandra的体系结构允许任何授权用户连接到任何数据中心中的任何节点,并使用CQL语言访问数据。为了易于使用,CQL使用与SQL类似的语法并处理表数据。通常,集群中的每个应用程序都有一个键空间,由许多不同的表组成。

客户端读或写请求可以发送到集群中的任何节点。当客户端使用请求连接到某个节点时,该节点充当该特定客户端操作的协调器。协调器充当客户端应用程序和拥有所请求数据的节点之间的代理。协调器根据集群的配置方式确定环形中的哪些节点应该获得请求。

2.1. 核心结构

• Node

存储数据的地方。它是Cassandra的基础设施组件

• datacenter

相关节点的集合。数据中心可以是物理数据中心,也可以是虚拟数据中心。不同的工作负载应该使用单独的数据中心,无论是物理的还是虚拟的。复制由数据中心设置。使用单独的数据中心可以防止Cassandra事务受到其他工作负载的影响,并使请求彼此接近以降低延迟。根据复制因子,可以将数据写入多个数据中心。数据中心绝不能跨越物理位置。

• Cluster

一个集群包含一个或多个数据中心。它可以跨越物理位置。

• Commit log

为了持久性,所有数据写入之前都要首先写入提交日志(日志写入优先)。所有数据都刷新到SSTables之后,就可以对其进行归档、删除或回收。

• SSTable(Sorted String Table)

一个SSTable是一个不可变的数据文件,Cassandra定期将memtables写入其中。仅追加SSTables并按顺序存储在磁盘上,并为每个Cassandra表维护SSTables。

• CQL Table

按表行获取的有序列的集合。一张表由多列组成,并且有一个主键。

2.2. 核心组件

• Gossip

一种对等通信协议,用于发现和共享Cassandra集群中其他节点的位置和状态信息。Gossip息也由每个节点本地保存,以便在节点重新启动时立即使用。

• Partitioner

分区程序确定哪个节点将接收一段数据的第一个副本,以及如何跨集群中的其他节点分发其他副本。每一行数据都由一个主键唯一地标识,主键可能与其分区键相同,但也可能包含其他集群列。Partitioner是一个哈希函数,它从一行的主键派生标记。分区程序使用令牌值来确定集群中的哪些节点接收该行的副本。Murmur3Partitioner是新Cassandra集群的默认分区策略,几乎在所有情况下都是新集群的正确选择。

• Replication factor

整个集群中的副本总数。副本因子1表示在一个节点上每一行只有一个副本。副本因子2表示每一行有两个副本,其中每个副本位于不同的节点上。所有的副本都同样重要,没有主副本。你可以为每个数据中心定义副本因子。通常,应该将副本策略设置为大于1,但不超过集群中的节点数。

• Replica placement strategy

Cassandra将数据的副本存储在多个节点上,以确保可靠性和容错能力。副本策略决定将副本放在哪个节点上。数据的第一个副本就是第一个副本,它在任何意义上都不是唯一的。强烈建议使用NetworkTopologyStrategy策略,因为在将来需要扩展时,可以轻松扩展到多个数据中心。创建keyspace时,必须定义副本放置策略和所需的副本数。

• Snitch

snitch将一组机器定义为数据中心和机架(拓扑),副本策略使用这些数据中心和机架放置副本。

在创建集群时,必须配置一个snitch。所有的snitch都使用一个动态的snitch层,该层监视性能并选择最佳副本进行读取。它是默认启用的,建议在大多数部署中使用。在cassandra.yaml配置文件中为每个节点配置动态snitch阈值。

• cassandra.yaml

用于设置集群的初始化属性、表的缓存参数、调优和资源利用率的属性、超时设置、客户端连接、备份和安全性的主要配置文件。

三、安装

官网:https://cassandra.apache.org/

下载:https://cassandra.apache.org/download/

安装过程:https://cassandra.apache.org/doc/latest/getting_started/installing.html

历史版本:http://archive.apache.org/dist/cassandra/

最新rpm版本:https://downloads.apache.org/cassandra/redhat

http://apache.mirror.digitalpacific.com.au/cassandra/

3.3、docker安装

https://hub.docker.com/_/cassandra

docker pull cassandra:3.11 docker run --name lhrcassandra311 -d cassandra:3.11 docker exec -it lhrcassandra311 bash

3.4、Docker创建Cassandra集群

Docker Hub上已经提供了Cassandra的官方镜像,可以方便地创建单节点Cassandra实例或Cassandra集群。Cassandra采用去中心化的集群架构,没有master节点的概念;但是会有seed节点在新节点连入时通知当前集群。

下面的Docker Compose模板将为你创建一个包含3个节点的Cassandra集群,其中第一个容器“cassandra-1”为seed节点。

mkdir -p /cassandra/ cat > /cassandra/docker-compose.yml <<"EOF" version: '2' services: cassandra-1: image: cassandra:3.11 container_name: cassandra-1 environment: - CASSANDRA_BROADCAST_ADDRESS=cassandra-1 ports: - 7000 restart: always cassandra-2: image: cassandra:3.11 container_name: cassandra-2 environment: - CASSANDRA_BROADCAST_ADDRESS=cassandra-2 - CASSANDRA_SEEDS=cassandra-1 ports: - 7000 depends_on: - cassandra-1 restart: always cassandra-3: image: cassandra:3.11 container_name: cassandra-3 environment: - CASSANDRA_BROADCAST_ADDRESS=cassandra-3 - CASSANDRA_SEEDS=cassandra-1 ports: - 7000 depends_on: - cassandra-2 restart: always EOF

注意修改镜像的版本。

现在,我们可以轻松利用 docker-compose 命令来启动Cassandra集群了

cd /cassandra/ docker-compose up -d [root@docker35 cassandra]# docker-compose up -d Building with native build. Learn about native build in Compose here: https://docs.docker.com/go/compose-native-build/ Creating network "cassandra_default" with the default driver Creating cassandra-1 ... done Creating cassandra-2 ... done Creating cassandra-3 ... done [root@docker35 cassandra]#

启动之后,我们可以方便地查看集群状态

[root@docker35 cassandra]# docker-compose ps Name Command State Ports --------------------------------------------------------------------------------------------------------------------- cassandra-1 docker-entrypoint.sh cassa ... Up 0.0.0.0:1049->7000/tcp, 7001/tcp, 7199/tcp, 9042/tcp, 9160/tcp cassandra-2 docker-entrypoint.sh cassa ... Up 0.0.0.0:1048->7000/tcp, 7001/tcp, 7199/tcp, 9042/tcp, 9160/tcp cassandra-3 docker-entrypoint.sh cassa ... Up 0.0.0.0:1047->7000/tcp, 7001/tcp, 7199/tcp, 9042/tcp, 9160/tcp [root@docker35 cassandra]# docker exec -it cassandra-1 cqlsh cassandra-2 -e "DESCRIBE CLUSTER" Cluster: Test Cluster Partitioner: Murmur3Partitioner

四、常见配置

4.1、Cassandra开启远程连接

修改/etc/cassandra/default.conf/cassandra.yaml

sed -i 's/start_rpc: false/start_rpc: true/g' /etc/cassandra/default.conf/cassandra.yaml sed -i 's/rpc_address: localhost/rpc_address: 0.0.0.0/g' /etc/cassandra/default.conf/cassandra.yaml sed -i 's/# broadcast_rpc_address: 1.2.3.4/broadcast_rpc_address: 1.2.3.4/g' /etc/cassandra/default.conf/cassandra.yaml -- 远程测试9042端口 telnet 192.168.66.35 9042 -- 连接 cqlsh 172.17.0.17 cqlsh 172.17.0.17 9042

4.2、配置补全功能

1、进入python2的环境变量下 2、执行 pip install pyreadline

4.3、安装Windows客户端

执行报错:

C:\Users\lhrxxt>cqlsh 192.168.66.35 9042 File "D:\Program Files\apache-cassandra-3.4-bin\apache-cassandra-3.4\bin\\cqlsh.py", line 146 except ImportError, e: ^ SyntaxError: invalid syntax

原因:不支持Python 3,需要修改为python 2

解决:安装Python 2,修改文件D:\Program Files\apache-cassandra-3.4-bin\apache-cassandra-3.4\bin\cqlsh.bat,添加一行:set PATH=D:\Program Files\Python\Python27,如下:

重新执行即可。

4.4、版本问题

C:\Users\lhrxxt>cqlsh 192.168.66.35 9042 Connection error: ('Unable to connect to any servers', {'192.168.66.35': ProtocolError("cql_version '3.4.2' is not supported by remote (w/ native protocol). Supported versions: [u'3.4.4']",)}) C:\Users\lhrxxt>cqlsh 192.168.66.35 9042 --cqlversion=3.4.4 Connected to Test Cluster at 192.168.66.35:9042. [cqlsh 5.0.1 | Cassandra 3.11.10 | CQL spec 3.4.4 | Native protocol v4] Use HELP for help. WARNING: pyreadline dependency missing. Install to enable tab completion.

五、参考文档

https://cassandra.apache.org/download/

https://cassandra.apache.org/doc/latest/architecture/index.html

https://www.datastax.com/products/compare/nosql-performance-benchmarks

https://docs.datastax.com/en/cassandra-oss/3.x/

https://docs.datastax.com/en/cassandra-oss/3.x/cassandra/architecture/archDataDistributeHashing.html

https://docs.datastax.com/en/cassandra-oss/3.x/cassandra/dml/dmlIntro.html

https://help.aliyun.com/document_detail/126637.html?spm=a2c4g.11186623.6.542.268a7f3bIk5dap

https://www.w3cschool.cn/cassandra/

云数据库 GaussDB(for Cassandra) 数据库

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:WordZ:Word终结者,基于Google API的文档自动化 电子合同发票流水账单线上集成方案
下一篇:ORACLE12CR2 RAC安装部署(REDHAT7.6)一、环境配置
相关文章