千家信息网

开源Nosql数据库Cassandra3.0实战-集群部署与插件使用

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,简介Cassandra是一套开源分布式NoSQL数据库系统,Cassandra的主要特点是无中心的设计,其分布式集群由一堆数据库节点共同构成一个分布式网络服务,对Cassandra 的一个写操作,会被
千家信息网最后更新 2026年11月01日开源Nosql数据库Cassandra3.0实战-集群部署与插件使用

简介

Cassandra是一套开源分布式NoSQL数据库系统,Cassandra的主要特点是无中心的设计,其分布式集群由一堆数据库节点共同构成一个分布式网络服务,对Cassandra 的一个写操作,会被复制到其他节点上去,对Cassandra的读操作,也会被路由到某个节点上面去读取。对于一个Cassandra群集来说,扩展性能是比较简单的事情,只管在群集里面添加节点就可以了。

随着Nosql的火热,Hbase、Mongodb已然成了NoSQL数据库的代表,而Cassandra在国内的使用却不多(据说360公司在大规模使用),根据百度指数的显示cassandra的火热度远远低于mongodb和Hbase。

而在国外,根据数据库评分网站DB-Engines的16.10的最新数据,cassandra排名上升到了第7,排名远远高于Hbase。


  • 优点:

1、模式灵活

使用Cassandra,像文档存储,你不必提前解决记录中的字段。你可以在系统运行时随意的添加或移除字段。这是一个惊人的效率提升,特别是在大型部署上。

2、真正的可扩展性

Cassandra是纯粹意义上的水平扩展。为给集群添加更多容量,可以指向另一台电脑。你不必重启任何进程,改变应用查询,或手动迁移任何数据。

3、多数据中心识别

你可以调整你的节点布局来避免某一个数据中心起火,一个备用的数据中心将至少有每条记录的完全复制。

4、范围查询

如果你不喜欢全部的键值查询,则可以设置键的范围来查询。

5、列表数据结构

在混合模式可以将超级列添加到5维。对于每个用户的索引,这是非常方便的。

6、分布式写操作

有可以在任何地方任何时间集中读或写任何数据。并且不会有任何单点失败


  • 缺点

1. 读的性能太慢

无中心的设计,造成读数据时通过逆熵做计算,性能损耗很大,甚至会严重影响服务器运作。

2. 数据同步太慢(最终一致性延迟可能非常大)

由于无中心设计,要靠各节点传递信息。相互发通知告知状态,如果副本集有多份,其中又出现节点有宕机的情况,那么做到数据的一致性,延迟可能非常大,效率也很低的。

3. 用插入和更新代替查询,缺乏灵活性,所有查询都要求提前定义好。

与大多数数据库为读优化不同,Cassandra的写性能理论上是高于读性能的,因此非常适合流式的数据存储,尤其是写负载高于读负载的。与HBase比起来,它的随机访问性能要高很多,但不是很擅长区间扫描,因此可以作为HBase的即时查询缓存,由HBase进行批量的大数据处理,由Cassandra提供随机查询的接口

4. 不支持直接接入hadoop,不能实现MapReduce。

现在大数据的代名词就是hadoop,做为海量数据的框架不支持hadoop及MapReduce,就将被取代。除非Cassandra能够给出其他的定位,或者海量数据解决方案。DataStax公司,正在用Cassandra重构HDFS的文件系统,不知道是否可以成功。



一:部署cassandra

规划:

集群节点:3

10.10.8.3

10.10.8.4

10.10.8.5


(1)配置jdk

  • 10.10.8.3、10.10.8.4、10.10.8.5

$ wget http://download.oracle.com/otn-pub/java/jdk/8u112-b15/jdk-8u112-linux-x64.tar.gz$ tar xf jdk-8u112-linux-x64.tar.gz -C /opt$ vim /etc/profile增加export JAVA_HOME=/opt/jdk1.8.0_112export PATH=$PATH:$JAVA_HOME/binexport CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar$ source /etc/profile

(2)安装Cassandra

  • 10.10.8.3、10.10.8.4、10.10.8.5

$ wget http://apache.fayea.com/cassandra/3.0.9/apache-cassandra-3.0.9-bin.tar.gz$ tar xvf apache-cassandra-3.0.9-bin.tar.gz -C /opt$ ln -s  /opt/apache-cassandra-3.0.9 /opt/cassandra


(3)配置

  • 10.10.8.3、10.10.8.4、10.10.8.5

$ copy conf/cassandra.yaml conf/cassandra.yaml.bak$ vim conf/cassandra.yaml#cassandra-3.0.9的精简配置,可以运行集群的最低配置。cluster_name: 'My Cluster'            #集群名num_tokens: 256seed_provider:    - class_name: org.apache.cassandra.locator.SimpleSeedProvider      parameters:          - seeds: "10.10.8.3,10.10.8.4,10.10.8.5"   #节点ip列表listen_address: 10.10.8.5                 #进程监听地址storage_port: 7000                        #集群中节点通信的端口号start_native_transport: true              #开启native协议native_transport_port: 9042               #客户端的交互端口data_file_directories:    - /data/cassandra/dbdata              # 数据位置,多盘的话可以写多个目录commitlog_directory:    - /data/cassandra/commitlog           #commitlog的路径,与data目录分开磁盘,提高性能saved_caches_directory:    - /data/cassandra/caches              #缓存数据目录hints_directory:    - /data/cassandra/hintscommitlog_sync: batch                     #批量记录commitlog,每隔一段时间将数据commitlogcommitlog_sync_batch_window_in_ms: 2      #batch模式下,批量操作缓存的时间间隔#commitlog_sync: periodic                 #周期记录commitlog,每一次有数据更新都commitlog#commitlog_sync_period_in_ms: 10000       #periodic模式,刷新commitlog的时间间隔partitioner: org.apache.cassandra.dht.Murmur3Partitionerendpoint_snitch: SimpleSnitch



如果使用cassandra的默认配置,只需要修改如下行即可,其他性能参数请参照官方文档。

10 cluster_name: 'My Cluster'71 hints_directory: /data/cassandra/hints169 data_file_directories:170      - /data/cassandra/dbdata175 commitlog_directory: /data/cassandra/commitlog287 saved_caches_directory: /data/cassandra/caches343           - seeds: "10.10.8.3,10.10.8.4,10.10.8.5"473 listen_address: localhost


(4)创建对应的目录

  • 10.10.8.3、10.10.8.4、10.10.8.5

$ mkdir  -p /data/cassandra/{dbdata,commitlog,caches,hints}


(5)启动进程

  • 10.10.8.3、10.10.8.4、10.10.8.5

$ /opt/cassandra/bin/cassandra


二:插件工具使用

(1)nodetool工具

nodetool是cassandra的集群和节点的管理和信息查看工具。

$ /opt/cassandra/bin/nodetoolusage: nodetool [(-u  | --username )]        [(-pw  | --password )]        [(-pwf  | --password-file )]        [(-h  | --host )] [(-p  | --port )]  []


1:查看集群状态

$/opt/cassandra/bin/nodetool statusDatacenter: datacenter1=======================Status=Up/Down|/ State=Normal/Leaving/Joining/Moving--  Address    Load       Tokens       Owns (effective)  Host ID                               RackUN  10.10.8.3  304.71 KB  256          68.0%             64b6a935-caa6-4ed5-857b-70963e74a81d  rack1UN  10.10.8.4  173.84 KB  256          65.3%             db77bd8a-2655-41c6-b13e-584cf44b8162  rack1UN  10.10.8.5  297.2 KB   256          66.7%             8fac64f8-1ed9-4ca3-af70-dee9ebcf77c2  rack1

2:当前节点状态

$/opt/cassandra/bin/nodetool infoID                     : db77bd8a-2655-41c6-b13e-584cf44b8162Gossip active          : trueThrift active          : trueNative Transport active: trueLoad                   : 173.84 KBGeneration No          : 1478159246Uptime (seconds)       : 4554Heap Memory (MB)       : 297.65 / 7987.25Off Heap Memory (MB)   : 0.00Data Center            : datacenter1Rack                   : rack1Exceptions             : 0Key Cache              : entries 14, size 1.08 KB, capacity 100 MB, 110 hits, 127 requests, 0.866 recent hit rate, 14400 save period in secondsRow Cache              : entries 0, size 0 bytes, capacity 0 bytes, 0 hits, 0 requests, NaN recent hit rate, 0 save period in secondsCounter Cache          : entries 0, size 0 bytes, capacity 50 MB, 0 hits, 0 requests, NaN recent hit rate, 7200 save period in secondsToken                  : (invoke with -T/--tokens to see all 256 tokens)


3:关闭cassandra的进程

$ /opt/cassandra/bin/nodetool stopdaemonCassandra has shutdown.error: Connection refused-- StackTrace --java.net.ConnectException: Connection refused        at java.net.PlainSocketImpl.socketConnect(Native Method)        at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)        at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)        at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)


4:查看各个列的数据详细信息、读写次数,响应时间等

$ /opt/cassandra/bin/nodetool cfstatsKeyspace: system_traces        Read Count: 0        Read Latency: NaN ms.        Write Count: 0        Write Latency: NaN ms.        Pending Flushes: 0                Table: events                SSTable count: 0                Space used (live): 0                Space used (total): 0                Space used by snapshots (total): 0                Off heap memory used (total): 0                SSTable Compression Ratio: 0.0                Number of keys (estimate): 0                Memtable cell count: 0                Memtable data size: 0                Memtable off heap memory used: 0                Memtable switch count: 0


(2)cqlsh 命令行工具

cqlsh是cassandra的客户端命令行工具,替代了之前版本中的cassandra-cli,能实现对数据的增删改查等一些列的操作。

$ /opt/cassandra/bin/cqlshUsage: cqlsh [options] [host [port]]CQL Shell for Apache Cassandra


1:安装python2.7(依赖python)

$ yum install openssl-devel              #防止python编译后没有ssl模块,导致cqlsh不可用$ wget https://www.python.org/ftp/python/2.7/Python-2.7.tgz$ tar xf Python-2.7.tgz$ cd Python-2.7$ mkdir /usr/local/python27$ ./configure --prefix=/usr/local/python27$ make&&make install$ ln -s /usr/local/python27/bin/python2.7 /usr/bin/python2.7

如果遇到 ImportError: No module named _ssl ,就安装openssl-devel,然后再编译安装python

2:连接host

$ /opt/cassandra/bin/cqlsh 10.10.8.3 9042Connected to My Cluster at 10.10.8.3:9042.[cqlsh 5.0.1 | Cassandra 3.0.9 | CQL spec 3.4.0 | Native protocol v4]Use HELP for help.cqlsh> show version[cqlsh 5.0.1 | Cassandra 3.0.9 | CQL spec 3.4.0 | Native protocol v4]cqlsh> show hostConnected to My Cluster at 10.10.8.3:9042.


3:help命令可以看到 CQL数据操作语言的相关命令

cqlsh> helpDocumented shell commands:===========================CAPTURE  CLS          COPY  DESCRIBE  EXPAND  LOGIN   SERIAL  SOURCE   UNICODECLEAR    CONSISTENCY  DESC  EXIT      HELP    PAGING  SHOW    TRACINGCQL help topics:================AGGREGATES               CREATE_KEYSPACE           DROP_TRIGGER      TEXT    ALTER_KEYSPACE           CREATE_MATERIALIZED_VIEW  DROP_TYPE         TIME    ALTER_MATERIALIZED_VIEW  CREATE_ROLE               DROP_USER         TIMESTAMPALTER_TABLE              CREATE_TABLE              FUNCTIONS         TRUNCATEALTER_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_PERMISSIONSBOOLEAN                  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>




参考资料

连接:http://cassandra.apache.org/doc/latest/ ---官方文档

链接:http://jingyan.baidu.com/article/7e440953ec8a7e2fc0e2ef9b.html ---优点

链接:https://www.zhihu.com/question/19592244/answer/21430967 ---缺点

连接:http://yikebocai.com/2014/06/cassandra-principle/ ---原理


数据 节点 集群 性能 查询 数据库 工具 时间 配置 分布式 命令 模式 目录 进程 信息 数据中心 文档 状态 系统 缓存 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 百单网互联网科技有限公司 北京互联网科技有限公司 平安科技 互联网 万达互联网科技 互联网科技视频素材 天扬科技互联网广告 青岛中康互联网医疗科技有限公司 哈尔滨新华互联网科技学院 阿里互联网科技公司 互联网科技有哪些公司 新兴科技互联网创新大赛颁奖典礼 互联网媒体平台算高科技产业 链环科技传统企业怎么转型互联网 佛山市翊博互联网络科技有限公司 互联网科技创新的路径 科技互联网海报 南通创西澳互联网科技有限公司 广州有谷有贝互联网科技有限公司 互联网科技接地气 恒生互联网科技趋势 山东特亿宝互联网科技有限公司 互联网下的科技发展 金融科技与互联网金融 西安互联网科技 科技与互联网哪个更好 栖莱科技互联网股份有限公司 福建科技产业互联网发展 东莞新华互联网科技学校 中国互联网公司的科技投入 广东猫王互联网科技有限公司电话
0