cassandra架構學習

架構概述

1. 節點關係

    cassandra的所有節點都是對等的,沒有master和slave之分,數據分佈集羣內的各個節點上,因此沒有單點失敗問題。每個節點每一秒都會和集羣保持通訊。

2. 數據寫入

    每個節點都會維護一個寫提交日誌文件,每次寫入動作都會記錄在日誌中,以此保證寫入數據的持久性。實際的數據會首先寫入位於內存中的memtable結構,寫入的數據是進行索引處理過的,memtable相當於一個寫cache,當一個memtable寫滿後,該結構的數據會寫入位於磁盤上的SSTable文件,寫入數據時會自動在集羣內進行分片和複製。cassandra還會週期性的調用compaction過程將數據“壓實”,該過程主要是刪除過期和已經標註爲刪除的數據。

3. 訪問方式

    cassandra是一個面向行的數據庫。讀寫採用CQL語言,該語言和SQL語言類似。從該語言的角度來看,數據庫由一些表組成。一般而言,一個集羣中每一個應用都有一個keyspace(可以將其理解爲關係型數據庫中的一個庫。)開發者可以通過cqlsh使用CQL,也可以通過不同語言的驅動程序使用CQL。
    客戶端可以和任何一個節點建立連接和讀寫數據,當客戶端連接到一個節點時,該節點就成爲客戶端與集羣之間的協調者(coordinator),協調者負責將客戶端的請求發送給實際擁有該數據的節點。

術語

節點

    實際存儲數據的機器,它是cassandra的基本組件。

數據中心

    相關節點的集合,數據中心可以是物理的,也可以是虛擬的,數據中心負責配置副本集。數據中心不能跨物理位置。

集羣

   集羣由一個或多個數據中心組成,可以跨物理位置。

提交日誌

    所有的數據首先被寫入提交日誌,在這些數據被實際寫入SSTables之後,它可以被歸檔,刪除或者回收。

    從行獲取的排序的列的集合,一行由很多列組成,並且有一個主鍵。鍵的第一個部分是列的名字。

SSTable

    排序過的字符串表,它是一個不可修改的數據文件,只可追加數據,數據順序寫入磁盤,爲每個表單獨維護。

關鍵配置組件

Gossip

    點對點的通訊協議,集羣中的節點用本協議發現和分享位置和狀態信息。每個節點都會持久保存gossip信息,當節點重啓時,可以迅速使用這些信息。

Patitioner(分片器)

    分片器決定如何將數據分配到集羣的各個節點和那個節點保存數據的第一份副本。分片器可以說是一個hash函數,用於計算一個分片key的token。每行數據都由一個集羣內唯一的分片key標識,使用token將其分佈到集羣內的節點。目前cassandra使用Murmur3Partitioner分片策略。
    必須爲每個節點設置分片器併爲其分配一個num_tokens值。token的數量依賴於系統的硬件能力。如果不使用虛擬節點,那麼使用intial_token參數代替。
    建議使用虛擬節點。

複製因子

    表示整個集羣的副本數。1表示一行數據只會保存在一個節點上,2表示一行數據保存在兩個不同節點上,所有副本同樣重要,沒有主次之分。
    每個數據中心都要定義複製因子,一般而言你需要設置其大於1,但是不超過整個集羣的節點數量。

副本放置策略

    cassandra在多個節點上保存副本以提高可靠性。推薦使用NetworkTopologyStrategy,因爲本策略可以方便地擴展到多個數據中心。
    在建立keyspace的時候,你必須定義副本放置策略和副本數量。

Snitch

    Snitch定義了數據中心的機器分組和機架,副本放置策略可以據此保存數據。
    在建立集羣的時候必須配置一個snitch,所有的snitch使用一個動態snitch層監視性能,選擇最佳副本集讀取。動態snitch在cassandra.yaml文件中配置。

cassandra.yam配置文件

   這是集羣設置和初始化時的主要配置文件。






















發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章