Cassandra 文件

版本

您正在檢視預發行版本的說明文件。

檢視最新版本

改善串流

Apache Cassandra 4.0 對串流進行了多項改進。串流是叢集節點用於以 SSTable 形式交換資料的程序。SSTable 的串流會執行於多項作業,例如

  • SSTable 修復

  • 主機替換

  • 範圍移動

  • 開機

  • 重建

  • 叢集擴充

基於 Netty 的串流

Cassandra 4.0 中的串流基於非封鎖輸入/輸出 (NIO) 與 Netty (CASSANDRA-12229)。它取代了串流訊息和檔案傳輸的單執行緒 (或順序)、同步、封鎖模型。Netty 支援非封鎖、非同步、多執行緒串流,其中會同時開啟多個連線。非封鎖表示執行緒不會被封鎖,因為它們不會等待已傳送要求的回應。回應可以在不同的執行緒中傳回。使用非同步時,連線和執行緒會分離,且不會有 1:1 的關係。可以開啟比執行緒多好幾倍的連線。

零複製串流

在 4.0 之前,Cassandra 會在串流期間將 SSTable 具象化為物件。這會產生不必要的垃圾,並會減慢整個串流程序,因為有些 SSTable 可以作為整個檔案傳輸,而不是個別分區。Cassandra 4.0 已新增支援在可能的情況下串流整個 SSTable (CASSANDRA-14556),以使用 ZeroCopy API 加快串流速度。如果已啟用,Cassandra 會對符合資格的 SSTable 使用 ZeroCopy,大幅加快傳輸速度並增加傳輸量。零複製路徑避免在傳送和接收端將資料帶入使用者空間。任何與串流相關的作業都會注意到對應的改善。零複製串流受硬體約束;僅受硬體限制 (網路和磁碟 I/O) 限制。

高可用性

在基準測試中,零複製串流的速度比基於分區的串流快 5 倍。更快的串流提供改善可用性的好處。叢集的復原主要取決於串流速度,具有故障節點的 Cassandra 叢集將能夠更快復原(快 5 倍)。如果節點發生故障,則需要將 SSTable 串流到替換節點。在替換操作期間,新的 Cassandra 節點從擁有屬於此新節點令牌範圍資料副本的鄰近節點串流 SSTable。根據儲存的資料量,此程序可能需要大量的網路頻寬,需要一些時間才能完成。這些範圍移動操作花費的時間越長,叢集可用性損失就越多。多個節點發生故障會大幅降低高可用性。新節點完成其資料串流的速度越快,它就能越快提供流量,進而增加叢集的可用性。

啟用零複製串流

cassandra.yaml 中設定下列設定,即可啟用零複製串流。

stream_entire_sstables: true

預設情況下,零複製串流已啟用。

符合零複製串流資格的 SSTable

如果需要傳輸 SSTable 中的所有分區,則會使用零複製串流。在使用 LeveledCompactionStrategy 或已啟用依令牌範圍分區 SSTable 時,這很常見。會反覆運算 SSTable 中的所有分區金鑰,以確定是否符合零複製串流的資格。

零複製串流的優點

啟用後,它允許 Cassandra 在節點之間零複製串流所有符合資格的 SSTable,包括每個元件。這會大幅加快網路傳輸速度,但須受 stream_throughput_outbound 指定的節流限制。

啟用此功能將降低傳送和接收節點的 GC 壓力。雖然此功能會試圖保持磁碟平衡,但無法保證。如果啟用節點間加密,此功能將自動停用。目前這可用於分層壓縮。

設定零複製串流

節流會降低串流速度。stream_throughput_outbound 會將節點上所有傳出的串流檔案傳輸節流到指定的總體 Mbps 輸送量。未設定時,預設值為 200 Mbps 或 24 MiB/s。

stream_throughput_outbound: 24MiB/s

若要執行任何零複製串流基準測試,必須將 stream_throughput_outbound 設定為非常高的值,否則會大幅度限制頻寬,而基準測試結果將毫無意義。

inter_dc_stream_throughput_outbound 會限制資料中心之間的所有串流檔案傳輸,此設定允許使用者限制資料中心間的串流傳輸量,以及限制所有網路串流流量,設定方式與 stream_throughput_outbound 相同。若未設定,預設值為 200 Mbps 或 25 MB/s。

inter_dc_stream_throughput_outbound: 24MiB/s

使用零複製串流串流的 SSTable 元件

零複製串流會串流整個 SSTable。SSTable 由多個元件組成,這些元件儲存在個別檔案中。串流的 SSTable 元件列於表 1 中。

表 1。SSTable 元件

SSTable 元件 說明

Data.db

SSTable 的基本資料:其他元件可以根據資料元件重新產生。

Index.db

列索引鍵,並附有其在資料檔案中的位置指標。

Filter.db

SSTable 中列索引鍵的序列化布隆過濾器。

CompressionInfo.db

儲存未壓縮資料長度、區塊偏移量等資訊的檔案。

Statistics.db

SSTable 內容的統計資料元資料。

Digest.crc32

儲存資料檔案 size_bytes 的 CRC32 校驗和。

CRC.db

儲存未壓縮檔案中區塊的 CRC32。

Summary.db

儲存 SSTable 索引摘要(索引元件的抽樣)

TOC.txt

目錄,儲存 SSTable 的所有元件清單。

自訂元件,例如自訂壓縮策略也可能包含在內。

修復串流預覽

使用 nodetool repair 修復會涉及修復的 SSTable 串流,並已新增修復預覽,以估計需要執行的修復串流量。修復預覽 (CASSANDRA-13257) 會使用選項 nodetool repair --preview 呼叫

-prv, --preview

它會決定要串流的範圍和資料量,但不會實際執行修復。

鍵空間串流平行化

Cassandra 4.0 (CASSANDRA-4663) 中已將引導和重建的不同鍵空間串流平行化。

多資料中心部署中串流的唯一節點

當每個資料中心的複製品數量為三個或更多時,範圍串流器會挑選唯一的節點來串流資料 (CASSANDRA-4650)。此最佳化會平均分配整個叢集的串流負載。若未進行最佳化,某些節點可能會被選取來串流比其他節點更多的資料。此修補程式允許選取專用節點來串流只有一個範圍。

這將提升節點開機效能,並減少提供資料的節點壓力。這不會影響每個資料中心中 N < 3 的情況,因為這時它只會從 2 個節點串流資料。

串流操作類型

了解特定串流的類型或目的非常重要。版本 4.0 (CASSANDRA-13064) 新增一個 enum 來區分不同類型的串流。串流類型同時存在於串流要求和串流工作中。不同的串流類型包括

  • 還原複本計數

  • 取消開機

  • 重新配置

  • 開機

  • 重建

  • 大量載入

  • 修復

當複本數將低於已設定的 RF 時,不允許停用

CASSANDRA-12510 可防止停用,因為這會讓複本數低於已設定的複製因子 (RF),並新增 --force 選項,讓停用在有意為之時可以繼續進行;即使這會讓複本數低於已設定的 RF,仍強制停用此節點。