2013-12-11 14 views
17

Tôi đang sử dụng Cassandra nhúng. Khi tôi tắt và khởi động lại dữ liệu dịch vụ Cassandra của tôi bị mất. Tôi nghĩ rằng dữ liệu phong nha không được xả đúng vào đĩa. Vì vậy, tôi đã thử sử dụng nodetool để xóa dữ liệu theo cách thủ công và kiểm tra xem dữ liệu có sẵn hay không. Nhưng nodetool dường như không hoạt động đúng cách cho dịch vụ Cassandra được nhúng. Tôi nhận được lỗi sau:Lập trình tuôn ra dữ liệu đến cassandra mỗi lần trước khi cassandra tắt

c:\vijay\cassandra\bin>nodetool -host 192.168.2.86 -p 7199 drain

Starting NodeTool

Failed to connect to '192.168.2.86:7199': Connection refused: connect

Tôi đã cố đặt thuộc tính jmx cho đến khi tôi gặp lỗi. Tôi đã thêm các dòng sau vào mã của mình:

System.setProperty("com.sun.management.jmxremote", "true"); 
System.setProperty("com.sun.management.jmxremote.port", "7197"); 
System.setProperty("com.sun.management.jmxremote.authenticate", "false"); 
System.setProperty("com.sun.management.jmxremote.ssl", "false"); 
System.setProperty("java.rmi.server.hostname", "my ip"); 

Vì vậy, có cách nào để tự xóa dữ liệu vào Cassandra mà không sử dụng nodetool không?

Sửa 1:
Sau giờ cố gắng Bây giờ tôi có thể chạy nodetool (thay vì thêm cấu hình jmx vào mã tôi thêm vào Eclipse cấu hình gỡ lỗi và nó làm việc). Tôi chạy lệnh xả ngay bây giờ dữ liệu được xả đúng vào đĩa. Vì vậy, bây giờ câu hỏi của tôi là: tại sao dữ liệu không được xả đúng cách? Mỗi khi tôi khởi động lại dịch vụ Cassandra, những thay đổi gần đây đã biến mất.

+2

Dữ liệu không được xóa cho đến khi memtable đạt đến một kích thước nhất định. Trước thời gian đó, sự kiên trì được đảm bảo bởi nhật ký cam kết mà * được * xả vào thời điểm ghi nhận. – RussS

+0

Đó là nơi mà vấn đề là .. Trong trường hợp của tôi, tôi đoán cam kết các bản ghi không đúng flushed .. khi tôi xóa dữ liệu bằng cách sử dụng nodetool trước khi tắt dịch vụ xuống, nó hoạt động tốt, dữ liệu có sẵn sau khi khởi động lại máy chủ. bất kỳ cách nào để lập trình tuôn ra dữ liệu mỗi khi máy chủ đi xuống ?? – Vijay

+3

Tôi nghĩ bạn nên cố gắng tìm ra lý do tại sao nhật ký cam kết không phải là đỏ bừng. Nó phải liên tục viết và xả trừ khi bạn tắt fsync hoặc fsync không hoạt động đúng trên hệ thống của bạn. Khi điều này được sửa, bạn sẽ không mất dữ liệu khi khởi động lại và bạn sẽ không phải tự xóa. – RussS

Trả lời

1

Bạn dừng và khởi động máy chủ Cassandra như thế nào? Các cuộc gọi đến stopServer trên daemon Cassandra nên được flushing bất kỳ ghi xuất sắc để đăng nhập cam kết. Chuỗi sẽ tiếp tục thực hiện một số xử lý ngay cả sau khi phương thức trả về, vì vậy nếu bạn đang giết JVM sau stopServer() thì bạn có thể ngăn không cho dữ liệu được ghi.

+0

Ya tôi đã thử tắt máy đúng cách, ngay cả khi sự cố vẫn tiếp diễn .. rõ ràng là do vấn đề https: // mở vé này. apache.org/jira/browse/CASSANDRA-4782 .. Tôi đã nâng cấp cassandra lên phiên bản cao hơn, giải quyết vấn đề cho tôi .. Không còn cách nào khác ..! – Vijay

+2

Bạn nên đăng câu trả lời đó và chấp nhận nó. – b4hand

0

Rất có thể là do cài đặt cam kết của bạn. Nếu bạn đang sử dụng chế độ định kỳ, hãy thử giảm cửa sổ đồng bộ hóa hoặc lô sử dụng của bạn. Hàng loạt sẽ làm cho viết hơi chậm hơn.

https://github.com/apache/cassandra/blob/trunk/conf/cassandra.yaml#L231

+2

Tôi đã thử tất cả các thay đổi có thể có trong cassandra.yaml liên quan đến vấn đề này .. không tốt :( – Vijay

0

Nó có thể là một tuôn ra được ban hành nhưng thất bại. Flushing nên được ghi lại trong các bản ghi. Xác minh rằng bạn không xả nước. Nếu bạn đang đỏ mặt và nó đang thất bại, cần có một số dấu hiệu cho thấy tại sao tuôn ra thất bại.

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