Đây có phải là một chiến lược sao lưu hợp lệ cho MongoDB không?


11

Tôi đã có một máy chủ chuyên dụng duy nhất với cơ sở dữ liệu MongoDB khoảng 10GB. Tôi cần thực hiện sao lưu hàng ngày, nhưng tôi không thể có thời gian chết với cơ sở dữ liệu. Có thể sử dụng một bản sao được đặt trên một đĩa đơn (với 2 trường hợp mongod chạy trên các cổng khác nhau) và chỉ cần lấy một tệp phụ ngoại tuyến và sao lưu các tệp dữ liệu vào bộ lưu trữ ngoại vi như S3 (bật nhật ký)? Hoặc sử dụng master / Slave sẽ tốt hơn một bộ bản sao?

Điều này có khả thi không, và nếu vậy, tôi có thể gặp vấn đề gì? Nếu không, làm thế nào để tôi khái niệm hóa điều này để làm việc?

Câu trả lời:


6

Bản sao sẽ hoạt động trong kịch bản này. Tuy nhiên, tôi không thể biết nếu có hai phiên bản MongoDB trên cùng một máy chủ là một ý tưởng hay - điều này phụ thuộc vào phần cứng / phần mềm máy chủ và tải.

Để đảm bảo backupnút MongoDB của bạn không trở thành chủ, hãy đặt prioritytham số của nó thành 0, vd

rs.add({_id: 1, host: "localhost:<port>", priority: 0})

LƯU Ý : nếu bạn không thể có thời gian chết, bạn NÊN có ít nhất 2 nút MongoDB chính trong Bản sao, xem bài viết


2

Một chiến lược cần xem xét là sử dụng tùy chọn "ẩn" trên nút sao lưu trên bản sao của bạn. Từ blog MongoDB:

Các máy chủ ẩn sẽ không xuất hiện trong kết quả isMaster (). Điều này cũng có nghĩa là chúng sẽ không được sử dụng nếu trình điều khiển tự động phân phối đọc cho nô lệ. Một máy chủ ẩn phải có mức độ ưu tiên là 0 (bạn không thể có một chính bị ẩn). Để thêm một thành viên ẩn, hãy chạy:

rs.add ({"_ id": num, "host": tên máy chủ, "ưu tiên": 0, "ẩn": true})


1

Các bộ bản sao được ưa thích nói chung nhưng cũng trong trường hợp này đơn giản chỉ vì chức năng tự động phục hồi và tự động đồng bộ lại. Phương pháp sao lưu mà bạn đang mô tả âm thanh hoàn toàn hợp lý và cũng đã được sử dụng trước đây với các cơ sở dữ liệu khác.

Vấn đề tiềm năng duy nhất tôi thấy là trong một số trường hợp, phụ của bạn có thể được thăng cấp lên chính và bạn sẽ phải lấy bản sao lưu của mình từ phụ mới hoặc b) làm cho tập lệnh sao lưu của bạn đủ thông minh để nói về trường hợp đó MongoDB bước xuống.

Tin tốt là nó khá tầm thường

  1. Truy vấn nguồn sao lưu của bạn để tìm ra trường hợp nào là chính và trường hợp nào là phụ ( db.isMaster())
  2. Thuyết phục ví dụ sao lưu để từ bỏ bằng cách sử dụng các lệnh rs.freeze()hoặc kết nối lại với phụrs.stepDown()

Có phải đó không phải là một tùy chọn để đặt mức độ ưu tiên thành 0 như Alexander gợi ý để thứ cấp không bao giờ trở thành chính?
James Simpson

Bạn sẽ phải thực hiện một số thử nghiệm, nhưng tôi không chắc liệu thứ cấp sẽ chỉ chờ nếu vì lý do nào đó mà quy trình chính bị hỏng. Tôi đã luôn muốn người thứ hai của mình tiếp quản;)
Charles Hooper

1
>> thứ cấp của bạn có thể được thăng cấp lên chính - Như đã đề cập, việc đặt thứ cấp thành ưu tiên 0 sẽ ngăn không cho nó chuyển sang chế độ chính.
Jonesome phục hồi

Bạn có thể kết nối với bất kỳ một trong số các đồng nghiệp từ danh sách các nút ngang hàng của mình (nó có thể là bất kỳ nút chính, phụ, trọng tài hoặc nút ẩn nào), yêu cầu người ngang hàng đó là ai ( rs.status()và lặp qua result["members"]) và kết nối với một trong các thứ hai để thực hiện sao lưu.
yfeldblum
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.