天天看點

Cassandra 最佳實踐系列(2) - 選型篇

本文會從cassandra的選型,機器基本配置,節點數,基本使用介紹方面進行基本的介紹;

機器基本配置選擇

Cassandra的性能使用可以随着機器的硬體配置,以及叢集的節點數的橫向和縱向的更新而相應的有所提升。

CPU

Cassandra内部會有很多地方使用多線程進行處理,一般配置裡面對于讀寫而言,寫操作是CPU bound,是以如果系統的寫操作會相對多一點,對cpu的要求也會相對配置要好一點,一般至少是2c起步,如果是生産環境對寫要求更高,相對的cpu核數應該更好。

記憶體

Cassandra使用java 語言編寫,會用到jvm-on heap記憶體以及offheap記憶體,其中jvm預先想作業系統申請的記憶體大小是系統大小的1/2, 其中off-heap會使用于壓縮中繼資料,bloom filter等等。官方建議生産環境記憶體不低于8G,但是具體可以視自己的需求再說,對于gc算法來說:

  • 堆記憶體小于12G,推薦cms算法;
  • 大于12G堆記憶體的話,可以使用G1 算法;

磁盤

對于cassandra而言有幾個地方需要使用到磁盤,commitlog、hint、cache-file、sstable-file。其中對我們來說,我們需要重點關注commitlog的檔案以及sstable的檔案,因為寫操作會先寫commitlog,然後把資料丢到memtable,然後memtable會異步的dump到磁盤成為sstable的檔案,而且sstable背景會進行異步的compaction操作合并成新檔案。那麼這裡commitlog的會影響我們的寫性能,常見的建議是commitlog的配置

磁盤與放置sstable的data 目錄分開配置,commitlog單獨配置一塊盤,因為寫commitlog的速度直接影響寫操作的速度,是以建議commitlog的配置磁盤需要稍微好一點,但是容量不需要很大,因為commitlog的資料在相關memtable資料dump到磁盤以後就會删除。隻有存留在memtable的資料在commitlog裡面以做節點crash以後做replay使用。

存放sstable的磁盤可以使用HDD/SSD磁盤,相關cassandra有優化配置,那麼這裡的話可以使用多塊磁盤組合使用Raid0或者cassandra所謂的JBOD方式,使用其他的Raid1-Raid5不是最優的使用推薦,因為在節點層面有多資料副本備援。具體磁盤容量視叢集業務需求以及其他配置來定。

節點數

Cassandra可以是單節點(需要設定replicat factor 為1),2個節點(replicat factor最多是2),3個節點,…..個節點,理論上的擴容是線性的,無上限的擴容,可以從1 到很大。但是常見一般300個實體節點基本是可以了。