Cassandra是一個(gè)開源的、分布式的、無中心節(jié)點(diǎn)的、有彈性和可擴(kuò)展的、高度可用的、容錯(cuò)的、一致和協(xié)調(diào)的、面向列的NoSQL數(shù)據(jù)庫(kù)。
Cassandra集群(Cluster)Cluster
Node(節(jié)點(diǎn)):一個(gè)運(yùn)行cassandra的實(shí)例
Rack(機(jī)架):一組nodes的集合
DataCenter(數(shù)據(jù)中心):一組racks的集合
Cluster(集群):映射到擁有一個(gè)完整令牌圓環(huán)所有節(jié)點(diǎn)的集合
協(xié)調(diào)者(Coordinator)客戶端連接到某一節(jié)點(diǎn)發(fā)起讀寫請(qǐng)求時(shí),該節(jié)點(diǎn)充當(dāng)客戶端應(yīng)用與集群中擁有相應(yīng)數(shù)據(jù)節(jié)點(diǎn)間的橋梁,稱為協(xié)調(diào)者,以根據(jù)集群配置確定環(huán)(ring)中的哪個(gè)節(jié)點(diǎn)應(yīng)當(dāng)獲取這個(gè)請(qǐng)求。
使用CQL連接指定的-h節(jié)點(diǎn)就是協(xié)調(diào)節(jié)點(diǎn)
1、集群中任何一個(gè)節(jié)點(diǎn)都可能成為協(xié)調(diào)者
2、每個(gè)客戶端請(qǐng)求都可能由不同的節(jié)點(diǎn)來協(xié)調(diào)
3、由協(xié)調(diào)者管理復(fù)制因子(復(fù)制因子:一條新數(shù)據(jù)應(yīng)該被復(fù)制到多少個(gè)節(jié)點(diǎn))
4、協(xié)調(diào)者申請(qǐng)一致性級(jí)別(一致性級(jí)別:集群中有多少節(jié)點(diǎn)必須相應(yīng)讀寫的請(qǐng)求)
分區(qū)器(Partitioner)分區(qū)器決定了數(shù)據(jù)如何在集群內(nèi)被分發(fā)。在Cassandra中,table的每行由唯一的primarykey標(biāo)識(shí),partitioner實(shí)際上為一hash函數(shù)用,以計(jì)算primary key的token。Cassandra依據(jù)這個(gè)token值在集群中放置對(duì)應(yīng)的行。
Cassandra提供了三種不同的分區(qū)器
Murmur3Partitioner(默認(rèn))- 基于MurmurHash hash值將數(shù)據(jù)均勻的分布在集群
RandomPartitioner - 基于MD5 hash值將數(shù)據(jù)均勻的分布在集群中
ByteOrderedPartitioner - 通過鍵的字節(jié)來保持?jǐn)?shù)據(jù)詞匯的有序分布
虛擬節(jié)點(diǎn)(Vnode)每個(gè)虛擬節(jié)點(diǎn)對(duì)應(yīng)一個(gè)token值,每個(gè)token決定了節(jié)點(diǎn)在環(huán)中的位置以及節(jié)點(diǎn)應(yīng)當(dāng)承擔(dān)的一段連續(xù)的數(shù)據(jù)hash值的范圍,因此每個(gè)節(jié)點(diǎn)都擁有一段連續(xù)的token,這一段連續(xù)的token,組成了一個(gè)封閉的圓環(huán)。
沒有使用虛擬節(jié)點(diǎn), Ring環(huán)的tokens數(shù)量=集群的機(jī)器數(shù)量. 比如一共有6個(gè)節(jié)點(diǎn),所以token數(shù)=6.因?yàn)楦北疽蜃?3,一條記錄要在集群中的三個(gè)節(jié)點(diǎn)存在. 簡(jiǎn)單地方式是計(jì)算rowkey的hash值,落在環(huán)中的哪個(gè)token上,第一份數(shù)據(jù)就在那個(gè)節(jié)點(diǎn)上,剩余兩個(gè)副本落在這個(gè)節(jié)點(diǎn)在token環(huán)上的后兩個(gè)節(jié)點(diǎn).