阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

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

178次阅读
没有评论

共计 7955 个字符,预计需要花费 20 分钟才能阅读完成。

简介
  Cassandra 是一套开源分布式 NoSQL 数据库系统,Cassandra 的主要特点是无中心的设计,其分布式集群由一堆数据库节点共同构成一个分布式网络服务,对 Cassandra 的一个写操作,会被复制到其他节点上去,对 Cassandra 的读操作,也会被路由到某个节点上面去读取。对于一个 Cassandra 群集来说,扩展性能是比较简单的事情,只管在群集里面添加节点就可以了。
  随着 Nosql 的火热,Hbase、Mongodb 已然成了 NoSQL 数据库的代表,而 Cassandra 在国内的使用却不多(据说 360 公司在大规模使用),根据百度指数的显示 cassandra 的火热度远远低于 mongodb 和 Hbase。

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

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

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

 

优点:

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_112
export PATH=$PATH:$JAVA_HOME/bin
export 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: 256
seed_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/hints
commitlog_sync: batch                    #批量记录 commitlog,每隔一段时间将数据 commitlog
commitlog_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.Murmur3Partitioner
endpoint_snitch: SimpleSnitch

如果使用 cassandra 的默认配置,只需要修改如下行即可,其他性能参数请参照官方文档。
10 cluster_name: ‘My Cluster’
71 hints_directory: /data/cassandra/hints
169 data_file_directories:170      – /data/cassandra/dbdata
175 commitlog_directory: /data/cassandra/commitlog
287 saved_caches_directory: /data/cassandra/caches
343          – 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/nodetool
usage: nodetool [(-u <username> | –username <username>)]
        [(-pw <password> | –password <password>)]
        [(-pwf <passwordFilePath> | –password-file <passwordFilePath>)]
        [(-h <host> | –host <host>)] [(-p <port> | –port <port>)] <command> [<args>]

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

spacer.gif
2: 当前节点状态
$/opt/cassandra/bin/nodetool info
ID                    : db77bd8a-2655-41c6-b13e-584cf44b8162
Gossip active          : true
Thrift active          : true
Native Transport active: true
Load                  : 173.84 KB
Generation No          : 1478159246
Uptime (seconds)      : 4554
Heap Memory (MB)      : 297.65 / 7987.25
Off Heap Memory (MB)  : 0.00
Data Center            : datacenter1
Rack                  : rack1
Exceptions            : 0
Key Cache              : entries 14, size 1.08 KB, capacity 100 MB, 110 hits, 127 requests, 0.866 recent hit rate, 14400 save period in seconds
Row Cache              : entries 0, size 0 bytes, capacity 0 bytes, 0 hits, 0 requests, NaN recent hit rate, 0 save period in seconds
Counter Cache          : entries 0, size 0 bytes, capacity 50 MB, 0 hits, 0 requests, NaN recent hit rate, 7200 save period in seconds
Token                  : (invoke with -T/–tokens to see all 256 tokens)

3: 关闭 cassandra 的进程
$ /opt/cassandra/bin/nodetool stopdaemon
Cassandra 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 cfstats
Keyspace: 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/cqlsh
Usage: 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
spacer.gif
2: 连接 host
$ /opt/cassandra/bin/cqlsh 10.10.8.3 9042
Connected 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 host
Connected to My Cluster at 10.10.8.3:9042.

3:help 命令可以看到 CQL 数据操作语言的相关命令
cqlsh> help
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>

本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-11/136721.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计7955字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中