Sao lưu gia tăng Mongodb


26

Tôi đã được giao nhiệm vụ thiết lập các bản sao lưu gia tăng cho bản sao MongoDB, vì điểm khởi đầu, dĩ nhiên, tôi đã googled nó và không thể tìm thấy bất cứ điều gì trên tài liệu MongoDB, tôi đã tìm thấy câu hỏi này trên Stack Overflow, khuyến khích phát triển giải pháp của riêng tôi Như không thấy Tayra rất năng động.

Tôi đã đọc oplogvà nhận ra rằng rất dễ dàng để phát triển một cái gì đó để phát lại nhật ký, nhưng hóa ra tôi không phải làm mongorestoređiều đó đối với tôi.

Bây giờ tôi có một giải pháp làm việc với các tập lệnh bash và nó khá dễ, đó là lý do tôi hỏi ở đây nếu có bất kỳ lỗ hổng nào trong logic của tôi, hoặc có thể một cái gì đó sẽ cắn tôi trong tương lai.

Dưới đây là cách tôi thực hiện:

Thủ tục sao lưu đầy đủ

  1. khóa viết trên một thành viên phụ db.fsyncLock()
  2. Chụp ảnh
  3. Ghi vị trí cuối cùng từ oplog

    db.oplog.rs.find().sort({$natural:-1}).limit(1).next().ts
  4. Mở khóa viết db.fsyncUnlock()

Thủ tục sao lưu gia tăng

  1. khóa viết trên một thành viên phụ
  2. Kết xuất oplog từ vị trí oplog được ghi lại trên bản sao lưu đầy đủ (hoặc gia tăng mới nhất):

    mongodump --host <secondary> -d local -c oplog.rs -o /mnt/mongo-test_backup/1 
        --query '{ "ts" : { $gt :  Timestamp(1437725201, 50) } }'
  3. Ghi lại vị trí oplog mới nhất (giống như cách sao lưu toàn bộ)

  4. Mở khóa viết

Thủ tục khôi phục sao lưu đầy đủ

  1. dừng tất cả các trường hợp mongod
  2. sao chép ảnh chụp vào thư mục dữ liệu của hộp sẽ là chính, nhưng đảm bảo loại trừ tất cả local*mongod.lock kỹ thuật khôi phục này được gọi là cấu hình lại bằng cách phá vỡ gương
  3. Bắt đầu chính
  4. cấu hình lại bản sao
  5. bắt đầu các phần phụ mà không có bất kỳ dữ liệu nào, hãy để chúng thực hiện đồng bộ hóa ban đầu. Hoặc sao chép dữ liệu từ chính mới với localcơ sở dữ liệu mới

Khôi phục sao lưu gia tăng

Khi chúng tôi tạo bản sao lưu gia tăng, nó lưu trữ như thế này:

/mnt/mongo-test_backup/1/local/oplog.rs.bson
/mnt/mongo-test_backup/1/local/oplog.rs.metadata.json

Chúng tôi đang cố gắng oplog.rs.bsonnhưng chúng tôi sẽ phải đổi tên nó, vì vậy đây là các bước:

  1. thay đổi thư mục để sao lưu: cd /mnt/mongo-test_backup/1/local
  2. xóa tập tin json rm *.json
  3. đổi tên tập tin bson mv oplog.rs.bson oplog.bson
  4. phục hồi lại nó:

    mongorestore -h <primary> --port <port> --oplogReplay /mnt/mongo-test_backup/1/local

Tôi có tất cả kịch bản, tôi có thể cam kết nó trên GitHub sau.

Câu hỏi là nếu có bất kỳ lỗ hổng trong logic? Tôi hơi nghi ngờ vì thủ tục này khá đơn giản và tôi vẫn không thể tìm thấy nó được ghi lại ở bất cứ đâu.


2
Phiên bản Mongo nào bạn đang sử dụng? Nếu bạn đang sử dụng Wiredtiger, thì mục đầu tiên bạn tham chiếu với db.fsyncLock () là một vấn đề. MongoDB Inc tuyên bố "Với WiredTiger, lệnh fsync với tùy chọn khóa không thể đảm bảo rằng các tệp dữ liệu không thay đổi. Do đó, không sử dụng các phương pháp này để đảm bảo tính nhất quán cho mục đích tạo bản sao lưu." liên kết
SDillon 24/07/2015

1
@SDillon sử dụng 3.0.4 nhưng không sử dụng WiredTiger, ít nhất là chưa. Tôi quyết định sử dụng nó, thay vì khóa ghi, chúng tôi sẽ phải dừng mongod lại với nhau. Đó là một điểm công bằng cảm ơn
Tiago

Tôi đã tìm thấy công cụ sau đây để sao lưu gia tăng github.com/EqualExperts/Tayra hy vọng điều này sẽ giúp ích
Ahmad Abuhasna

1
"Đã thay đổi trong phiên bản 3.2: lệnh fsync với tùy chọn khóa có thể đảm bảo rằng các tệp dữ liệu không thay đổi đối với các phiên bản MongoDB bằng cách sử dụng MMAPv1 hoặc công cụ lưu trữ WiredTiger, do đó cung cấp tính nhất quán cho mục đích tạo bản sao lưu."
an toàn

Cách thông thường (và hoàn toàn dễ nhất) để thực hiện sao lưu gia tăng là sử dụng LVM và ảnh chụp nhanh. docs.mongodb.com/manual/tutorial/ khăn
JJussi

Câu trả lời:


3

Để trả lời câu hỏi của bạn. Không! Không có thất bại trên logic của bạn và nó sẽ hoạt động mà không có vấn đề. Tuy nhiên, nếu có thể sử dụng ảnh chụp nhanh LVM, cách tốt hơn là thực hiện sao lưu.


Làm thế nào để bạn thực hiện sao lưu gia tăng của ảnh chụp nhanh LVM? Cảm ơn!
TanisDLJ

Ảnh chụp nhanh LVM được tăng dần theo bản chất. Ảnh chụp là những khoảnh khắc trong thời gian và chỉ có những thay đổi được ghi lại.
JJussi

Chỉ cần một bức ảnh chụp có, nó là gia tăng. Nhưng nếu bạn lưu trữ ảnh chụp thì đó là bản sao lưu đầy đủ. Ví dụ, bạn không thể lưu trữ các bản sao lưu gia tăng khác nhau như trùng lặp. Và bạn không thể đơn giản bắt đầu tạo ảnh chụp nhanh cứ sau 30 phút để sao lưu gia tăng vì nó sẽ ảnh hưởng đến hiệu suất rất tệ.
TanisDLJ
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.