2012-02-29 49 views
13

Tôi đọc về các thiết lập MongoDB khác nhau để thực hiện sao lưu mà không có thời gian chết. Chiến lược nào là tốt nhất hoặc thậm chí họ có thể được so sánh?MongoDb Bản sao lưu nóng - sao chép dữ liệu/db Bản sao VS với fsyncLock

  1. Enable journaling và chỉ cần sao chép vào thư mục /data/db - đó là rõ ràng đối với tôi nếu điều này là đủ - trên trang chủ MongoDB nó nói rằng bạn phải "bản chụp nó" và nó hoạt động trên SAN và LVM làm ví dụ .

    Câu hỏi:

    Ảnh chụp nhanh có nghĩa là gì trong ngữ cảnh này sẽ được tính là ảnh chụp nhanh? Là nó lưu để sao chép một thư mục dữ liệu MongoDB (2.0+) journaling trên một máy chủ Windows với NTFS? Làm thế nào để bạn đảm bảo rằng nó là an toàn để làm trên hệ thống tập tin của riêng bạn và thiết lập?

  2. Thiết lập bộ bản sao với 2 máy chủ và trọng tài. Sau đó, sử dụng rs.status()fsyncLock/mở khóa để đảm bảo dữ liệu chỉ được đọc trên máy chủ phụ khi thực hiện sao lưu.

    > db.fsyncLock 
    function() { 
        return db.adminCommand({fsync:1, lock:true}); 
    } 
    > db.fsyncUnlock 
    function() { 
        return db.getSiblingDB("admin").$cmd.sys.unlock.findOne(); 
    } 
    

    Câu hỏi:

    Nếu bạn sử dụng ổ khóa trong một bản sao thiết lập dường như viết và đọc có thể được khóa cho toàn bộ bản sao thiết lập và this bug chưa được cố định?

    Điều gì sẽ xảy ra nếu trung học được bầu chọn là chính trong khi đang tiến hành sao lưu? Liệu quá trình sao lưu có dừng lại hay bộ bản sao dừng đáp ứng yêu cầu viết cho đến khi nó được mở khóa?

    Lưu ý:

    Để bây giờ tôi muốn các giải pháp đơn giản và chỉ cần sao chép vào thư mục data/db với các file tạp chí và chờ đợi với tập bản sao. MongoDB chạy trên một máy chủ Windows 64 bit (RackSpace Cloud).

Trả lời

12

Việc đặt cược tốt nhất là để làm fsync + khóa trên một phụ, sau đó ảnh chụp ở mức âm lượng đĩa hoặc khối lượng cấp (ví dụ sử dụng lvm2, hyper-v, btrfs), mở khóa cơ sở dữ liệu, sau đó sao chép snapshotted Hồ sơ dữ liệu. Điều này giảm thiểu thời gian chết của phụ và dễ dàng để khôi phục.

"Snapshotting" trong ngữ cảnh này đề cập đến các tính năng chụp nhanh được cung cấp bởi một số trình quản lý âm lượng, hệ thống tệp và trình giám sát. Về cơ bản, đây là tính năng 'copy-on-write' cho các thiết bị khối: thay vì ghi đè dữ liệu khi hệ điều hành yêu cầu, nó sẽ ghi dữ liệu mới ở nơi khác và giữ cả phiên bản cũ và phiên bản mới có thể đọc được. Snapshotting thường mất gần như không có thời gian, nhưng trên một số hệ thống, đó là một ý tưởng tồi để giữ nhiều ảnh chụp nhanh của cùng một tệp, vì nó có thể làm chậm đáng kể việc viết trong tương lai.

Tại sao tôi tin rằng đây là chiến lược tốt nhất cho sao lưu đầy đủ:

  1. Sử dụng mongodump sẽ không lưu trữ các dữ liệu chỉ mục Các chỉ số sẽ được phục hồi, nhưng xây dựng lại các chỉ số phục hồi có thể mất thời gian - điều cuối cùng bạn cần khi mọi người la hét với bạn là một hoạt động mất hàng giờ và không thể được tăng tốc.

  2. Đồng bộ hóa + khóa sẽ chặn người viết và có thể chặn người đọc do đó, tốt nhất nên làm điều đó trên một (thụ động) phụ chứ không phải trên trang chính.

  3. Dừng một phụ sẽ điền vào mã vạch đó là lý do tại sao bạn nên giữ thời gian khóa càng ngắn càng tốt. Thay vì sao chép tất cả các tệp dữ liệu (có thể mất nhiều giờ) trong quá trình khóa, chỉ cần thực hiện một ảnh chụp nhanh sẽ chỉ mất vài giây. Do đó, giới hạn oplog không phải là một mối quan tâm.

  4. Mọi thứ đều 'trở lại bình thường' trong khi bản sao thực đang chạy, giúp bạn yên tâm. Sự khác biệt duy nhất sẽ được tải cao hơn trên một trung học trong quá trình sao lưu, mà không phải là một mối quan tâm lớn.

Phát biểu câu hỏi của bạn:

  • về ổ khóa trong các bản sao tập: Giữ thời gian khóa ngắn, và sử dụng một thứ thụ động (mà không thể được bầu làm chủ) để đợi nhà văn có thể' t gian hàng.

  • "gì nếu thứ được bình chọn trong như ưa chuộng khi sao lưu được tiến hành" không thể xảy ra nếu hệ thống dự phòng của bạn là thụ động

Để bây giờ tôi muốn các giải pháp đơn giản và chỉ cần sao chép dữ liệu/db dir với các tập tin tạp chí và chờ với bộ bản sao. MongoDB chạy trên một máy chủ Windows 64 bit (RackSpace Cloud).

Bạn có thể làm điều đó. Tập hợp snapshotting có lẽ vẫn là cách tốt nhất để đi, cho bạn chỉ giây của thời gian chết. Nếu dữ liệu của bạn nhỏ, đơn giản mongodump có thể dễ dàng hơn, nhưng đảm bảo thời gian khôi phục có thể chấp nhận được (tùy thuộc vào chỉ mục của bạn).

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