Sự cố (rất có thể)
Hoạt động cuối cùng của hoạt động chính là từ "2015-05-15T02:10:56Z", trong khi hoạt động cuối cùng của hoạt động phụ là từ "2015-05-14T11:23:51Z", là một sự khác biệt gần như 15 giờ. Cửa sổ đó cũng có thể vượt quá cửa sổ nhật ký sao chép của bạn (chênh lệch giữa thời gian của mục nhập hoạt động đầu tiên và cuối cùng trong nhật ký hoạt động của bạn). Nói một cách đơn giản, có quá nhiều thao tác trên cơ sở chính để hoạt động thứ cấp không thể bắt kịp.
Chi tiết hơn một chút (mặc dù đã được đơn giản hóa):trong quá trình đồng bộ hóa ban đầu, dữ liệu mà đồng bộ hóa thứ cấp từ đó là dữ liệu của một thời điểm nhất định. Khi dữ liệu của thời điểm đó được đồng bộ hóa, thứ cấp kết nối với oplog và áp dụng các thay đổi đã được thực hiện giữa thời điểm đã nói và bây giờ theo các mục oplog. Điều này hoạt động tốt miễn là oplog giữ tất cả các hoạt động giữa thời điểm được đề cập trong thời gian. Nhưng oplog có kích thước hạn chế (nó được gọi là bộ sưu tập giới hạn
). Vì vậy, nếu có nhiều hoạt động xảy ra trên chính hơn oplog có thể giữ trong quá trình đồng bộ hóa ban đầu, thì các hoạt động cũ nhất sẽ "biến mất". Phương thức thứ cấp nhận ra rằng không phải tất cả các thao tác đều cần thiết để "xây dựng" cùng một dữ liệu với dữ liệu chính và từ chối hoàn tất quá trình đồng bộ hóa, vẫn ở trong RECOVERY
chế độ.
(Các) giải pháp
Vấn đề là một sự cố đã biết chứ không phải lỗi, mà là kết quả của hoạt động bên trong của MongoDB và một số giả định không an toàn do nhóm phát triển đưa ra. Do đó, có một số cách để đối phó với tình huống này. Đáng buồn thay, vì bạn chỉ có hai nút mang dữ liệu, tất cả đều liên quan đến thời gian chết.
Tùy chọn 1:Tăng kích thước nhật ký hoạt động
Đây là phương pháp ưa thích của tôi, vì nó giải quyết vấn đề một lần và (loại) cho tất cả. Tuy nhiên, nó phức tạp hơn một chút so với các giải pháp khác. Từ góc độ cấp cao, đây là các bước bạn thực hiện.
- Tắt hệ thống chính
- Tạo bản sao lưu của oplog bằng cách sử dụng quyền truy cập trực tiếp vào các tệp dữ liệu
- Khởi động lại
mongod
ở chế độ độc lập - Sao chép oplog hiện tại vào một bộ sưu tập tạm thời
- Xóa oplog hiện tại
- Tạo lại oplog với kích thước mong muốn
- Sao chép lại các mục oplog từ bộ sưu tập tạm thời sang oplog mới sáng bóng
- Khởi động lại
mongod
như một phần của tập hợp bản sao
Đừng quên tăng oplog của phụ trước khi thực hiện đồng bộ hóa ban đầu, vì nó có thể trở thành chính vào một lúc nào đó trong tương lai!
Để biết chi tiết, vui lòng đọc "Thay đổi kích thước của oplog" trong các hướng dẫn về bảo trì bộ bản sao .
Tùy chọn 2:Tắt ứng dụng trong khi đồng bộ hóa
Nếu tùy chọn 1 không khả thi, giải pháp thực sự khác là tắt ứng dụng gây ra tải trên tập hợp bản sao, khởi động lại quá trình đồng bộ hóa và đợi quá trình hoàn tất. Tùy thuộc vào lượng dữ liệu được chuyển, hãy tính toán với vài giờ.
Ghi chú cá nhân
Vấn đề cửa sổ oplog là một vấn đề nổi tiếng. Trong khi các tập hợp bản sao và các cụm phân đoạn dễ dàng thiết lập với MongoDB, bạn cần có một số kiến thức và một chút kinh nghiệm để duy trì chúng đúng cách. Đừng chạy thứ gì đó quan trọng như một cơ sở dữ liệu với thiết lập phức tạp mà không biết những điều cơ bản - trong trường hợp Có điều gì đó Xấu (tm) xảy ra, điều đó có thể dẫn đến tình trạng GẤP.