5

Hãy xem xét các tình huống sau: trường hợpSao chép CouchDB hoạt động như thế nào với các máy chủ Không/Phục hồi?

3 EC2 nằm ở:

  • Mỹ-WEST
  • Ireland
  • Tokyo

Mỗi trường hợp là một máy chủ CouchDB chuyên dụng. Mỗi máy chủ CouchDB được thiết lập để chạy sao chép liên tục với mọi máy chủ khác (hai hướng).

Bây giờ giả sử rằng máy chủ Ireland sẽ ngoại tuyến do thiếu AWS. Các máy chủ US-WEST và Tokyo CouchDB sẽ thử lại X số lần và sau đó cuối cùng không sao chép được với máy chủ đó (điều này có đúng không?)

Cho phép nói 6 giờ trôi qua và AWS lấy lại trực tuyến và máy chủ quay trở lại lên - tôi giả sử Mỹ-WEST và Tokyo sẽ bỏ qua các máy chủ ở Ireland cho đến khi Ailen CouchDB máy chủ tái khởi đồng bộ hai chiều với cả hai trong số họ, a la:

Ailen CouchDB _replicator Pseudo-Cài đặt

  • sao chép [source = local sở tại, mục tiêu = vn tây]
  • lặp [nguồn = vn-tây, target = localhost]
  • lặp [source = localhost, target = tokyo]
  • lặp [source = tokyo, target = localhost]

Q1: Sự hiểu biết của tôi về sự thất bại sao chép/phục hồi của Couch có đúng không?

Q2: Điều gì xảy ra nếu có lỗi mạng tự khắc phục sau một giờ (cụ thể: không có khởi động lại máy chủ nào buộc DB tự khởi động lại khi khởi động), các trường hợp CouchDB tương ứng phản ứng như thế nào? Tôi tưởng tượng rằng chúng ta về phía tây và tokyo sẽ quên Ireland, nhưng liệu Ireland có đột nhiên bắt đầu nói chuyện với hai máy chủ đó một lần nữa, tái khởi tạo lại bản sao hai chiều liên tục?

Tôi đặc biệt quan tâm đến việc khôi phục lỗi trong môi trường EC2, vì vậy nếu có chi tiết cụ thể về môi trường mà tôi đã bỏ lỡ, vui lòng cho tôi biết.

Cảm ơn!

Trả lời

4

Trước 1,1, tác vụ nhân rộng không liên tục, thậm chí là tác vụ liên tục. Trong trường hợp ngắt kết nối, có một nỗ lực hạn chế khi thử lại, nhưng cuối cùng nó sẽ dừng lại. Khi kết nối tiếp tục, bạn sẽ cần phải bắt đầu sao chép lại. Kể từ khi nhân rộng là idempotent (bắt đầu nhiệm vụ nhân rộng giống nhau hai lần là giống như bắt đầu nó một lần), bạn chỉ có thể thêm một cronjob để bắt đầu nó mỗi phút (hoặc bất kỳ khoảng thời gian có vẻ sane cho bạn). Nếu tác vụ đang chạy, nỗ lực trả về thành công (nhưng không bắt đầu sao chép khác).

Trong 1.1, bạn có thể tạo các tác vụ sao chép liên tục bằng cách tạo tài liệu trong cơ sở dữ liệu _replicator đặc biệt. CouchDB sẽ thử lại nếu nó gặp sự cố hoặc kết nối bị gián đoạn. LƯU Ý: 1.1.0 cuối cùng từ bỏ, trong bản phát hành tiếp theo (1.1.1) chúng tôi cho phép thử lại vô hạn.

Khi CouchDB được thiết kế từ đầu để hỗ trợ sao chép đa chủ, bạn sẽ không ngạc nhiên khi biết rằng nó xử lý gián đoạn kết nối rất tốt. Những thay đổi xảy ra trong quá trình gián đoạn được tìm thấy và nhân bản nhanh chóng.

+1

Robert, điều đó thật tuyệt vời. Sau khi sử dụng SimpleDB, Redis và Mongo tôi đột nhiên trở nên nhận thức được nỗi ám ảnh của Couch với sự sao chép và nó giống như một ánh sáng đi vào đầu tôi ... đột nhiên TẤT CẢ nỗi đau của tôi chỉ với các kho dữ liệu NoSQL/persistence/safety bị mất và tôi bị bỏ lại với hệ thống đơn giản và mạnh mẽ này, * chỉ hoạt động *. Cảm ơn rất nhiều vì đã làm rõ! –

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