2013-05-14 30 views
5

Tôi là người mới tham gia Cassandra - Tôi đã tìm kiếm thông tin liên quan đến cam kết và khôi phục sự cố trong Cassandra trên một nút duy nhất. Và, hy vọng ai đó có thể làm rõ các chi tiết.Cam kết và phục hồi Cassandra trên một nút đơn

Tôi đang thử nghiệm Cassandra - vì vậy, hãy thiết lập nó trên một nút duy nhất. Tôi đang sử dụng stresstool trên datastax để chèn hàng triệu hàng. Điều gì sẽ xảy ra nếu có sự cố điện hoặc tắt hệ thống? Liệu tất cả các dữ liệu trong bộ nhớ của Cassandra có được ghi vào đĩa khi khởi động lại Cassandra (tôi đoán commitlog hoạt động như trung gian)? Quá trình này kéo dài bao lâu?

Cảm ơn!

Trả lời

11

Bản ghi cam kết của Cassandra cho phép ghi Cassandra bền. Khi bạn viết thư cho Cassandra, ghi được nối vào nhật ký cam kết trước khi ghi được ghi nhận cho máy khách. Điều này có nghĩa là tất cả các ghi rằng khách hàng nhận được một phản ứng thành công cho được đảm bảo được ghi vào nhật ký cam kết. Việc ghi cũng được thực hiện cho memtable hiện tại, mà cuối cùng sẽ được ghi vào đĩa như là một SSTable khi đủ lớn. Điều này có thể là một thời gian dài sau khi viết được thực hiện.

Tuy nhiên, nhật ký cam kết không được đồng bộ hóa ngay lập tức vào đĩa vì lý do hiệu suất. Mặc định là chế độ định kỳ (được đặt bởi tham số commitlog_sync trong cassandra.yaml) với khoảng thời gian 10 giây (được thiết lập bởi commitlog_sync_period_in_ms trong cassandra.yaml). Điều này có nghĩa là nhật ký cam kết được đồng bộ hóa với đĩa sau mỗi 10 giây. Với hành vi này, bạn có thể mất đến 10 giây viết nếu máy chủ mất điện. Nếu bạn có nhiều nút trong cụm của mình và đã sử dụng hệ số nhân rộng lớn hơn một nút, bạn sẽ cần mất nguồn cho nhiều nút trong vòng 10 giây để mất mọi dữ liệu.

Nếu cửa sổ rủi ro này không được chấp nhận, bạn có thể sử dụng chế độ hàng loạt cho nhật ký cam kết. Chế độ này sẽ không thừa nhận ghi cho máy khách cho đến khi nhật ký cam kết được đồng bộ hóa với đĩa. Cửa sổ thời gian được đặt bởi commitlog_sync_batch_window_in_ms, mặc định là 50 ms. Điều này sẽ làm tăng đáng kể độ trễ viết của bạn và có thể làm giảm thông lượng cũng như vậy chỉ sử dụng điều này nếu chi phí mất một vài ghi nhận được ghi nhận là cao. Nó là đặc biệt quan trọng để lưu trữ đăng nhập cam kết của bạn trên một ổ đĩa riêng biệt khi sử dụng chế độ này.

Trong trường hợp máy chủ của bạn bị mất nguồn, khi khởi động, Cassandra sẽ phát lại nhật ký cam kết để xây dựng lại memtable của nó. Quá trình này sẽ mất vài giây (có thể là phút) để viết các máy chủ nặng.

Nếu bạn muốn đảm bảo rằng dữ liệu trong memtables được ghi vào đĩa, bạn có thể chạy 'nodetool flush' (điều này hoạt động trên mỗi nút). Điều này sẽ tạo ra một SSTable mới và xóa các bản ghi cam kết đề cập đến dữ liệu trong các memtables đỏ bừng.

+3

Cảm ơn bạn đã giải thích chi tiết và rất tốt bằng văn bản - bây giờ nó đã rõ ràng hơn rất nhiều.Tôi hy vọng điều này sẽ giúp những người mới khác như tôi. – user1680784

+0

có vẻ như bạn có thể có 'batch' và 'periodic' backwards ... định kỳ là mặc định, để đưa ra lời cảm ơn chờ bạn chuyển sang hàng loạt, phải không? –

+0

@Richard Tôi đang đối mặt với vấn đề này. Cassandra cam kết đăng nhập bị hỏng. Bất kỳ đề xuất? Tôi đã đăng câu hỏi ở đây: http://stackoverflow.com/questions/33304367/cassandra-exiting-due-to-error-while-processing-commit-log-during-initializatio – Dojo

0

Bạn đang yêu cầu cái gì đó như

  1. gì xảy ra nếu có một lỗi mạng đồng thời dữ liệu đang được nạp trong Oracle sử dụng SQL * Loader?
  2. Hoặc điều gì xảy ra, Sqoop ngừng xử lý do một số điều kiện trong khi chuyển dữ liệu?

Chỉ đơn giản là bất kỳ dữ liệu nào đang được truyền trước khi mất điện hoặc tắt hệ thống, nó sẽ vẫn như cũ.

Đến câu hỏi thứ hai, khi số lượng khóa vượt quá không gian, nghĩa là khi số lượng vượt quá giới hạn nhất định (128 là mặc định) hoặc khi đạt đến khoảng thời gian (cụm đồng hồ), nó sẽ được lưu trữ , không gian bất biến.

+0

Phần thứ hai đã giúp - cảm ơn! – user1680784