Cassandra 文件

版本

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

生產建議

cassandra.yamljvm.options 檔案針對生產用途提供許多注意事項和建議。此頁面會擴充檔案中的一些資訊。

令牌

每個節點使用多個令牌範圍稱為虛擬節點或 vnode。當新節點開機進入叢集時,vnodes 可透過更多串流對等節點促進彈性擴充。限制串流的負面影響(I/O 和 CPU 負擔)可啟用漸進式叢集擴充。但是,更多令牌會導致與更多對等節點共用資料,並導致可用性降低。這兩個因素必須根據叢集的特性讀寫來取得平衡。若要深入了解,建議閱讀 Cassandra Availability in Virtual Nodes, Joseph Lynch and Josh Snyder

使用 cassandra.yaml 檔案中的設定變更令牌數目

num_tokens: 16

以下是常見的令牌計數,以及何時和為何使用每個令牌的簡要說明。

令牌計數 說明

1

最大可用性,最大叢集大小,最少對等節點,但擴充性不佳。必須始終將叢集大小加倍才能擴充並保持平衡。

4

彈性和可用性的健康組合。建議用於最終將超過 30 個節點的叢集。需要增加約 20% 的節點才能保持平衡。縮減叢集可能會導致叢集不平衡。

8

使用 8 個 vnode 可在系統之間分配工作負載,差異約為 10%,且對效能影響最小。

16

最適合定期擴充和縮減的彈性叢集,但較大型叢集可能會出現可用性問題。不建議用於超過 50 個節點的叢集。

除了設定令牌計數之外,極為重要的是將 cassandra.yaml 中的 allocate_tokens_for_local_replication_factor 設定為適當的複製品數量,以確保平均令牌配置。

預讀

預讀是一種作業系統功能,會嘗試將盡可能多的資料載入頁面快取中。旋轉磁碟可能會出現長時間的尋道時間,造成高延遲,因此使用頁面快取進行讀取的額外處理量可以提升效能。透過利用預讀,作業系統可以在不增加額外尋道的成本下將額外資料拉入記憶體中。當可用 RAM 大於熱資料集的大小時,此方法運作良好,但當反之為真時(資料集 > RAM)可能會出現問題。熱資料集越大,預讀就越不實用。

在下列情況中,預讀絕對不實用

  • 小分割區,例如具有單一分割區金鑰的表格

  • 固態硬碟 (SSD)

預讀實際上會增加磁碟使用量,在某些情況下會導致延遲和處理量效能降低多達 5 倍。具有小 (小於 1KB) 列的讀取密集型金鑰/值表格特別容易出現此問題。

建議的預讀設定為

硬體 初步建議

旋轉磁碟

64KB

SSD

4KB

可以使用 blockdev 工具在 Linux 系統上調整預讀。

例如,將磁碟 /dev/sda1 的預讀設定為 4KB

$ blockdev --setra 8 /dev/sda1

blockdev 設定會設定要預先讀取的 512 位元組區塊數量。上述的參數 8 等於 4KB,或 8 * 512 位元組。

所有系統都不同,因此請使用這些建議作為起點並根據您的服務水準協議和處理量需求進行調整。若要了解預讀如何影響磁碟資源使用量,我們建議仔細閱讀深入探討,使用外部工具部分。

壓縮

壓縮資料是透過壓縮固定大小的位元組緩衝區並將資料寫入磁碟來儲存。緩衝區大小由表格架構設定中 WITH COMPRESSION 的壓縮對應中的 chunk_length_in_kb 元素決定。預設設定為 16KB,從 Cassandra 4.0 開始。

由於必須從磁碟讀取整個壓縮緩衝區,因此使用過大的壓縮區塊長度會在讀取小型記錄時造成顯著的負擔。與預設的讀取預先設定結合使用,可能會對某些工作負載造成大量的讀取擴充。因此,選擇適當的值來設定此設定非常重要。

LZ4Compressor 是預設且建議的壓縮演算法。如果您需要有關壓縮的更多資訊,請閱讀 The Last Pickle 部落格文章,主題為壓縮效能

壓縮

針對不同的工作負載,有不同的 壓縮策略可供使用。我們建議您閱讀不同的策略,以了解哪一種最適合您的環境。不同的表格可能會(而且經常會)在同一個叢集使用不同的壓縮策略。

加密

在設定您的生產叢集時,最好設定點對點加密和客戶端伺服器加密。在叢集提供生產流量之後再設定,很難正確執行。如果您計畫使用任何類型的網路加密,我們建議您在最初設定叢集時就設定好。稍後變更這些設定並非不可能,但錯誤可能會導致停機或資料遺失。

確保使用 NetworkTopologyStrategy 建立鍵值空間

生產叢集絕不應使用 SimpleStrategy。生產鍵值空間應使用 NetworkTopologyStrategy (NTS)。例如

CREATE KEYSPACE mykeyspace WITH replication =     {
   'class': 'NetworkTopologyStrategy',
   'datacenter1': 3
};

使用 NetworkTopologyStrategy 初始化的 Cassandra 叢集可以利用設定多個機架和資料中心的優勢。

設定機架和 snitch

在提供叢集之後正確設定或變更機架是一個不受支援的程序。從單一機架移轉到多個機架也不受支援,而且可能會導致資料遺失。對於內部部署或混合雲端環境,使用 GossipingPropertyFileSnitch 是最靈活的解決方案。Ec2Snitch 僅適用於 AWS EC2 環境。