Docker 的優(yōu)點(diǎn)
814
2025-03-31
架構(gòu)原理
Cassandra旨在處理多個(gè)節(jié)點(diǎn)之間的大數(shù)據(jù)工作負(fù)載且無(wú)單節(jié)點(diǎn)故障。
Cassandra通過(guò)在同構(gòu)節(jié)點(diǎn)之間采用p2p分布式系統(tǒng)來(lái)解決故障問(wèn)題,其中數(shù)據(jù)分布在集群中的所有節(jié)點(diǎn)上。通過(guò)點(diǎn)對(duì)點(diǎn)Gossip通信協(xié)議,集群中的每個(gè)節(jié)點(diǎn)與其他節(jié)點(diǎn)頻繁交換狀態(tài)信息。每個(gè)節(jié)點(diǎn)上都有一個(gè)順序?qū)懭氲腸ommit log用來(lái)記錄寫(xiě)入操作,以確保數(shù)據(jù)實(shí)現(xiàn)持久化。然后將數(shù)據(jù)編入索引并寫(xiě)入內(nèi)存結(jié)構(gòu),稱(chēng)為內(nèi)存表(memtable),類(lèi)似于回寫(xiě)緩存。當(dāng)內(nèi)存結(jié)構(gòu)寫(xiě)滿(mǎn)數(shù)據(jù)時(shí),則把數(shù)據(jù)存儲(chǔ)到SSTable數(shù)據(jù)文件中的磁盤(pán)。所有的寫(xiě)入操作會(huì)在整個(gè)集群中自動(dòng)分區(qū)和備份。Cassandra通過(guò)一個(gè)稱(chēng)為壓縮(compaction)的過(guò)程定期整合SSTable,丟棄標(biāo)記為刪除的舊數(shù)據(jù)。為確保整個(gè)集群中所有數(shù)據(jù)的一致性,采用了各種修復(fù)機(jī)制。
Cassandra是一個(gè)分區(qū)式行存儲(chǔ)數(shù)據(jù)庫(kù),行被組織成具有所需主鍵的表。Cassandra架構(gòu)允許任何授權(quán)用戶(hù)連接到任一數(shù)據(jù)中心的任一節(jié)點(diǎn),并使用CQL語(yǔ)言訪問(wèn)數(shù)據(jù)。為了方便使用,CQL使用與SQL類(lèi)似的語(yǔ)法并與數(shù)據(jù)表一起使用。開(kāi)發(fā)者可以通過(guò)cqlsh訪問(wèn)CQL。通常,對(duì)于由不同表組成的應(yīng)用程序,一個(gè)集群對(duì)應(yīng)一個(gè)密鑰空間。
客戶(hù)端讀寫(xiě)請(qǐng)求可以發(fā)送到集群中的任一節(jié)點(diǎn)。當(dāng)客戶(hù)端連接到有請(qǐng)求的節(jié)點(diǎn)時(shí),該節(jié)點(diǎn)用作該客戶(hù)端的協(xié)調(diào)器(coordinator)。作為客戶(hù)端應(yīng)用程序和被請(qǐng)求數(shù)據(jù)所在的節(jié)點(diǎn)之間的代理,協(xié)調(diào)器根據(jù)集群的配置確定環(huán)(ring)中的哪些節(jié)點(diǎn)應(yīng)該獲得請(qǐng)求。
關(guān)鍵組件
●??Gossip
Gossip是用于發(fā)現(xiàn)和共享關(guān)于Cassandra集群中其他節(jié)點(diǎn)的位置和狀態(tài)信息的p2p通信協(xié)議。每個(gè)節(jié)點(diǎn)將Gossip信息持久化到本地,以便在節(jié)點(diǎn)重新啟動(dòng)時(shí)使用該信息。
●??Partitioner分區(qū)器
Partitioner分區(qū)器用于確定哪個(gè)節(jié)點(diǎn)將接收到數(shù)據(jù)的第一個(gè)副本,以及如何在集群中的其他節(jié)點(diǎn)上分發(fā)其他副本。每一行數(shù)據(jù)都由主鍵唯一標(biāo)識(shí),該主鍵可以與其分區(qū)鍵相同,但也可以包括其他集群列。分區(qū)器是一個(gè)散列函數(shù),從一個(gè)行的主鍵派生出一個(gè)令牌(token)。分區(qū)器使用令牌值來(lái)確定集群中的哪些節(jié)點(diǎn)接收該行的副本。
Murmur3 Partitioner是新Cassandra集群的默認(rèn)分區(qū)策略,在多數(shù)情況下,也是新集群的正確選擇。
您必須設(shè)置分區(qū)器并為每個(gè)節(jié)點(diǎn)分配一個(gè)num _ tokens值。令牌數(shù)量取決于系統(tǒng)的硬件能力。如果不使用虛擬節(jié)點(diǎn)(vnode),使用initial _ token設(shè)置即可。
●??復(fù)制因子
跨集群的副本總數(shù)。復(fù)制因子1意味著一個(gè)節(jié)點(diǎn)上的每一行只有一個(gè)副本。復(fù)制因子2表示每行有兩個(gè)副本,每個(gè)副本在不同的節(jié)點(diǎn)上。沒(méi)有主副本,所有副本同樣重要。您可以為數(shù)據(jù)中心設(shè)置復(fù)制因子的個(gè)數(shù)。一般情況下,設(shè)置復(fù)制策略大于1,但不要超過(guò)集群中的節(jié)點(diǎn)數(shù)量。
●??副本放置策略
Cassandra將數(shù)據(jù)的副本存儲(chǔ)在多個(gè)節(jié)點(diǎn)上,以保證可靠性和容錯(cuò)性。復(fù)制策略決定將副本放置在哪些節(jié)點(diǎn)上。
推薦使用NetworkTopologyStrategy,以便將來(lái)擴(kuò)展到多個(gè)數(shù)據(jù)中心。
創(chuàng)建密鑰空間(keyspace)時(shí),必須確定副本放置策略和需要的副本數(shù)量。
●??Snitch
Snitch將機(jī)器組劃分到數(shù)據(jù)中心和機(jī)架(拓?fù)洌?,?fù)制策略根據(jù)拓?fù)浣Y(jié)構(gòu)放置副本。
創(chuàng)建集群時(shí)必須配置snitch。所有的snitch都使用一個(gè)動(dòng)態(tài)snitch層用來(lái)監(jiān)控性能并選擇最佳的副本讀取數(shù)據(jù)。默認(rèn)情況,snitch為開(kāi)啟狀態(tài),推薦在大多數(shù)部署中使用。您需要在Cassandra.yaml配置文件中配置各節(jié)點(diǎn)的動(dòng)態(tài)snitch閾值。
默認(rèn)情況下,SimpleSnitch不識(shí)別數(shù)據(jù)中心或機(jī)架信息,用于單個(gè)數(shù)據(jù)中心部署或公有云中的單個(gè)區(qū)域。對(duì)于生產(chǎn)環(huán)境,推薦使用GossipingPropertyFileSnitch,它定義了節(jié)點(diǎn)的數(shù)據(jù)中心和機(jī)架的信息,并通過(guò)gossip將此信息傳播到其他節(jié)點(diǎn)。
●??cassandra.yaml配置文件
用于設(shè)置集群的初始化屬性、表的緩存參數(shù)、調(diào)優(yōu)和資源利用率、超時(shí)設(shè)置、客戶(hù)端連接、備份和安全性的主要配置文件。
●??系統(tǒng)鍵空間表屬性
可以以編程方式或使用客戶(hù)端應(yīng)用程序(如CQL)在每個(gè)鍵空間或表基礎(chǔ)上設(shè)置存儲(chǔ)配置屬性。
數(shù)據(jù)庫(kù)
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶(hù)投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶(hù)投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。