2013-01-15 31 views
4

我在我的java應用程序中使用Cassandra DB。我使用Thrift客戶端從我的Java應用程序連接Cassandra。如果Cassandra磁盤已滿,則會自動終止。所以從我的Java程序中,我找不到爲什麼Cassandra停機的錯誤。如果磁盤中沒有空間,Cassandra會終止

那麼如何避免卡桑德拉的自動終止,或者他們的任何方式來識別磁盤滿錯誤?

另外我沒有物理訪問cassandra驅動器。它運行在其他一些遠程機器上。

回答

3

磁盤錯誤和一般的硬件/系統錯誤不是通常在任何應用程序中正確處理。數據庫應該只在這種情況下提供儘可能多的耐久性,並且這是正確的行爲 - 儘可能少地關閉和中斷。

至於您的應用程序 - 如果無法連接到數據庫,導致錯誤的原因沒有區別。無論如何,你的應用程序無法使用。

有專門的工具可以監控您的機器,即Nagios。如果您是該服務器的管理員,請使用此類應用程序。當磁盤被填滿時,您將收到一封電子郵件或文本。使用這樣的工具,不要通過實施幾百行代碼來處理隨機和非常罕見的情況,從而打開一扇敞開的大門。

+0

大多數應用程序正在處理磁盤空間異常。他們投擲的solr示例「磁盤空間不足」錯誤。但拋出錯誤仍然solr運行。就像那樣,我們可以在Cassandra中做任何事情而無需停止服務。有任何選項可用嗎? – SANN3

+0

另外我在很多系統中運行更多Cassandra。所以使用第三方工具很難監控所有的服務。如果服務停止意味着應用程序無法正常工作,但用戶不知道確切原因。如果他知道原因,那麼只有修復它才能知道。 – SANN3

+0

這些工具完全是*用於監控多個系統的目的!你甚至檢查了我在答案中發佈的鏈接嗎?嚴重的是,不要重新發明輪子! – Dariusz

1

設置ssh訪問Casandra機器,並使用一些ssh客戶端(如JSch)從您的Java客戶端運行df /casandra/drive(如果Linux)或fsutil volume diskfree c:\casandra\drive(如果是Windows)。捕獲簡單的輸出並解析以獲得可用磁盤空間。這樣,您的應用程序將監視那裏發生的情況,並且可能應該提醒用戶,並在磁盤空間不足的情況下拒絕添加數據。

如果磁盤空間不足,也可以使用標準監視工具或設置服務器端腳本發送消息。但是,這不會阻止應用程序崩潰,您需要在看到磁盤空間不足後採取措施。

+0

我從許多系統運行許多Cassandra服務。因此,對於我需要運行第三方工具的每個系統來說,其難以實施也難以添加新的服務。 – SANN3

+0

我以某種方式假定你已經可以ssh進入這些系統。 – h22