暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Cassandra 简介

DB宝 2022-10-11
6194

目录

    一、Cassandra是什么
    1.1、应用场景
    1.1.1、互联网类应用
    1.1.2、多活
    1.1.3、业务灵活多变
    1.1.4、写密集、统计和分析型工作
    1.1.5、数据驱动的业务
    1.2、名词解释
    1.3Cassandra vs. MongoDB vs. Couchbase vs. HBase
    1.4、常用端口
    二、架构简介
    2.1. 核心结构
    2.2. 核心组件
    三、安装
    3.1yum安装
    3.2、二进制包安装
    3.3docker安装
    3.4Docker创建Cassandra集群
    四、常见配置
    4.1Cassandra开启远程连接
    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、名词解释

    术语说明
    cassandraCassandra是在线可靠的NoSQL分布式数据库服务,支持类SQL语法CQL,支持多地多活,提供了安全、容灾、监控、备份恢复等企业级能力。
    CQLCQL(Cassandra Query Language)是cassandra中提供的一种类SQL查询语言,具体用法可参考cassandra文档。
    数据中心云数据库Cassandra中,数据中心(Data Center,简称DC)是指在同一地域下,电力、网络隔离的一组节点。在多DC的部署架构下面,DC之间内网互通,同一DC内网络延时更小,不同DC之间故障隔离。
    Partitionerpartitioner用来确定将数据均衡分布在节点上的策略。云数据库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:12021-04-17 09:21:22,421 ColumnFamilyStore.java:421 - Initializing system_auth.role_permissions
    18INFO  [MigrationStage:12021-04-17 09:21:22,438 ColumnFamilyStore.java:421 - Initializing system_auth.roles
    19INFO  [main2021-04-17 09:21:22,502 StorageService.java:1536 - JOINING: Finish joining ring
    20INFO  [main2021-04-17 09:21:23,220 NativeTransportService.java:68 - Netty using native Epoll event loop
    21INFO  [Service Thread2021-04-17 09:21:23,355 GCInspector.java:285 - ConcurrentMarkSweep GC in 778ms.  Code Cache8832512 -> 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  [main2021-04-17 09:21:23,423 Server.java:159 - Starting listening for CQL clients on localhost/127.0.0.1:9042 (unencrypted)...
    24INFO  [main2021-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  [main2021-04-17 09:21:23,508 CassandraDaemon.java:650 - Startup complete
    26INFO  [OptionalTasks:12021-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宝,学习最实用的数据库技术。


      文章转载自DB宝,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

      评论