2012-04-20 31 views
12

Đối với giám sát hoạt động của ứng dụng của tôi, tôi đang tìm kiếm một cái gì đó tương tự như sử dụng phổ biến "kết nối xác nhận SQL" truy vấnKiểm tra sức khỏe cho kết nối Cassandra (sử dụng hector)?

SELECT 1;

trong Cassandra, sử dụng trình điều khiển Hector. Tôi đã thử những thứ như nhìn vào Cluster.getKnownPoolHosts() và .getConnectionManager(). GetActivePools(). Nhưng có vẻ như tình trạng của họ không được cập nhật liên tục, chỉ khi tôi thực sự cố gắng truy cập Cassandra bằng một truy vấn.

Tôi muốn kiểm tra sức khỏe của mình độc lập với bất kỳ không gian khóa hoặc CF người dùng nào cần tồn tại, vì vậy chỉ cần chạy truy vấn "giả" có vẻ khó khăn (chống lại cái gì?). Và tất nhiên nó không nên mất nhiều bộ nhớ hoặc tạo ra bất kỳ tải trọng đáng kể nào.

Tôi có thể buộc Hector bằng cách nào đó để cập nhật trạng thái kết nối của hồ bơi mà không cần chạy truy vấn thực không?

(BTW: CQL thậm chí không chấp nhận "SELECT 1" như một truy vấn hợp lệ.)

+0

bạn có tìm thấy câu trả lời cho điều này không? Tôi đang cố gắng làm tương tự –

+0

Có, tôi đã tìm thấy một cách tiếp cận dường như hoạt động tốt đối với tôi. Xem câu trả lời dưới đây. – HansMari

Trả lời

4

Giải pháp Tôi hiện đang sử dụng, và đó dường như là mạnh mẽ nhất cho đến nay (thử nghiệm với Cassandra 1.1 và 1.2) là một truy vấn đơn giản trên "hệ thống":

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

đó không phải là chính xác những gì tôi muốn vì nó là một "thực" truy vấn, nhưng mặt khác nó không đưa ra bất cứ dương tính giả.

+0

Tôi có thể sai nhưng tôi nghĩ cách tiếp cận này sẽ luôn gọi cùng một nút - tùy thuộc vào tính nhất quánĐược rồi, bạn sẽ luôn gọi 1, Q hoặc Tất cả các nút của RF của bạn. Nếu bạn muốn giám sát nếu kết nối đang hoạt động, bạn có thể làm điều đó, nếu bạn muốn theo dõi trạng thái chuông, tôi sử dụng nodetool bên trong ứng dụng java của bạn –

+1

Đây là dự định kiểm tra kết nối chứ không phải kiểm tra hoạt động của cụm Cassandra. – HansMari

+0

@HansMari, Bạn thực sự kiểm tra như thế nào? Bạn có kiểm tra một số thuộc tính truy vấn không? – CAMOBAP

13

Với CQL3, Tôi đang sử dụng các truy vấn sau đây:

SELECT now() FROM system.local; 

Nó sẽ được tốt đẹp để thoát khỏi mệnh đề FROM altogther để làm điều này chung chung, trong trường hợp người dùng không có quyền truy cập vào các system keyspace hoặc local gia đình cột vì một số lý do. Nhưng như với các câu trả lời khác, ít nhất điều này không nên đưa ra những kết quả dương tính giả.

+0

Bạn thực sự kiểm tra như thế nào? Bạn có bắt một số ngoại lệ hoặc kiểm tra đối tượng QuerryResult? – CAMOBAP

+0

Có, chỉ cần kiểm tra xem điều này không ném một ngoại lệ. Người ta cũng có thể xác minh rằng các truy vấn thực sự trả về một cái gì đó, nhưng tôi thấy rằng không cần thiết. –

Các vấn đề liên quan