Cassandra 介紹


    前言

cassandra是一種NoSQL數據庫,No是指No Relational。cassandra的數據模型結合了Dynamo的key/value和BigTable  的面向列的特點,主要被設計為存儲大規模的分布式數據。

高可靠性:gossip座位通信協議,節點同等地位,無主從之分.(hbase是master/slaver,單點失效的可能)  p2p 去中心化

高可擴展:級聯可擴展,添加新節點操作簡單

最終一致性:cap定律

高效寫操作,  讀取指定鍵值的記錄較快, 但范圍查詢,與多個節點有關會慢,  讀取全表也慢

cql語言,與sql語句相似度高

 

 

https://my.oschina.net/silentriver/blog/182678  Cassandra – 理解關鍵概念和數據模型

 

 

 

1.官網情況

http://cassandra.apache.org/

"Manage massive amounts of data, fast, without losing sleep"

目前版本 3.9 (pgpmd5 and sha1), released on 2016-09-29.

線性擴展(Linear scalability)

每個節點identical.

 

2.安裝Cassandra

我的機器是windows10

下載  apache-cassandra-3.9-bin.tar.gz  后解壓

 

添加系統變量 : CASSANDRA_HOME

然后添加path環境變量為%CASSANDRA_HOME%\bin

windows 就可以輸入 cassandra  回車啟動了

 

Linux

    啟動 bin/cassandra -f    關閉Control-C

    或者    bin/cassandra       關閉 kill pid or pkill -f CassandraDaemon      查找進程 pgrep -f CassandraDaemon

查看狀態

bin/nodetool status

 

    3.配置集群

如果只是單點,則上面的配置就ok了,但如果要部署集群,則需要另外配置.

cassandra.yaml   

最基本的參數

  • cluster_name: the name of your cluster.
  • seeds: 以逗號分隔的集群種子IP地址. 當一個節點啟動的時候,它會從配置文件中讀取配置信息,這樣它就知道它屬於哪個集群,它需要跟哪個節點通信以獲取其他節點信息(這個通信節點稱為種子節點)。這些信息是必須在每個節點的cassandra.yaml里配置的。
  • storage_port: 非必須改變,除非此端口被防火牆牆了.整個集群內部要相同
  • listen_address: 本節點的IP, 因為要與其他節點通訊,所以這個參數設置正確非常重要.   或者,可以設置listen_interface告訴Cassandra which interface to use. Set only one, not both.
  • native_transport_port: 客戶端與Cassandra通訊的端口,保證不被牆.

 

更改目錄位置

  • data_file_directories: one or more directories where data files are located.
  • commitlog_directory: the directory where commitlog files are located.
  • saved_caches_directory: the directory where saved caches are located.
  • hints_directory: the directory where hints are located.

環境變量 cassandra-env.sh

  • JVM_OPTS:Cassandra啟動時候會把這個參數傳遞給JVM,所以額外的JVM命令行參數可以在這里設置

日志

logback.xml

 

3. CQLSH的使用

前期准備,需要python運行環境, python版本用2.7  不要用更高的版本

$ bin/cqlsh localhost
Connected to Test Cluster at localhost:9042.
[cqlsh 5.0.1 | Cassandra 3.8 | CQL spec 3.4.2 | Native protocol v4]
Use HELP for help.
cqlsh> SELECT cluster_name, listen_address FROM system.local;

 cluster_name | listen_address
--------------+----------------
 Test Cluster |      127.0.0.1

(1 rows)
cqlsh>

 

步驟一,create a keyspace

CREATE KEYSPACE devJavaSource WITH REPLICATION={'class': 'SimpleStrategy','replication_factor':1 };

tip:可能運行失敗,報錯 OperationTimedOut: errors={'127.0.0.1': 'Client request timeout. See Session.execute[_async](timeout)'}, last_host=127.0.0.1

修改 cqlsh.py 文件的參數DEFAULT_REQUEST_TIMEOUT_SECONDS 為更大的值可以解決(修改后重啟cassandra), 然而我也不知道具體原因.

步驟二, use created keyspace

USE devJavaSource;

步驟三, 新建表 插入數據  查詢

CREATE TABLE USERS (ID int PRIMARY KEY,NAME text,ADDRESS text);
INSERT INTO USERS (ID, NAME, ADDRESS) VALUES (11101, ‘john’, ‘Oakland’);

INSERT INTO USERS (ID, NAME, ADDRESS) VALUES (11102, ‘smith’, ‘California’);

INSERT INTO USERS (ID, NAME, ADDRESS) VALUES (11103, ‘Joe’, ‘Nederland’);
 SELECT * FROM USERS;

 

步驟四,建立索引

CREATE CUSTOM INDEX index_name ON keyspace_name.table_name ( column_name )
(USING class_name) (WITH OPTIONS = map)
cqlsh:devjavasource> create index on users(name);

 

    4.節點之間的交互 gossip

節點獨立,對等

最終一致性原理

gossip協議來發現集群種其他節點的位置和狀態信息

peer-to-peer,定期交換狀態信息

節點啟動  ------------------>從cassandra.yaml得到集群名稱,以及種子節點列表(因此每個節點的種子節點列表必須相同)

 

 選派誰做種子節點沒什么特別的意義,僅僅在於新節點加入到集群中時走gossip流程時有用,所以它們沒什么特權

 

Gossiper(進程)通過每個節點的心跳來感知節點是否存活,  可以根據網絡狀況設置靈敏度參數phi_convict_threshold

 

 

 

 

 

 

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM