• Cassandra在Windows上安装及使用方法


    http://docs.datastax.com/en/landing_page/doc/landing_page/archivedDocuments.html
    http://pimin.net/archives/388
    http://pimin.net/topics/tech/nosql/page/4
    一、基本介绍
    DataStax,是一家位于加州的初创公司,提供了一个商业版本的Apache Cassandra NoSQL数据库,近日该公司获得了4500万美元的D轮融资,该轮融资由Scale Ventures引导,这是一位新投资者,同时还有DFJ Growth和Next World Capital,现有的投资者Lightspeed Venture Partners、Crosslink Capital以及Meritech Capital Partners也进行了参投。从2010年发布产品以来,DataStax已经获得了总计8370万美元的风险投资。

    Cassandra目录结构

    由于NoSQL中没有像传统数据库那样定义数据的组织方式为关系型的,所以只要内部的数据组织采用了非关系型的方式,就可以称之为NoSQL数据库。
    目前,可以将众多的NoSQL数据库按照内部的数据组织形式进行如下分类:

    1. Key/Value的NoSQL数据库
    2. 面向文档的NoSQL数据库
    3. 面向列的NoSQL数据库
    4. 面向图的NoSQL数据库

    不同的数据组织适合于不同的应用场景,后面将进行介绍。

    SQL语言和关系型数据库(MySQL、PostgreSQL、Oracle等) 是通用的数据解决方案,占有绝大多数的市场。不过在最近兴起的NoSQL运动中,涌现出一批具备高可用性、支持线性扩展、支持Map/Reduce操作等特性的数据产品,它们具有如下特性:

    1. 频繁的写入操作、相对较少的读取统计信息的操作(如网站访问计数器),应该使用基于内存的Key/Value(键/值)存储系统(如Redis) 或者是具备本地更新特性的文档存储系统(如MongoDB)。
    2. 海量数据(如数据仓库中需要分析的数据) 适合存储在一个结构松散、分布式的文件存储系统中,如Hadoop。
    3. 存储二进制文件(如mp3或者pdf文档) 并且能够直接为用户的浏览器提供下载功能,可以使用AmazonS3。
    4. 临时性的数据(如网站的session、缓存HTML页面信息等) 适合存储在Memcache中。
    5. 如果希望数据具备高可用性,并且能够将数据丢失的风险降到最低,同时整个系统具备线性扩展的能力,可以考虑使用Cassandra和HBase。

    4. Cassandra单节点安装

    首先确保安装了JDK。

    然后,修改配置文件,cassandra-0.7.6-2的conf下有以下几个配置文件:

    (1) access.properties:设置每个数据库或者表的访问权限

    (2) cassandra.yaml:主配置文件,包括日志路径,数据存放路径,各种参数配置等

    (3) cassandra-topology.properties:配置网络的拓扑结构

    (4) log4j-server.properties:log4j的配置选项

    (5) passwd.properties:配置用户密码,与access.properties配合使用

    对于简单的使用,只需配置cassandra.yaml文件:

    (1) 集群名称cluster_name:同一个集群中的集群名称应该一样。

    (2) 数据存放路径data_file_directories:可以根据情况配置一个有写权限的路径

    (3) commit log路径commitlog_directory:同上

    (4) saved cache路径saved_caches_directory:同上

    (5) 日志文件路径log4j.appender.R.File:同上(这个选项在log4j-server.properties文件中)

    此外,还需要修改服务监听的地址和thrift访问地址,即ListenAddress和ThriftAddress,配置文件默认监听的都是localhost:

    1
    2
    3
    4
    5
    6
    7
    <!-- Cassandra节点之间通信的监听地址,这里设置所在节点的ip-->
     
    <ListenAddress>100.200.3.1</ListenAddress>
     
    <!-- 这个是Thrift监听的地址,建议设置为0.0.0.0 -->
     
    <ThriftAddress>0.0.0.0</ThriftAddress>

    经过上面的配置就可以启动节点了:

    进入bin目录,直接执行:./cassandra

    5. Cassandra多个节点安装

    首先,在各节点上,按照第4节方法配制各自对应文件。

    然后,配制seeds。Cassandra没有传统集群的中心节点,各个节点地位都是平等的,通过Gossip协议维持集群中的节点信息。为了使集群中的各节点在启动时能发现其他节点,需要指定种子节点(seeds),各节点都先和种子节点通信,通过种子节点获取其他节点列表,然后和其他节点通信。种子节点可以指定多个,通过在 conf/ cassandra.yaml中的seeds属性配置。

    seeds:

    - 100.200.3.81

    - 100.200.3.78

    6. Cassandra附带工具使用方法介绍

    bin目录下自带了很多工具,可以帮助用户很方便地进行一些操作。常用的工具有nodetool,cassandra-cli,sstable2json等

    (1) nodetool

    nodetool是一个cassandra集群管理工具,这里只简单介绍一些简单的命令,详细的命令可以参见工具的帮助信息。

    ring命令

    ring命令用于查看集群的节点信息,ring来源于consistent hash,在consistent hash中,各个节点组成一个环,通常称为ring。

    Info命令

    info可以参看某个节点负载,内存使用情况:

    cfstats命令

    cfstats命令可以查看各个CF的详细统计信息,包括读写次数、响应时间、memtable信息等。

    (2) cassandra-cli

    cassandra-cli是一个命令行工具,可以用于对数据库进行数据查询和检索。具体可参见这篇文章:

    (3) sstable2json

    将sstable中的数据转化为json格式,使用方法为:

    Usage: sstable2json [-f outfile] <sstable> [-k key [-k key [...]]]

    ===============================================
    一、安装
     
    1、安装cassandra
     
        1.1 下载安装程序
    在http://cassandra.apache.org/下载Cassandra的安装程序;
     
        1.2 安装配置
    1)解压下载后的程序apache-cassandra-2.2.6-bin.tar.gz到某个目录,如d:cassandra;
     
    2)修改conf目录下配置文件
        A)使用记事本打开cassandra.yaml文件,修改如下参数: 
        data_file_directories:
         - /var/lib/cassandra/data
        为 - d:cassandradata 
        注意:-后面需要有空格
     
        commitlog_directory: /var/lib/cassandra/commitlog
        为:commitlog_directory: d:cassandracommitlog
        saved_caches_directory: /var/lib/cassandra/saved_caches
        为:saved_caches_directory: d:cassandrasaved_caches
     
      B)使用记事本打开log4j-server.properties文件,修改如下参数:
        log4j.appender.R.File=/var/log/cassandra/system.log
        为:log4j.appender.R.File=D:Cassandralogs
     
    2、安装JRE
      
        2.1 下载安装程序
    在http://www.oracle.com/technetwork/java/javase/downloads/index.html上下载jre的安装程序;
    jre和jdk区别:jre只是java环境,jdk包含了开发工具和jre;
     
        2.2 直接双击执行jre-6u25-windows-i586.exe进行安装,默认安装在C:Program FilesJavajre6目录即可;
     
    3、配置环境变量
     
        3.1 打开windows的环境变量配置窗口
     
    鼠标右键点击我的电脑,选择属性,在弹出界面点击【高级】页签,再点击【环境变量】按钮;
     
        3.2 配置JAVA_HOME环境变量
    在“系统变量”添加JAVA_HOME,点击【系统变量】下方的【新建】按钮,输入
              变量名:JAVA_HOME
        变量值:C:Program FilesJavajre6
     
        3.3 配置Cassandra_HOME环境变量
    在“系统变量”添加Cassandra_HOME,点击【系统变量】下方的【新建】按钮,输入
              变量名:Cassandra_HOME
        变量值:D:EBOOKNoSQLapache-cassandra-2.2.6
     
    4、启动Cassandra
     
      开始运行中敲入cmd回车打开命令窗口,敲入cd D:EBOOKNoSQLapache-cassandra-2.2.6in回车,敲入d:回车,转到D:EBOOKNoSQLapache-cassandra-2.2.6in目录后,直接敲入cassandra就可以启动cassandra服务了,如下:
     
    D:EBOOKNoSQLapache-cassandra-2.2.6in>cassandra
    D:EBOOKNoSQLapache-cassandra-2.2.6in>cassandra
    WARNING! Powershell script execution unavailable.
       Please use 'powershell Set-ExecutionPolicy Unrestricted'
       on this user-account to run cassandra with fully featured
       functionality on this platform.
    Starting with legacy startup options
    Starting Cassandra Server
    INFO  14:02:03 Node configuration:[authenticator=AllowAllAuthenticator; authorizer=AllowAllAuthorizer; auto_bootstrap=true; auto_snapshot=true; batch_size_fail_threshold_in_kb=50; batch_size_warn_threshold_in_kb=5; batchlog_replay_throttle_in_kb=1024; broadcast_address=null; broadcast_rpc_address=null; cas_contention_timeout_in_ms=1000; client_encryption_options=<REDACTED>; cluster_name=Test Cluster; column_index_size_in_kb=64; commit
    ...
    ...
    artition":"NONE"},defaultTimeToLive=0,minIndexInterval=128,maxIndexInterval=2048,speculativeRetry=99.0PERCENTILE,droppedColumns={},triggers=[],isDense=false]
    INFO  14:02:14 Initializing system_auth.role_members
    INFO  14:02:15 Netty using Java NIO event loop
    INFO  14:02:15 Using Netty Version: [netty-buffer=netty-buffer-4.0.23.Final.208198c, netty-codec=netty-codec-4.0.23.Final.208198c, netty-codec-http=netty-codec-http-4.0.23.Final.208198c, netty-codec-socks=netty-codec-socks-4.0.23.Final.208198c, netty-common=netty-common-4.0.23.Final.208198c, netty-handler=netty-handler-4.0.23.Final.208198c, netty-transport=netty-transport-4.0.23.Final.208198c, netty-transport-rxtx=netty-transport-rxtx-4.0.23.Final.208198c, netty-transport-sctp=netty-transport-sctp-4.0.23.Final.208198c, netty-transport-udt=netty-transport-udt-4.0.23.Final.208198c]
    INFO  14:02:15 Starting listening for CQL clients on localhost/127.0.0.1:9042...
    INFO  14:02:15 Not starting RPC server as requested. Use JMX (StorageService->startRPCServer()) or nodetool (enablethrift) to start it
    INFO  14:02:25 Created default superuser role 'cassandra'
    验证有没有启动,用要确认Cassandra有没有再跑,可以用nodetool.bat这个工具进行确认。
    bin>nodetool -h 127.0.0.1 ring
    结果:
    D:EBOOKNoSQLapache-cassandra-2.2.6in>nodetool -h 127.0.0.1 ring
    Starting NodeTool
    
    Datacenter: datacenter1
    ==========
    Address    Rack        Status State   Load            Owns                Token
                                                                              9177302928968051776
    127.0.0.1  rack1       Up     Normal  97.06 KB        100.00%             -9165356309934760118
    127.0.0.1  rack1       Up     Normal  97.06 KB        100.00%             -9134459597765889899
    127.0.0.1  rack1       Up     Normal  97.06 KB        100.00%             -9066115578285445066
    127.0.0.1  rack1       Up     Normal  97.06 KB        100.00%             -9026304759784057275
    127.0.0.1  rack1       Up     Normal  97.06 KB        100.00%             -8878071990522880873
    ...
    ...
    127.0.0.1  rack1       Up     Normal  97.06 KB        100.00%             8623942122364639506
    127.0.0.1  rack1       Up     Normal  97.06 KB        100.00%             8714309346994183881
    127.0.0.1  rack1       Up     Normal  97.06 KB        100.00%             8719119404383607089
    127.0.0.1  rack1       Up     Normal  97.06 KB        100.00%             8725585482200212568
    127.0.0.1  rack1       Up     Normal  97.06 KB        100.00%             8765208445410304904
    127.0.0.1  rack1       Up     Normal  97.06 KB        100.00%             8809038993346282672
    127.0.0.1  rack1       Up     Normal  97.06 KB        100.00%             8962288472837700908
    127.0.0.1  rack1       Up     Normal  97.06 KB        100.00%             8999197537072308487
    127.0.0.1  rack1       Up     Normal  97.06 KB        100.00%             9045901750664612483
    127.0.0.1  rack1       Up     Normal  97.06 KB        100.00%             9154510419811999586
    127.0.0.1  rack1       Up     Normal  97.06 KB        100.00%             9177302928968051776
    
      Warning: "nodetool ring" is used to output all the tokens of a node.
      To view status related info of a node use "nodetool status" instead.
    
    
    
    D:EBOOKNoSQLapache-cassandra-2.2.6in>
    二、使用
     
    1、连接Cassandra服务
       从cassandra2.x之后,就没有了Cassandra CLI 的工具,而是CQL替代。开始运行中敲入cmd回车进入命令窗口,敲入cd D:EBOOKNoSQLapache-cassandra-2.2.6in后,在敲入d:回车转到bin目录中敲入cqlsh.bat命令回车,直接敲入如下命令可以连接到本机已经启动的cassandra数据
    D:EBOOKNoSQLapache-cassandra-2.2.6in>cqlsh.bat
    
    WARNING: console codepage must be set to cp65001 to support utf-8 encoding on Windows platforms.
    If you experience encoding problems, change your console codepage with 'chcp 65001' before starting cqlsh.
    
    Connected to Test Cluster at 127.0.0.1:9042.
    [cqlsh 5.0.1 | Cassandra 2.2.6 | CQL spec 3.3.1 | Native protocol v4]
    Use HELP for help.
    WARNING: pyreadline dependency missing.  Install to enable tab completion.
    cqlsh>
    2、创建keyspace
    create keyspace keyspace1;
    use keyspace1;
     
    3、创建column family
    create column family Standard1 with column_type = 'Standard' and comparator = 'BytesType';
    describe keyspace keyspace1;
    list standard1;
    drop column family standard1;
     
    --必须指定column_type和comparator
    create column family cf1 with column_type = 'Standard' and comparator = 'BytesType';
    create column family cf2 with column_type = 'Standard' and comparator = 'UTF8Type' and rows_cached = 10000;
    create column family Super1 with column_type=Super and comparator=BytesType;
     
    --设置列值
    set cf1['key_1']['column_1']='value_1';
    set cf1['key_1']['column_2']='value_2';
    set cf1['key_2']['column_1']='value_3';
    set cf1['key_2']['column_2']='value_4';
     
    --设置列值
    set cf2['key_1']['column_1']='value_1';
    set cf2['key_1']['column_2']='value_2';
    set cf2['key_2']['column_1']='value_3';
    set cf2['key_2']['column_2']='value_4';
     
    set super1['key_1']['column_1']='value_1';
     
    get cf2['key_2']['column_2'];  --提示错误Column family Super1 may only contain SuperColumns
     
    --取列值
    get cf1['key_1'];
    --计数
    count  cf1['key_1'];
    count  cf1['key_2'];
     
    --取列值
    get cf1['key_1']['column_1'];
    --删除列值
    del cf1['key_1']['column_1'];
     
    list cf2[key_1:];
     
    ---二级索引的使用
    1、定义:在Cassandra中,对列值(column values)的索引叫做"二级索引",它与列簇(column families)中对key的
     
    索引不同。二级索引允许我们对列值进行查询,并且在读取和写入的时候不会引起操作阻塞。
     
    2、使用方法:
    create keyspace demo;
    use demo;
    --注意大小写,索引birth_date
    create column family users with comparator=UTF8Type and column_metadata=
     
    [{column_name:full_name,validation_class:UTF8Type},
     
    {column_name:birth_date,validation_class:LongType,index_type:KEYS}];
     
    --插入数据:
    set的语法大概长的像下面这样:
    
    01.set Keyspace1.Standard1['geffzhang']['blog'] = 'http://www.dotnetting.cn'  
    02.                                                 
    03.                             \_ key             \_ value   
    04.                                       \_ column   
    05.          \_ keyspace  \_ column family  
    就按照上面的语法来加几个数据进去,然后用get把数据拉出来看看
    set users[a][full_name]='a';
    set users[a][birth_date]=1977;
     
    set users[b][full_name]='b';
    set users[b][birth_date]=1978;
     
    set users[c][full_name]='c';
    set users[c][birth_date]=1979;
     
    set users[d][full_name]='d';
    set users[d][birth_date]=1977;
     
    --查询birth_date=1977的数据:
    get users where birth_date=1977;
     
    --查询结果如下:
    [default@demo] get users where birth_date=1977;
    -------------------
    RowKey: a
    => (column=birth_date, value=1977, timestamp=1306733443578000)
    => (column=full_name, value=a, timestamp=1306733438406000)
    -------------------
    RowKey: d
    => (column=birth_date, value=1977, timestamp=1306733577125000)
    => (column=full_name, value=d, timestamp=1306733572687000)
     
    2 Rows Returned.
     
    --多个二级索引使用
    set users[a][card_no]='111';
     
    --更新列簇users设置card_no和birth_date都索引
    update column family users with comparator=UTF8Type and column_metadata=
     
    [{column_name:full_name,validation_class:UTF8Type},
     
    {column_name:birth_date,validation_class:LongType,index_type:KEYS},
     
    {column_name:card_no,validation_class:UTF8Type,index_type:KEYS}];
     
    --查询证件号码为111的列
    get users where card_no='111';
     
    get users where card_no='111' and birth_date=1977;
     
    --虽然full_name没有索引,但是也能够查出结果
    get users where card_no='111' and birth_date=1977 and full_name='a';
    get users where card_no='111' and full_name='a';
    get users where birth_date=1977 and full_name='a';
     
    --如果仅仅通过full_name查询则出错
    get users where full_name='a';
    --结果如下:
    [defualt@demo] get users where full_name='a';
    No indexed columns present in index clause with operator EQ
     
    --退出
    quit;

    Cassandra在设计的时候,就是支持Thrift的,这意味着我们可以使用多种语言开发。对于Cassandra的开发本身而言,这是使用Thrift的好处:支持多语言。坏处也是显而易见的:Thrift API功能过于简单,不具备在生产环境使用的条件。

    Cassandra 建议用户在它们的程序内用高阶API与Cassandrar进行通信,以C#来说,像是FluentCassandra 或 Aquiles。但是你也可以用官方出的最低阶API - Thrift 来与Cassandra沟通。

    Thrift这个是Cassandra自带的最简单的一类API,这个文件在apache-cassandra-0.5.1.中包含了。可以直接使用。我们也可以自己安装一个Thrift,然后通过cassandra.thrift文件自动生成。如果你要使用Cassandra,那么我们必须要了解Thrift API,毕竟所有的其他更加高级的API都是基于这个来包装的。

      1. 准备运行环境
        1.1 cassandra可以安装在windows和linux下,本例子安装在centos6.7的环境下。
        1.2 关闭防火墙。或者开放9042(默认的CQL本地服务端口)、9160(默认的Cassandra服务端口)、7000(Cassand集群内节点间通讯端口)、7199端口(Cassandra JMX 监控端口)
          关闭防火墙:
        1 service iptables stop
        2 chkconfig iptables off
              开放端口:  
        1 vi /etc/sysconfig/iptables
        2 -A INPUT -m state –state NEW -m tcp -p tcp –dport 3306 -j ACCEPT(仿照这个写)
        3 /etc/init.d/iptables restart
        1.3 安装JDK,配置环境变量
              下载JDK:
        yum -y install wget     //安装wget插件
        wget –P /usr http://download.oracle.com/otn/java/jdk/8u60-b15/jdk-8u60-linux-i586.rpm?AuthParam=1467614887_3fe640855a43a439fb5f5fec1f5045e2
        rpm -ivh jdk-8u60-linux-i586.rpm
              配置环境变量:
        复制代码
        1 vi /etc/profile
        2     JAVA_HOME=/usr/java/jdk1.8.0_60
        3     JRE_HOME=/usr/java/jdk1.8.0_60/jre
        4     PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
        5     CLASSPATH=:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
        6     export JAVA_HOME JRE_HOME PATH CLASSPAH
        7 source /etc/profile
        复制代码
      2. 安装
        2.1 下载并解压cassandra安装包,本例子用的版本是2.1.14(这个镜像不行的话去官网找别的镜像)
        1 wget http://mirrors.cnnic.cn/apache/cassandra/2.1.14/apache-cassandra-2.1.14-src.tar.gz
        2 tar -zxvf apache-cassandra-2.1.14-bin.tar.gz  -C /opt/cassandra

        2.2 新建cassandra数据存放的文件夹(用安装包的方式就需要这一步)。

        1 //可以根据磁盘情况设置这3个文件夹,但是要和cassandra.yaml里的想对应
        2 mkdir /var/lib/cassandra/data
        3 mkdir /var/lib/cassandra/commitlog
        4 mkdir /var/lib/cassandra/saved_caches

         2.3 打开解压后的/opt/apache-cassandra-2.1.14/cassandra/conf的目录,修改其中的cassandra.yaml中的一些参数

        复制代码
        1 cluster_name: 'xxx'  //集群名称。同一个集群要使用同一名称
        2 data_file_directories:
        3     - /var/lib/cassandra/data  //数据文件存放路径。打开这个注释,注意不要合并成一行,合并成一行好像会出问题,这里要与前面新建的文件夹对应。
        4 commitlog_directory: /var/lib/cassandra/commitlog //操作日志文件存放路径。打开注释,与前面新建的文件夹对应。
        5 saved_caches_directory: /var/lib/cassandra/saved_caches  //缓存文件存放路径。打开注释,与前面新建的文件夹对应。
        6 - seeds: "192.168.x.x"  //集群种子节点ip,新加入集群的节点从种子节点中同步数据。可配置多个,中间用逗号隔开。
        7 listen_address: 127.0.0.1  //需要监听的IP或主机名。改成本机IP
        8 rpc_address: 127.0.0.1  //用于监听客户端连接的地址。建议设置成IP或0.0.0.0。若设置0.0.0.0,则要放开broadcast_rpc_address: 1.2.3.4的注释。
        复制代码

        2.4 进入到bin目录下

        1 ./cassandra

        如果提示没有权限什么的

        1 ./cassandra -R //用root用户启动

        如果没有报什么奇奇怪怪的ERROR然后看到 Node /x.x.x.x state jump to NORMAL,这样cassandra就算安装完成了,也可以在在bin目录下使用./nodetool status 查看集群信息确认一下。

        UN 表示的是该服务器的状态,UN是运行中,DN是宕机。
        Note: xxxxxxx  这个问题是因为同一个键空间里存在不同复制策略的表,不影响使用,但是最好建表和修改表的时候注意一下。

  • 相关阅读:
    MySQL用户管理
    linux下杀死进程(kill)的N种方法
    Windows查看某个端口被谁占用
    SQL语句
    CentOS6.5 安装mysql-5.7.9
    Linux服务器安全之用户密钥认证登录
    Linux添加/删除用户和用户组
    linux命令killall 、kill 、pkill 命令详解
    linux下cat命令详解
    linux之sed用法
  • 原文地址:https://www.cnblogs.com/duanxz/p/5500511.html
Copyright © 2020-2023  润新知