目录

一、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. HBase1.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
1docker run -d --name lhrcassandra -h lhrcassandra \
2 -p 9042:9042 \
3 --privileged=true lhrbest/lhrcentos76:8.2 \
4 /usr/sbin/init
5
6docker exec -it lhrcassandra bash
将Cassandra仓库添加到yum源中:
1cat > /etc/yum.repos.d/cassandra.repo <<"EOF"
2[cassandra]
3name=Apache Cassandra
4baseurl=https://downloads.apache.org/cassandra/redhat/311x/
5gpgcheck=1
6repo_gpgcheck=1
7gpgkey=https://downloads.apache.org/cassandra/KEYS
8EOF
执行yum install命令:
1yum install -y cassandra
安装完以后就是cassandra服务了
1# 以root用户启动cassandra
2cassandra -R
使用-f选项告诉Cassandra保留在前台,而不是作为后台进程运行。如果一切顺利,您可以看到Cassandra服务器启动。
命令行直接输入cqlsh即可连接到本地cassandra数据库,就像直接输入mysql回车一样
1[root@lhrcentos76 /]# cassandra -R
2[root@lhrcentos76 /]#
3[root@lhrcentos76 /]# ps -ef|grep cass
4root 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
5root 7810 6244 0 09:34 pts/0 00:00:00 grep --color=auto cass
6[root@lhrcentos76 /]#
7[root@lhrcentos76 /]# nodetool status
8Datacenter: datacenter1
9=======================
10Status=Up/Down
11|/ State=Normal/Leaving/Joining/Moving
12-- Address Load Tokens Owns (effective) Host ID Rack
13UN 127.0.0.1 70.75 KiB 256 100.0% 998e3685-a29a-4821-99f6-c6777d2b8c2d rack1
14
15[root@lhrcentos76 /]#
16[root@lhrcentos76 /]# tail -f /var/log/cassandra/system.log
17INFO [MigrationStage:1] 2021-04-17 09:21:22,421 ColumnFamilyStore.java:421 - Initializing system_auth.role_permissions
18INFO [MigrationStage:1] 2021-04-17 09:21:22,438 ColumnFamilyStore.java:421 - Initializing system_auth.roles
19INFO [main] 2021-04-17 09:21:22,502 StorageService.java:1536 - JOINING: Finish joining ring
20INFO [main] 2021-04-17 09:21:23,220 NativeTransportService.java:68 - Netty using native Epoll event loop
21INFO [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
22INFO [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]
23INFO [main] 2021-04-17 09:21:23,423 Server.java:159 - Starting listening for CQL clients on localhost/127.0.0.1:9042 (unencrypted)...
24INFO [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
25INFO [main] 2021-04-17 09:21:23,508 CassandraDaemon.java:650 - Startup complete
26INFO [OptionalTasks:1] 2021-04-17 09:21:32,986 CassandraRoleManager.java:372 - Created default superuser role 'cassandra'
27[root@lhrcentos76 /]# cqlsh
28Connected to Test Cluster at 127.0.0.1:9042.
29[cqlsh 5.0.1 | Cassandra 3.11.10 | CQL spec 3.4.4 | Native protocol v4]
30Use HELP for help.
31cqlsh> SELECT cluster name, listen_address FROM system.local;
32SyntaxException: line 1:15 no viable alternative at input 'name' (SELECT [cluster] name...)
33cqlsh>
34cqlsh> SELECT cluster_name, listen_address FROM system.local;
35
36 cluster_name | listen_address
37--------------+----------------
38 Test Cluster | 127.0.0.1
39
40(1 rows)
41
42cqlsh> DESCRIBE CLUSTER;
43
44Cluster: Test Cluster
45Partitioner: Murmur3Partitioner
46
47
48cqlsh> ?
49
50Documented shell commands:
51===========================
52CAPTURE CLS COPY DESCRIBE EXPAND LOGIN SERIAL SOURCE UNICODE
53CLEAR CONSISTENCY DESC EXIT HELP PAGING SHOW TRACING
54
55CQL help topics:
56================
57AGGREGATES CREATE_KEYSPACE DROP_TRIGGER TEXT
58ALTER_KEYSPACE CREATE_MATERIALIZED_VIEW DROP_TYPE TIME
59ALTER_MATERIALIZED_VIEW CREATE_ROLE DROP_USER TIMESTAMP
60ALTER_TABLE CREATE_TABLE FUNCTIONS TRUNCATE
61ALTER_TYPE CREATE_TRIGGER GRANT TYPES
62ALTER_USER CREATE_TYPE INSERT UPDATE
63APPLY CREATE_USER INSERT_JSON USE
64ASCII DATE INT UUID
65BATCH DELETE JSON
66BEGIN DROP_AGGREGATE KEYWORDS
67BLOB DROP_COLUMNFAMILY LIST_PERMISSIONS
68BOOLEAN DROP_FUNCTION LIST_ROLES
69COUNTER DROP_INDEX LIST_USERS
70CREATE_AGGREGATE DROP_KEYSPACE PERMISSIONS
71CREATE_COLUMNFAMILY DROP_MATERIALIZED_VIEW REVOKE
72CREATE_FUNCTION DROP_ROLE SELECT
73CREATE_INDEX DROP_TABLE SELECT_JSON
74
75cqlsh> EXPAND ON
76Now Expanded output is enabled
77cqlsh> SELECT * FROM system.local ;
78
79@ Row 1
80-------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
81 key | local
82 bootstrapped | COMPLETED
83 broadcast_address | 127.0.0.1
84 cluster_name | Test Cluster
85 cql_version | 3.4.4
86 data_center | datacenter1
87 gossip_generation | 1618622481
88 host_id | 998e3685-a29a-4821-99f6-c6777d2b8c2d
89 listen_address | 127.0.0.1
90 native_protocol_version | 4
91 partitioner | org.apache.cassandra.dht.Murmur3Partitioner
92 rack | rack1
93 release_version | 3.11.10
94 rpc_address | 127.0.0.1
95 schema_version | e84b6a60-24cf-30ca-9b58-452d92911703
96 thrift_version | 20.1.0
97 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'}
98 truncated_at | null
99
100(1 rows)
101cqlsh>
102cqlsh> DESCRIBE KEYSPACES;
103
104system_schema system_auth system lhrdb system_distributed system_traces
105
106
107cqlsh> select * from system_schema.keyspaces;
108
109 keyspace_name | durable_writes | replication
110--------------------+----------------+-------------------------------------------------------------------------------------
111 system_auth | True | {'class': 'org.apache.cassandra.locator.SimpleStrategy', 'replication_factor': '1'}
112 system_schema | True | {'class': 'org.apache.cassandra.locator.LocalStrategy'}
113 system_distributed | True | {'class': 'org.apache.cassandra.locator.SimpleStrategy', 'replication_factor': '3'}
114 system | True | {'class': 'org.apache.cassandra.locator.LocalStrategy'}
115 system_traces | True | {'class': 'org.apache.cassandra.locator.SimpleStrategy', 'replication_factor': '2'}
116
117(5 rows)
118
119cqlsh> SHOW VERSION;
120[cqlsh 5.0.1 | Cassandra 3.11.10 | CQL spec 3.4.4 | Native protocol v4]
121cqlsh>
3.2、二进制包安装
到Apache Cassandra 的官方网站下载最新版本的 Cassandra然后解压,即可完成安装。示例:下载3.11.9版本(请先在官网上确认版本号),操作如下
1wget http://archive.apache.org/dist/cassandra/3.11.9/apache-cassandra-3.11.9-bin.tar.gz
2tar -zxf apache-cassandra-3.11.9-bin.tar.gz -C /usr/local/
3cd /usr/local/apache-cassandra-3.11.9
4
5export PATH=/usr/local/apache-cassandra-3.11.9/bin:$PATH
👉 该包属于跨平台的,也可以同时用于Windows环境。
3.3、docker安装
https://hub.docker.com/_/cassandra
1docker pull cassandra:3.11
2
3docker run --name lhrcassandra311 -d cassandra:3.11
4docker exec -it lhrcassandra311 bash
3.4、Docker创建Cassandra集群
Docker Hub上已经提供了Cassandra的官方镜像,可以方便地创建单节点Cassandra实例或Cassandra集群。Cassandra采用去中心化的集群架构,没有master节点的概念;但是会有seed节点在新节点连入时通知当前集群。
下面的Docker Compose模板将为你创建一个包含3个节点的Cassandra集群,其中第一个容器“cassandra-1”为seed节点。
1mkdir -p /cassandra/
2
3cat > /cassandra/docker-compose.yml <<"EOF"
4version: '2'
5services:
6 cassandra-1:
7 image: cassandra:3.11
8 container_name: cassandra-1
9 environment:
10 - CASSANDRA_BROADCAST_ADDRESS=cassandra-1
11 ports:
12 - 7000
13 restart: always
14 cassandra-2:
15 image: cassandra:3.11
16 container_name: cassandra-2
17 environment:
18 - CASSANDRA_BROADCAST_ADDRESS=cassandra-2
19 - CASSANDRA_SEEDS=cassandra-1
20 ports:
21 - 7000
22 depends_on:
23 - cassandra-1
24 restart: always
25 cassandra-3:
26 image: cassandra:3.11
27 container_name: cassandra-3
28 environment:
29 - CASSANDRA_BROADCAST_ADDRESS=cassandra-3
30 - CASSANDRA_SEEDS=cassandra-1
31 ports:
32 - 7000
33 depends_on:
34 - cassandra-2
35 restart: always
36EOF
注意修改镜像的版本。
现在,我们可以轻松利用 docker-compose 命令来启动Cassandra集群了
1cd /cassandra/
2docker-compose up -d
3
4[root@docker35 cassandra]# docker-compose up -d
5Building with native build. Learn about native build in Compose here: https://docs.docker.com/go/compose-native-build/
6Creating network "cassandra_default" with the default driver
7Creating cassandra-1 ... done
8Creating cassandra-2 ... done
9Creating cassandra-3 ... done
10[root@docker35 cassandra]#
启动之后,我们可以方便地查看集群状态
1[root@docker35 cassandra]# docker-compose ps
2 Name Command State Ports
3---------------------------------------------------------------------------------------------------------------------
4cassandra-1 docker-entrypoint.sh cassa ... Up 0.0.0.0:1049->7000/tcp, 7001/tcp, 7199/tcp, 9042/tcp, 9160/tcp
5cassandra-2 docker-entrypoint.sh cassa ... Up 0.0.0.0:1048->7000/tcp, 7001/tcp, 7199/tcp, 9042/tcp, 9160/tcp
6cassandra-3 docker-entrypoint.sh cassa ... Up 0.0.0.0:1047->7000/tcp, 7001/tcp, 7199/tcp, 9042/tcp, 9160/tcp
7
8[root@docker35 cassandra]# docker exec -it cassandra-1 cqlsh cassandra-2 -e "DESCRIBE CLUSTER"
9
10Cluster: Test Cluster
11Partitioner: Murmur3Partitioner
四、常见配置
4.1、Cassandra开启远程连接
修改/etc/cassandra/default.conf/cassandra.yaml
1sed -i 's/start_rpc: false/start_rpc: true/g' /etc/cassandra/default.conf/cassandra.yaml
2sed -i 's/rpc_address: localhost/rpc_address: 0.0.0.0/g' /etc/cassandra/default.conf/cassandra.yaml
3sed -i 's/# broadcast_rpc_address: 1.2.3.4/broadcast_rpc_address: 1.2.3.4/g' /etc/cassandra/default.conf/cassandra.yaml
4
5-- 远程测试9042端口
6telnet 192.168.66.35 9042
7
8-- 连接
9cqlsh 172.17.0.17
10cqlsh 172.17.0.17 9042
4.2、配置补全功能
11、进入python2的环境变量下
22、执行
3pip install pyreadline
4.3、安装Windows客户端
执行报错:
1C:\Users\lhrxxt>cqlsh 192.168.66.35 9042
2 File "D:\Program Files\apache-cassandra-3.4-bin\apache-cassandra-3.4\bin\\cqlsh.py", line 146
3 except ImportError, e:
4 ^
5SyntaxError: 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、版本问题
1C:\Users\lhrxxt>cqlsh 192.168.66.35 9042
2Connection 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']",)})
3C:\Users\lhrxxt>cqlsh 192.168.66.35 9042 --cqlversion=3.4.4
4Connected to Test Cluster at 192.168.66.35:9042.
5[cqlsh 5.0.1 | Cassandra 3.11.10 | CQL spec 3.4.4 | Native protocol v4]
6Use HELP for help.
7WARNING: 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/
👉 若想学习其它更多有关Cassandra数据库的内容,请联系麦老师。
本文结束。

• 微信公众号:DB宝,作者:小麦苗
• 作者博客地址:http://blog.itpub.net/26736162/
• 作者微信:db_bao• 作者QQ:646634621,QQ群:230161599、618766405
• 提供Oracle OCP、OCM、高可用(rac+dg+ogg)和MySQL DBA培训
• 版权所有,欢迎分享本文,转载请保留出处• 若有侵权请联系小麦苗删除

★DB宝分享的IT资料:https://mp.weixin.qq.com/s/Iwsy-zkzwgs8nYkcMz29ag★DB宝笔试面试详解:https://mp.weixin.qq.com/s/Vm5PqNcDcITkOr9cQg6T7w

长按下图识别二维码,关注小麦苗的微信公众号:DB宝,学习最实用的数据库技术。







