2012-04-20 73 views
12

我的應用程序的運行監控,我正在尋找類似常用的「SQL連接驗證」的東西查詢Cassandra連接的健康檢查(使用hector)?

SELECT 1;

在卡桑德拉,使用赫克託司機。我嘗試過諸如查看Cluster.getKnownPoolHosts()和.getConnectionManager()。getActivePools()。但是,似乎他們的狀態並沒有不斷更新,只有當我真的試圖通過查詢訪問Cassandra時。

我希望我的健康檢查獨立於任何需要存在的密鑰空間或用戶CF,因此只是運行「虛擬」查詢似乎很難(針對什麼?)。當然,它不應占用大量內存或產生任何重要負載。

我可以強迫Hector以某種方式更新其連接池狀態而不運行真正的查詢嗎?

(BTW:CQL甚至不接受「SELECT 1」作爲有效查詢。)

+0

你找到了答案嗎?我正在嘗試做同樣的工作 – 2013-04-10 16:06:45

+0

是的,我找到了一種對我來說很好的方法。見下面的答案。 – HansMari 2013-04-11 05:41:46

回答

4

我目前使用的解決方案,而這似乎是最強大的,到目前爲止(與卡桑德拉1.1測試和1.2)是「系統」的一個簡單的查詢:

Query<String> query = Query.selectQuery("*", "system", null, 1, consistencyLevel, StringSerializer.get());

這不正是我想要的,因爲這是一個「真正」的查詢,但在另一方面,它不給任何誤報。

+0

我可能是錯的,但我認爲這種方法總是調用相同的節點 - 取決於一致性級別,您將始終調用RF的1,Q或所有節點。如果你想監視連接是否處於活動狀態,你可以這樣做,如果你想監視環狀態,我會在你的java應用程序中使用nodetool。 – 2013-04-11 14:53:44

+1

這是作爲連接檢查而不是作爲Cassandra集羣的操作檢查。 – HansMari 2013-04-12 07:26:42

+0

@HansMari,你怎麼做這個檢查?你檢查一些查詢屬性? – CAMOBAP 2013-12-17 11:50:28

13

隨着CQL3,我使用下面的查詢:

SELECT now() FROM system.local; 

這將是很好擺脫FROM子句altogther,使這個普通的,如果用戶沒有訪問system keyspace或local列家族出於某種原因。但與其他答案一樣,至少這不應該給出誤報。

+0

你實際上怎麼做這個檢查?你是否捕獲了一些異常或檢查QuerryResult對象? – CAMOBAP 2013-12-17 11:51:11

+0

是的,只是檢查這一個不會拋出異常。人們也可以驗證查詢實際返回的東西,但我發現沒有必要。 – 2014-01-13 13:39:26