前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【DB宝58】Cassandra 简介

【DB宝58】Cassandra 简介

作者头像
AiDBA宝典
发布2021-12-17 19:22:14
1.8K0
发布2021-12-17 19:22:14
举报
文章被收录于专栏:小麦苗的DB宝专栏

目录

代码语言:javascript
复制
一、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.1、yum安装
  3.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、名词解释

术语

说明

cassandra

Cassandra是在线可靠的NoSQL分布式数据库服务,支持类SQL语法CQL,支持多地多活,提供了安全、容灾、监控、备份恢复等企业级能力。

CQL

CQL(Cassandra Query Language)是cassandra中提供的一种类SQL查询语言,具体用法可参考cassandra文档。

数据中心

云数据库Cassandra中,数据中心(Data Center,简称DC)是指在同一地域下,电力、网络隔离的一组节点。在多DC的部署架构下面,DC之间内网互通,同一DC内网络延时更小,不同DC之间故障隔离。

Partitioner

partitioner用来确定将数据均衡分布在节点上的策略。云数据库Cassandra中,默认使用Murmur3Partitioner。

副本数

副本数表示数据在集群中存了几“份”(副本),例如副本数为2表示每行数据在集群中保存了两个副本,每个副本都在不同的节点上面。云数据库Cassandra中,副本数由用户在创建keyspace时指定。

副本策略

副本策略用来确定将副本存放在哪个节点上面。云数据库Cassandra中,副本策略由用户在创建keyspace时指定。推荐您使用NetworkTopologyStrategy策略,可更便捷地将集群扩展至多个DC。

KeySpace

一个KeySpace下包含若干个表,用户可以在keyspce这个级别指定副本策略。

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)
  • 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.1、yum安装

注意: 1、安装环境需要提前安装Java 1.8,可以使用命令“java -version”。 2、需要Python 3.6+ 或Python 2.7,用于cqlsh

参数文件:/etc/cassandra/conf/cassandra.yaml

代码语言:javascript
复制
docker run -d --name lhrcassandra -h lhrcassandra \
  -p 9042:9042 \
  --privileged=true lhrbest/lhrcentos76:8.2 \
  /usr/sbin/init

docker exec -it lhrcassandra bash

将Cassandra仓库添加到yum源中:

代码语言:javascript
复制
cat > /etc/yum.repos.d/cassandra.repo  <<"EOF"
[cassandra]
name=Apache Cassandra
baseurl=https://downloads.apache.org/cassandra/redhat/311x/
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://downloads.apache.org/cassandra/KEYS
EOF

执行yum install命令:

代码语言:javascript
复制
yum install -y cassandra 

安装完以后就是cassandra服务了

代码语言:javascript
复制
# 以root用户启动cassandra
cassandra -R

使用-f选项告诉Cassandra保留在前台,而不是作为后台进程运行。如果一切顺利,您可以看到Cassandra服务器启动。

命令行直接输入cqlsh即可连接到本地cassandra数据库,就像直接输入mysql回车一样

代码语言:javascript
复制
[root@lhrcentos76 /]# cassandra -R
[root@lhrcentos76 /]# 
[root@lhrcentos76 /]# ps -ef|grep cass
root      6970     0  6 09:20 pts/0    00:00:55 java -Xloggc:/var/log/cassandra/gc.log -ea -XX:+UseThreadPriorities -XX:ThreadPriorityPolicy=42 -XX:+HeapDumpOnOutOfMemoryError -Xss256k -XX:StringTableSize=1000003 -XX:+AlwaysPreTouch -XX:-UseBiasedLocking -XX:+UseTLAB -XX:+ResizeTLAB -XX:+UseNUMA -XX:+PerfDisableSharedMem -Djava.net.preferIPv4Stack=true -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:SurvivorRatio=8 -XX:MaxTenuringThreshold=1 -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSWaitDuration=10000 -XX:+CMSParallelInitialMarkEnabled -XX:+CMSEdenChunksRecordAlways -XX:+CMSClassUnloadingEnabled -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintHeapAtGC -XX:+PrintTenuringDistribution -XX:+PrintGCApplicationStoppedTime -XX:+PrintPromotionFailure -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=10M -Xms8052M -Xmx8052M -Xmn800M -XX:+UseCondCardMark -XX:CompileCommandFile=/etc/cassandra/conf/hotspot_compiler -javaagent:/usr/share/cassandra/lib/jamm-0.3.0.jar -Dcassandra.jmx.local.port=7199 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.password.file=/etc/cassandra/jmxremote.password -Djava.library.path=/usr/share/cassandra/lib/sigar-bin -XX:OnOutOfMemoryError=kill -9 %p -Dlogback.configurationFile=logback.xml -Dcassandra.logdir=/var/log/cassandra -Dcassandra.storagedir= -cp /etc/cassandra/conf:/usr/share/cassandra/lib/airline-0.6.jar:/usr/share/cassandra/lib/antlr-runtime-3.5.2.jar:/usr/share/cassandra/lib/asm-5.0.4.jar:/usr/share/cassandra/lib/caffeine-2.2.6.jar:/usr/share/cassandra/lib/cassandra-driver-core-3.0.1-shaded.jar:/usr/share/cassandra/lib/commons-cli-1.1.jar:/usr/share/cassandra/lib/commons-codec-1.9.jar:/usr/share/cassandra/lib/commons-lang3-3.1.jar:/usr/share/cassandra/lib/commons-math3-3.2.jar:/usr/share/cassandra/lib/compress-lzf-0.8.4.jar:/usr/share/cassandra/lib/concurrentlinkedhashmap-lru-1.4.jar:/usr/share/cassandra/lib/concurrent-trees-2.4.0.jar:/usr/share/cassandra/lib/disruptor-3.0.1.jar:/usr/share/cassandra/lib/ecj-4.4.2.jar:/usr/share/cassandra/lib/guava-18.0.jar:/usr/share/cassandra/lib/HdrHistogram-2.1.9.jar:/usr/share/cassandra/lib/high-scale-lib-1.0.6.jar:/usr/share/cassandra/lib/hppc-0.5.4.jar:/usr/share/cassandra/lib/jackson-annotations-2.9.10.jar:/usr/share/cassandra/lib/jackson-core-2.9.10.jar:/usr/share/cassandra/lib/jackson-databind-2.9.10.4.jar:/usr/share/cassandra/lib/jamm-0.3.0.jar:/usr/share/cassandra/lib/javax.inject.jar:/usr/share/cassandra/lib/jbcrypt-0.3m.jar:/usr/share/cassandra/lib/jcl-over-slf4j-1.7.7.jar:/usr/share/cassandra/lib/jctools-core-1.2.1.jar:/usr/share/cassandra/lib/jflex-1.6.0.jar:/usr/share/cassandra/lib/jna-4.2.2.jar:/usr/share/cassandra/lib/joda-time-2.4.jar:/usr/share/cassandra/lib/json-simple-1.1.jar:/usr/share/cassandra/lib/jstackjunit-0.0.1.jar:/usr/share/cassandra/lib/libthrift-0.9.2.jar:/usr/share/cassandra/lib/log4j-over-slf4j-1.7.7.jar:/usr/share/cassandra/lib/logback-classic-1.1.3.jar:/usr/share/cassandra/lib/logback-core-1.1.3.jar:/usr/share/cassandra/lib/lz4-1.3.0.jar:/usr/share/cassandra/lib/metrics-core-3.1.5.jar:/usr/share/cassandra/lib/metrics-jvm-3.1.5.jar:/usr/share/cassandra/lib/metrics-logback-3.1.5.jar:/usr/share/cassandra/lib/netty-all-4.0.44.Final.jar:/usr/share/cassandra/lib/ohc-core-0.4.4.jar:/usr/share/cassandra/lib/ohc-core-j8-0.4.4.jar:/usr/share/cassandra/lib/reporter-config3-3.0.3.jar:/usr/share/cassandra/lib/reporter-config-base-3.0.3.jar:/usr/share/cassandra/lib/sigar-1.6.4.jar:/usr/share/cassandra/lib/slf4j-api-1.7.7.jar:/usr/share/cassandra/lib/snakeyaml-1.11.jar:/usr/share/cassandra/lib/snappy-java-1.1.1.7.jar:/usr/share/cassandra/lib/snowball-stemmer-1.3.0.581.1.jar:/usr/share/cassandra/lib/ST4-4.0.8.jar:/usr/share/cassandra/lib/stream-2.5.2.jar:/usr/share/cassandra/lib/thrift-server-0.3.7.jar:/usr/share/cassandra/apache-cassandra-3.11.10.jar:/usr/share/cassandra/apache-cassandra-thrift-3.11.10.jar:/usr/share/cassandra/stress.jar: org.apache.cassandra.service.CassandraDaemon
root      7810  6244  0 09:34 pts/0    00:00:00 grep --color=auto cass
[root@lhrcentos76 /]# 
[root@lhrcentos76 /]# nodetool status
Datacenter: datacenter1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address    Load       Tokens       Owns (effective)  Host ID                               Rack
UN  127.0.0.1  70.75 KiB  256          100.0%            998e3685-a29a-4821-99f6-c6777d2b8c2d  rack1

[root@lhrcentos76 /]#
[root@lhrcentos76 /]# tail -f /var/log/cassandra/system.log
INFO  [MigrationStage:1] 2021-04-17 09:21:22,421 ColumnFamilyStore.java:421 - Initializing system_auth.role_permissions
INFO  [MigrationStage:1] 2021-04-17 09:21:22,438 ColumnFamilyStore.java:421 - Initializing system_auth.roles
INFO  [main] 2021-04-17 09:21:22,502 StorageService.java:1536 - JOINING: Finish joining ring
INFO  [main] 2021-04-17 09:21:23,220 NativeTransportService.java:68 - Netty using native Epoll event loop
INFO  [Service Thread] 2021-04-17 09:21:23,355 GCInspector.java:285 - ConcurrentMarkSweep GC in 778ms.  Code Cache: 8832512 -> 13666368; Compressed Class Space: 3561480 -> 5361784; Metaspace: 31083568 -> 39731016; Par Eden Space: 641498248 -> 336863704; Par Survivor Space: 0 -> 30972656
INFO  [main] 2021-04-17 09:21:23,423 Server.java:158 - Using Netty Version: [netty-buffer=netty-buffer-4.0.44.Final.452812a, netty-codec=netty-codec-4.0.44.Final.452812a, netty-codec-haproxy=netty-codec-haproxy-4.0.44.Final.452812a, netty-codec-http=netty-codec-http-4.0.44.Final.452812a, netty-codec-socks=netty-codec-socks-4.0.44.Final.452812a, netty-common=netty-common-4.0.44.Final.452812a, netty-handler=netty-handler-4.0.44.Final.452812a, netty-tcnative=netty-tcnative-1.1.33.Fork26.142ecbb, netty-transport=netty-transport-4.0.44.Final.452812a, netty-transport-native-epoll=netty-transport-native-epoll-4.0.44.Final.452812a, netty-transport-rxtx=netty-transport-rxtx-4.0.44.Final.452812a, netty-transport-sctp=netty-transport-sctp-4.0.44.Final.452812a, netty-transport-udt=netty-transport-udt-4.0.44.Final.452812a]
INFO  [main] 2021-04-17 09:21:23,423 Server.java:159 - Starting listening for CQL clients on localhost/127.0.0.1:9042 (unencrypted)...
INFO  [main] 2021-04-17 09:21:23,508 CassandraDaemon.java:564 - Not starting RPC server as requested. Use JMX (StorageService->startRPCServer()) or nodetool (enablethrift) to start it
INFO  [main] 2021-04-17 09:21:23,508 CassandraDaemon.java:650 - Startup complete
INFO  [OptionalTasks:1] 2021-04-17 09:21:32,986 CassandraRoleManager.java:372 - Created default superuser role 'cassandra'
[root@lhrcentos76 /]#  cqlsh
Connected to Test Cluster at 127.0.0.1:9042.
[cqlsh 5.0.1 | Cassandra 3.11.10 | CQL spec 3.4.4 | Native protocol v4]
Use HELP for help.
cqlsh> SELECT cluster name, listen_address FROM system.local;
SyntaxException: line 1:15 no viable alternative at input 'name' (SELECT [cluster] name...)
cqlsh> 
cqlsh> SELECT cluster_name, listen_address FROM system.local;

 cluster_name | listen_address
--------------+----------------
 Test Cluster |      127.0.0.1

(1 rows)

cqlsh> DESCRIBE CLUSTER;

Cluster: Test Cluster
Partitioner: Murmur3Partitioner


cqlsh> ?

Documented shell commands:
===========================
CAPTURE  CLS          COPY  DESCRIBE  EXPAND  LOGIN   SERIAL  SOURCE   UNICODE
CLEAR    CONSISTENCY  DESC  EXIT      HELP    PAGING  SHOW    TRACING

CQL help topics:
================
AGGREGATES               CREATE_KEYSPACE           DROP_TRIGGER      TEXT     
ALTER_KEYSPACE           CREATE_MATERIALIZED_VIEW  DROP_TYPE         TIME     
ALTER_MATERIALIZED_VIEW  CREATE_ROLE               DROP_USER         TIMESTAMP
ALTER_TABLE              CREATE_TABLE              FUNCTIONS         TRUNCATE 
ALTER_TYPE               CREATE_TRIGGER            GRANT             TYPES    
ALTER_USER               CREATE_TYPE               INSERT            UPDATE   
APPLY                    CREATE_USER               INSERT_JSON       USE      
ASCII                    DATE                      INT               UUID     
BATCH                    DELETE                    JSON            
BEGIN                    DROP_AGGREGATE            KEYWORDS        
BLOB                     DROP_COLUMNFAMILY         LIST_PERMISSIONS
BOOLEAN                  DROP_FUNCTION             LIST_ROLES      
COUNTER                  DROP_INDEX                LIST_USERS      
CREATE_AGGREGATE         DROP_KEYSPACE             PERMISSIONS     
CREATE_COLUMNFAMILY      DROP_MATERIALIZED_VIEW    REVOKE          
CREATE_FUNCTION          DROP_ROLE                 SELECT          
CREATE_INDEX             DROP_TABLE                SELECT_JSON    

cqlsh> EXPAND ON
Now Expanded output is enabled
cqlsh> SELECT * FROM system.local ;  

@ Row 1
/*
* 提示:该行代码过长,系统自动注释不进行高亮。一键复制会移除系统注释 
* -------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
*/
 key                     | local
 bootstrapped            | COMPLETED
 broadcast_address       | 127.0.0.1
 cluster_name            | Test Cluster
 cql_version             | 3.4.4
 data_center             | datacenter1
 gossip_generation       | 1618622481
 host_id                 | 998e3685-a29a-4821-99f6-c6777d2b8c2d
 listen_address          | 127.0.0.1
 native_protocol_version | 4
 partitioner             | org.apache.cassandra.dht.Murmur3Partitioner
 rack                    | rack1
 release_version         | 3.11.10
 rpc_address             | 127.0.0.1
 schema_version          | e84b6a60-24cf-30ca-9b58-452d92911703
 thrift_version          | 20.1.0
/*
* 提示:该行代码过长,系统自动注释不进行高亮。一键复制会移除系统注释 
* tokens                  | {'-1059970518849949708', '-1106099899304641834', '-1238429254808839807', '-1325247140355966396', '-1358168815470669603', '-1410457747424463415', '-1475040429037141445', '-1550260593960270025', '-1707146254083980414', '-1724518984375653974', '-1800186084666956563', '-1819832382110306211', '-2023226054307100417', '-2288236013672226800', '-2360795295294848575', '-2371596229120040796', '-2392173588527051709', '-2399010299570666012', '-2479278827410348408', '-2690487134313788538', '-2710875722581040486', '-2727303159158988770', '-28181632715248606', '-2883420743930240679', '-2901682558827320880', '-2943144007383526208', '-296859040773112263', '-3002131937638094243', '-3047248886289394761', '-3115852767080762276', '-3266937861042506259', '-3312791910272571667', '-3357785440490409515', '-3374546614721247776', '-3467403156780876978', '-3501966610776086311', '-3505108955170264412', '-3596849082238810985', '-3726286346716991841', '-3787000030425614006', '-3790638530365272827', '-3886847532807427744', '-3970192681210920181', '-4097581544543754026', '-4110583549846157387', '-4142542546815909784', '-4155337642802549026', '-4179209352944864572', '-4239055494435505678', '-4300112337665982062', '-4313624938118543566', '-4412567971425010144', '-4533757503470496370', '-4577907438019113593', '-4604788521636221284', '-4872570692811385503', '-4872857528535125674', '-4966264742649267143', '-498993633262115712', '-498995602828931955', '-4995830356482600146', '-503815095989811774', '-5082288725331398838', '-5112237665430359330', '-5206605759990662384', '-5219704484069950972', '-5239762465467273427', '-5262538022691489049', '-5289215414862026523', '-5663645031476097178', '-5690075031493520796', '-5751861926394325815', '-5762485836695674620', '-5825958799148339067', '-5882218636658703061', '-5893336564090004861', '-5912970346841466266', '-5967672189313899876', '-6167833628704304174', '-6208068223559912337', '-633971104034032066', '-6418985479173057807', '-6562264968516243146', '-6663608525214124853', '-6722344809108989315', '-6797550961169275198', '-6806711979650264602', '-6823770508046782445', '-6999523480145132293', '-7029337319055480736', '-7285854535266130748', '-7294322189180666228', '-7424092485530662389', '-7476702472567874023', '-7480609565780832149', '-7488888303400249562', '-7659958287185057556', '-7698453725005033841', '-7706320468376462711', '-7815622138620555220', '-7985983715988657981', '-8088855995318421399', '-8112870702266152768', '-8171658063028398996', '-8189172598240847324', '-8287461069206404016', '-829960682812252396', '-840880703868778475', '-8481695722049140705', '-8482498229219545839', '-8521072465859182057', '-8521170518832417460', '-8562625666030321727', '-8584158896987685284', '-8612049351703672579', '-8621147430467891720', '-862379669770207358', '-8689977367267793991', '-8736640459750930800', '-8794805973459347081', '-8860305338174377185', '-8869313664359552011', '-8994723259923613376', '-8998619034114379730', '-9065013741479699232', '-9109989791718001004', '-9168117153989861361', '-92511083541618456', '-936809484769871908', '1021453340428248216', '103181100959683573', '1035759329018851214', '1137409327807411883', '1272742555186489540', '1392011403035246162', '1422172840665737761', '1445847746217749010', '146202792505278799', '1542652072547894287', '1650316910854127337', '1667367901741764640', '1707798887626747646', '176820103251969045', '1782730794015248394', '2081917393958604387', '21037199887699021', '2151721886036370446', '2215022010866573228', '2260448510118628141', '2279270351481061545', '2300740737891806952', '2349488077106068058', '2385045602202170545', '2407581662970272339', '2545662092543191882', '259019894134848516', '26167514532315983', '2617556006151940812', '2617617087730179070', '2687582421405705578', '2743804868413912702', '3020228346059974697', '3074005852523335049', '3196916651346312150', '3198624218045843073', '3276771480223445217', '3289388694606379464', '3429790339998608867', '3443481153596840996', '3496753914241833356', '361802490624215176', '3628536831941748115', '3671452387603830787', '3739816229800358797', '3791854370991820683', '3803887540420119541', '3839431476203924294', '3926753055366476793', '3939081789143208313', '3939422157986663435', '3960359415109292425', '3961729061350795036', '4159376400260616148', '4227878370342429431', '4337235045782771349', '4345672293170647530', '4434149811026271111', '4485232080699009201', '4858041750153597977', '4898961328818622224', '4921237588532151118', '5072436562143541597', '5104096915535183868', '5135268762733471127', '5234691067847685698', '5268547676667423253', '5503249240116844525', '5530614559979644822', '5650664518406569941', '5780652791710828317', '5867589962667953004', '5970642375134485315', '6135036457714129267', '6178444266261682807', '6187729250758977124', '6202686383047062207', '6209966173276482479', '6272739075155561189', '6295945125879555177', '6518988022671745385', '6617498274388913820', '6649560864260998555', '6656988463181445799', '6744140485331736790', '6817906325611738613', '6856715148617807304', '6884294742612441944', '6907946715397884970', '6934866864547495081', '7174530296748650134', '7242807834460185743', '7389834586868484164', '7528046363327969290', '7583339281433411638', '7613144889415005730', '7641995119108142254', '7667376389234525814', '7685381025685870433', '7788314208156820738', '7816442674471847321', '7827558661413299986', '7993772984660043650', '8031555205789640911', '8056228186704086402', '8115486383227060370', '8138054669683458311', '8140043868192999217', '8157146702817239374', '8219843195015409930', '8241285675619470637', '8263554485286518282', '8289550982323879723', '8323214680037760934', '8400056439041669425', '8425935122841575031', '8442319271367915751', '8636659126357397474', '8643729579992142031', '8864383007129181777', '8905517994562238626', '8990659912570626764', '9015436124239191354', '9035163537957452900', '9129326339791611964', '955319836509523839', '963383790975214336'}
*/
 truncated_at            | null

(1 rows)
cqlsh> 
cqlsh> DESCRIBE KEYSPACES;

system_schema  system_auth  system  lhrdb  system_distributed  system_traces


cqlsh> select * from system_schema.keyspaces;

 keyspace_name      | durable_writes | replication
--------------------+----------------+-------------------------------------------------------------------------------------
        system_auth |           True | {'class': 'org.apache.cassandra.locator.SimpleStrategy', 'replication_factor': '1'}
      system_schema |           True |                             {'class': 'org.apache.cassandra.locator.LocalStrategy'}
 system_distributed |           True | {'class': 'org.apache.cassandra.locator.SimpleStrategy', 'replication_factor': '3'}
             system |           True |                             {'class': 'org.apache.cassandra.locator.LocalStrategy'}
      system_traces |           True | {'class': 'org.apache.cassandra.locator.SimpleStrategy', 'replication_factor': '2'}

(5 rows)

cqlsh> SHOW VERSION;
[cqlsh 5.0.1 | Cassandra 3.11.10 | CQL spec 3.4.4 | Native protocol v4]
cqlsh> 

3.2、二进制包安装

到Apache Cassandra 的官方网站下载最新版本的 Cassandra然后解压,即可完成安装。示例:下载3.11.9版本(请先在官网上确认版本号),操作如下

代码语言:javascript
复制
wget http://archive.apache.org/dist/cassandra/3.11.9/apache-cassandra-3.11.9-bin.tar.gz
tar -zxf apache-cassandra-3.11.9-bin.tar.gz -C /usr/local/
cd /usr/local/apache-cassandra-3.11.9

export PATH=/usr/local/apache-cassandra-3.11.9/bin:$PATH

👉 该包属于跨平台的,也可以同时用于Windows环境。

3.3、docker安装

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

代码语言:javascript
复制
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节点。

代码语言:javascript
复制
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集群了

代码语言:javascript
复制
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]# 

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

代码语言:javascript
复制
[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

代码语言:javascript
复制
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、配置补全功能

代码语言:javascript
复制
1、进入python2的环境变量下
2、执行
pip install pyreadline 

4.3、安装Windows客户端

执行报错:

代码语言:javascript
复制
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、版本问题

代码语言:javascript
复制
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/

本文结束。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-06-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DB宝 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 目录
  • 一、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.1、yum安装
                • 3.2、二进制包安装
                  • 3.3、docker安装
                    • 3.4、Docker创建Cassandra集群
                    • 四、常见配置
                      • 4.1、Cassandra开启远程连接
                        • 4.2、配置补全功能
                          • 4.3、安装Windows客户端
                            • 4.4、版本问题
                            • 五、参考文档
                            相关产品与服务
                            容器服务
                            腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                            领券
                            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档