重慶分公司,新征程啟航
為企業提供網站建設、域名注冊、服務器等服務
為企業提供網站建設、域名注冊、服務器等服務
Cassandra是一款分布式的結構化數據存儲方案(NoSql數據庫),存儲結構比Key-Value數據庫(像Redis)更豐富,但是比Document數據庫(如Mongodb)支持度有限;適合做數據分析或數據倉庫這類需要迅速查找且數據量大的應用.
Cassandra 集群特性比較豐富,考慮場景也比較多,如果想用好集群,集群本很多概念都要能夠了解,下面對相關概念進行簡介;
keyspace -> table –> column,對應關系型數據庫 database -> table -> column
cluster_name:集群名,同一集群的多個節點,集群名要一致;
seeds: 種子節點,集群中的全部機器的ip,以逗號隔開;
storage_port: Cassandra服務器與服務器之間連接的端口號,一般不需要修改,但要保證此端口上沒有防火墻;
listen_address: Cassandra集群中服務器與服務器之間相互通信的地址。如果留空,將默認使用服務器的機器名;
native_transport_port: 默認的CQL本地服務端口,本地的cql客戶端與服務器交互的端口;
7000作為集群通信端口(如果開啟了SSL就是7001端口)。
9042端口用于native協議的客戶端連接。
7199端口用于JMX,
9160端口用于廢棄的Thrift接口
data_file_directories: 數據文件存放的目錄,一個或多個
commitlog_directory: 提交信息的日志文件存放的目錄
saved_caches_directory: 緩存存放的目錄
有多個Rack組成的邏輯集合。比如同一棟樓里互相連接的機器
一個邏輯集合,有多個彼此臨近node的組成。比如一個機架上的所有物理機器。
Gossip是一種p2p協議,用于failure detection,跟蹤其他節點的狀態,每秒運行一次。
運用Phi Accrual Failure Detection實現failure detection
計算出一個結果level of suspicion,表示節點失敗的可能性。
具有靈活性,同時也避免了傳統heartbeat的不可靠。應為可能只是短暫的網絡擁塞,尤其是在公有云上。
snitch定義了集群中每個節點相對其他節點的鄰近度, 以此來確定從哪個節點讀取和寫入。
一般采用手動定義的模式,在cassandra.yaml配置為endpoint_snitch: GossipingPropertyFileSnitch
同時在cassandra-rackdc.properties配置當前節點的dc和rack,比如
Cassandra表示由集群管理的數據作為一個環。環中的每個節點被分配一個或多個由token描述的數據范圍,確定在環中的位置。token是用于標識每個分區的64位整數ID,范圍是-2^63 -- 2^63-1
通過hash算法計算partition key的hash值,以此確定存放在哪個節點
virtual node的概念簡稱vnode,原先的token范圍被縮減為多個更小的token范圍。每個節點包含多個token范圍。默認每個節點產生256個token范圍(通過num_tokens調節),也就是256個vnode。在2.0以后默認開啟。在性能差的節點上,可以適當減少num_tokens的值。
partitioners決定數據存放在哪個vnode上。它是一個hash函數,計算每行的partition key的hash值。
代碼在org.apache.cassandra.dht包里,目前主要用Murmur3Partitioner、DHT即為distributed hash table。
第一份復制存在對應的vnode中。其他復制的存放位置由replica strategy(或叫replica placement strategy)決定
主要有兩種策略:
SimpleStrategy
將副本放置在環上的連續節點處,從分區器指示的節點開始。
NetworkTopologyStrategy
允許為每個數據中心指定不同的復制因子。在數據中心內,它將副本分配給不同的rack,以大限度地提高可用性
根據CAP理論,一致性,可用性和分區容忍性不可兼得,cassandra通過設置讀寫時最少響應節點的數量,實現了可調的一致性。
可選的一致性級別:ANY, ONE, TWO,THREE, QUORUM, ALL,其中QUORUM,ALL是強一致性。強一致性公式:R+W>N R:讀復制數, W:寫復制數,N:復制因子
可以連接任一節點來執行讀寫操作,被連接的節點叫做Coordinator Nodes,需要處理讀寫一致性。比如:寫到多個節點,從多個節點讀取
當執行一個寫操作時,數據被直接寫到commit log文件,并將設置commit log中的dirty flag為1。然后將數據寫到內存memtable,每個memtable對應一個表,當memtable的大小達到一個限值后會被寫入磁盤SSTable,然后將commit log中的dirty flag設為0
有三種cache:
key cache
緩存partiton keys到row index entries的映射,存在jvm heap
row cache
緩存常用的row,存在off heap
counter cache
提升counter性能
一種寫入高可用特性,當寫入請求發給coordinator是,replica節點可能因為種種原因不可用(網絡、硬件等),此時coordinator會臨時保存寫請求,等到replica節點重新上線時再寫入。默認保留兩個小時
SStables文件是不可修改的。刪除數據被當做一個update,會被更新為tombstone。在compact運行之前,它可以抑制原來的值。
設置中:Garbage Collection Grace Seconds(GCGraceSeconds),默認864,000,10天。
會清理超過這個時間的tombstones。當節點不可用時間超過這個這個時間,會被替換
是個快速的、非確定性算法,用于確定測試元素是否在集合中。以此降低不必要的磁盤讀取。可能得到一個false-positive結果。通過將數據集映射到bit array上,一種特殊的緩存。
SSTables是不可變的,通過compaction。重新生成一個新的SSTable文件(此文件中不包含不需要的數據,比如被刪除的數據)
三種策略:
SizeTieredCompactionStrategy (STCS)
默認的策略,寫密集型
LeveledCompactionStrategy (LCS)
讀密集型
DateTieredCompactionStrategy (DTCS)
用于基于時間或日期的數據
assandra使用Anti-Entropy協議,這是一種用于修復復制集數據的gossip協議
有兩種情況
read repair
讀取時發現有不是最新的數據。此時開始修復
Anti-Entropy repair
通過nodetool手動運行修復
Merkle Trees來源于Ralph Merkle,也叫做hash tree,是一種二叉樹。每個父節點是它直接子節點的hash值,用于減少網絡I/O。
cassandra采用分階段事件驅動架構,SEDA: An Architecture for Well-Conditioned, Scalable Internet Services
一個stage由事件隊列、事件處理器和線程池組成
controller決定stage的調度和線程申請。主要代碼在org.apache.cassandra.concurrent.StageManager
以下操作都是作為stage來執行的
Read (local reads)
Mutation (local writes)
Gossip
Request/response (interactions with other nodes)
Anti-entropy (nodetool repair)
Read repair
Migration (making schema changes)
Hinted handoff
system_traces
system_schema
keyspaces
tables
columns
存儲kespace,table,column的定義
- materialized_views
存儲可用的view
- functions
用戶定義函數
- types
用戶自定義類型
- triggers
每個表的觸發配置
- aggregates
聚合定義
system_auth
system
local
peers
存儲節點信息
available_ranges
range_xfers
存儲token范圍
materialized_ views_builds_in_progres
built_materialized_views
跟蹤view的構建
paxos
存儲paxos狀態
batchlog
存儲 atomic batch操作的狀態
size_estimates
存儲每個表的分區的估計數量,用于hadoop集成
https://www.2cto.com/database/201802/717564.html
https://blog.csdn.net/zhuwinmin/article/details/76066642
https://segmentfault.com/a/1190000015610357
另外有需要云服務器可以了解下創新互聯scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業上云的綜合解決方案,具有“安全穩定、簡單易用、服務可用性高、性價比高”等特點與優勢,專為企業上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。