2016-06-24 67 views
1

我有一個快速生成測量的過程,我正在將它們存儲在Cassandra中。該進程在數據中心的服務器上運行,並且在同一個數據中心中有一個Cassandra節點以及另一個節點。如果生成測量結果的服務器失去連接性,我希望將測量結果記錄在本地,然後在連接恢復時讓數據能夠正確處理。是否有可能運行某種本地只寫Cassandra節點(使用最小的硬盤空間),它連接到其他節點,還是必須通過某種消息總線?本地只寫Cassandra節點

回答

1

你想要的是「只寫」節點和中心節點。卡桑德拉沒有直接的支持。 以下是您的選項

在每個寫入節點和主服務器上都有像Apache Kafka(我個人最喜歡的)這樣的消息總線。將數據寫入每個節點上的kafka,然後使用kafka-mirror-maker將每個節點的kafka鏡像到主服務器。在主服務器上,編寫一個小應用程序,將從卡夫卡收到的所有數據寫入cassandra。如果連接斷開,節點的kafka將仍然保存數據,當連接恢復時,鏡像製造商將繼續停止。

對於您有,創建一個單獨的一套所有keyspaces的每個節點,分配一個數據中心到每個節點和一個到你的中央服務器,設置每個節點將複製其keyspaces複製設置到中央服務器(即到中央數據中心),而不是到其他節點。例如,您有2個邏輯密鑰空間(kA,kB),2個節點(每個節點上分別爲dc1,dc2數據中心名稱)和主服務器(數據中心名稱:dc0)。 您需要創建kA_dc1 kB_dc1,kA_dc2 kB_dc2密鑰空間並設置以下複製設置。

  • kA_dc1,kB_dc1:複製DC1和DC0
  • kA_dc2,kB_dc2:複製DC2和DC0

之後,你需要修改你的程序查詢所有keyspaces(因爲密鑰空間包含相同的模式,應該很容易)