Hướng dẫn mongodb restore from snapshot - khôi phục mongodb từ ảnh chụp nhanh

Trên trang này

  • Tổng quan về ảnh chụp
  • Cân nhắc
  • Sao lưu và khôi phục bằng LVM trên Linux
  • Sao lưu các trường hợp với các tệp nhật ký trên khối lượng riêng biệt hoặc không có nhật ký

Tài liệu này mô tả một quy trình để tạo các bản sao lưu của các hệ thống MongoDB bằng các công cụ cấp hệ thống, chẳng hạn như LVM hoặc thiết bị lưu trữ, cũng như các chiến lược phục hồi tương ứng.

Các ảnh chụp nhanh hệ thống tệp này hoặc các phương thức sao lưu "cấp khối", sử dụng các công cụ cấp hệ thống để tạo bản sao của thiết bị chứa các tệp dữ liệu của MongoDB. Các phương pháp này hoàn thành nhanh chóng và hoạt động đáng tin cậy, nhưng yêu cầu cấu hình hệ thống bổ sung bên ngoài MongoDB.

Mẹo

Ảnh chụp nhanh hoạt động bằng cách tạo các gợi ý giữa dữ liệu trực tiếp và khối lượng ảnh chụp đặc biệt. Những gợi ý này tương đương về mặt lý thuyết với "các liên kết cứng". Khi dữ liệu làm việc khác nhau từ ảnh chụp nhanh, quy trình chụp nhanh sử dụng chiến lược sao chép trên-viết. Do đó, ảnh chụp nhanh chỉ lưu trữ dữ liệu được sửa đổi.

Sau khi thực hiện ảnh chụp nhanh, bạn gắn hình ảnh chụp nhanh trên hệ thống tệp của mình và sao chép dữ liệu từ ảnh chụp nhanh. Bản sao lưu kết quả chứa một bản sao đầy đủ của tất cả dữ liệu.

MongoDB 3.2 đã thêm hỗ trợ cho việc sao lưu mức âm lượng của các phiên bản MongoDB bằng cách sử dụng công cụ lưu trữ WiredTiger khi các tệp dữ liệu và tệp nhật ký của phiên bản MongoDB nằm trên các khối lượng riêng biệt. Tuy nhiên, để tạo bản sao lưu mạch lạc, cơ sở dữ liệu phải được khóa và tất cả các ghi vào cơ sở dữ liệu phải được treo trong quá trình sao lưu.

Trước MongoDB 3.2, việc tạo các bản sao lưu mức âm lượng của các phiên bản MongoDB bằng cách sử dụng WiredTiger yêu cầu các tệp dữ liệu và tạp chí nằm trên cùng một khối lượng.

Đối với các công cụ lưu trữ được mã hóa sử dụng chế độ mã hóa AES256-GCM, AES256-GCM yêu cầu mọi quy trình đều sử dụng giá trị khối truy cập duy nhất với khóa.

Đối với công cụ lưu trữ được mã hóa được cấu hình bằng mật mã AES256-GCM:

  • Khôi phục từ bản sao lưu nóng trong 4.2, nếu bạn khôi phục từ các tệp được thực hiện thông qua bản sao lưu "nóng" (tức là mongod đang chạy), MongoDB có thể phát hiện các khóa "bẩn" khi khởi động và tự động cuộn lại khóa cơ sở dữ liệu để tránh tái sử dụng IV (vectơ khởi tạo).
  • Khôi phục từ bản sao lưu lạnh

    Tuy nhiên, nếu bạn khôi phục từ các tệp được thực hiện thông qua bản sao lưu "lạnh" (tức là mongod không chạy), MongoDB không thể phát hiện các khóa "bẩn" khi khởi động và sử dụng lại bảo mật và bảo mật tính toàn vẹn của IV.

    Bắt đầu từ 4.2, để tránh việc tái sử dụng các khóa sau khi khôi phục từ ảnh chụp nhanh hệ thống tập tin lạnh, MongoDB thêm tùy chọn dòng lệnh mới ____10. Khi bắt đầu với tùy chọn

    umount /dev/vg0/mdb-snap01
    dd if=/dev/vg0/mdb-snap01 | gzip > mdb-snap01.gz
    0, phiên bản mongod cuộn qua các khóa cơ sở dữ liệu được cấu hình với mật mã AES256-GCM và thoát.

Mẹo

  • Ảnh chụp nhanh hoạt động bằng cách tạo các gợi ý giữa dữ liệu trực tiếp và khối lượng ảnh chụp đặc biệt. Những gợi ý này tương đương về mặt lý thuyết với "các liên kết cứng". Khi dữ liệu làm việc khác nhau từ ảnh chụp nhanh, quy trình chụp nhanh sử dụng chiến lược sao chép trên-viết. Do đó, ảnh chụp nhanh chỉ lưu trữ dữ liệu được sửa đổi.

  • Sau khi thực hiện ảnh chụp nhanh, bạn gắn hình ảnh chụp nhanh trên hệ thống tệp của mình và sao chép dữ liệu từ ảnh chụp nhanh. Bản sao lưu kết quả chứa một bản sao đầy đủ của tất cả dữ liệu.not make copies of your data files or restore from filesystem snapshots ("hot" or "cold").

MongoDB 3.2 đã thêm hỗ trợ cho việc sao lưu mức âm lượng của các phiên bản MongoDB bằng cách sử dụng công cụ lưu trữ WiredTiger khi các tệp dữ liệu và tệp nhật ký của phiên bản MongoDB nằm trên các khối lượng riêng biệt. Tuy nhiên, để tạo bản sao lưu mạch lạc, cơ sở dữ liệu phải được khóa và tất cả các ghi vào cơ sở dữ liệu phải được treo trong quá trình sao lưu.

Trước MongoDB 3.2, việc tạo các bản sao lưu mức âm lượng của các phiên bản MongoDB bằng cách sử dụng WiredTiger yêu cầu các tệp dữ liệu và tạp chí nằm trên cùng một khối lượng.

Đối với các công cụ lưu trữ được mã hóa sử dụng chế độ mã hóa AES256-GCM, AES256-GCM yêu cầu mọi quy trình đều sử dụng giá trị khối truy cập duy nhất với khóa.

Đối với công cụ lưu trữ được mã hóa được cấu hình bằng mật mã AES256-GCM:

Khôi phục từ bản sao lưu nóng trong 4.2, nếu bạn khôi phục từ các tệp được thực hiện thông qua bản sao lưu "nóng" (tức là mongod đang chạy), MongoDB có thể phát hiện các khóa "bẩn" khi khởi động và tự động cuộn lại khóa cơ sở dữ liệu để tránh tái sử dụng IV (vectơ khởi tạo).

Khôi phục từ bản sao lưu lạnh

Tuy nhiên, nếu bạn khôi phục từ các tệp được thực hiện thông qua bản sao lưu "lạnh" (tức là mongod không chạy), MongoDB không thể phát hiện các khóa "bẩn" khi khởi động và sử dụng lại bảo mật và bảo mật tính toàn vẹn của IV.

Bắt đầu từ 4.2, để tránh việc tái sử dụng các khóa sau khi khôi phục từ ảnh chụp nhanh hệ thống tập tin lạnh, MongoDB thêm tùy chọn dòng lệnh mới ____10. Khi bắt đầu với tùy chọn

umount /dev/vg0/mdb-snap01
dd if=/dev/vg0/mdb-snap01 | gzip > mdb-snap01.gz
0, phiên bản mongod cuộn qua các khóa cơ sở dữ liệu được cấu hình với mật mã AES256-GCM và thoát.

Nói chung, nếu sử dụng các bản sao lưu dựa trên hệ thống tập tin cho MongoDB Enterprise 4.2+, hãy sử dụng tính năng sao lưu "nóng", nếu có thể.

Đối với MongoDB Enterprise phiên bản 4.0 trở lên, nếu bạn sử dụng chế độ mã hóa AES256-GCM, không tạo bản sao của các tệp dữ liệu của bạn hoặc khôi phục từ các ảnh chụp nhanh hệ thống tập tin ("nóng" hoặc "lạnh").

Cơ sở dữ liệu phải hợp lệ khi ảnh chụp nhanh diễn ra. Điều này có nghĩa là tất cả các ghi được chấp nhận bởi cơ sở dữ liệu cần phải được ghi đầy đủ vào đĩa: cho tạp chí hoặc vào các tệp dữ liệu.

Nếu có các chữ viết không có trên đĩa khi sao lưu xảy ra, bản sao lưu sẽ không phản ánh những thay đổi này.

  • Xóa tất cả các ghi vào đĩa và tạo khóa ghi để đảm bảo trạng thái nhất quán trong quá trình sao lưu.

    Nếu bạn chọn tùy chọn này, hãy xem các trường hợp sao lưu với các tệp nhật ký trên khối lượng riêng biệt hoặc không có nhật ký.Back up Instances with Journal Files on Separate Volume or without Journaling.

  • Định cấu hình LVM để chạy và giữ các tệp dữ liệu MongoDB của bạn trên đỉnh của cuộc đột kích trong hệ thống của bạn.

    Nếu bạn chọn tùy chọn này, hãy thực hiện thao tác sao lưu LVM được mô tả trong Tạo ảnh chụp nhanh.Create a Snapshot.

Phần này cung cấp một cái nhìn tổng quan về một quy trình sao lưu đơn giản sử dụng LVM trên hệ thống Linux. Mặc dù các công cụ, lệnh và đường dẫn có thể (một chút) khác nhau trên hệ thống của bạn, các bước sau đây cung cấp tổng quan cấp cao về hoạt động sao lưu.

Ghi chú

Chỉ sử dụng quy trình sau làm hướng dẫn cho hệ thống sao lưu và cơ sở hạ tầng. Hệ thống sao lưu sản xuất phải xem xét một số yêu cầu và yếu tố cụ thể của ứng dụng duy nhất cho các môi trường cụ thể.

Đã thay đổi trong phiên bản 3.2: Bắt đầu trong MongoDB 3.2, với mục đích sao lưu mức âm lượng của các phiên bản MongoDB bằng WiredTiger, các tệp dữ liệu và tạp chí không còn cần phải cư trú trên một tập.

Để tạo ảnh chụp nhanh với LVM, hãy đưa ra lệnh làm root ở định dạng sau:

lvcreate --size 100M --snapshot --name mdb-snap01 /dev/vg0/mongodb

Lệnh này tạo ra một ảnh chụp nhanh LVM (với tùy chọn

umount /dev/vg0/mdb-snap01
dd if=/dev/vg0/mdb-snap01 | gzip > mdb-snap01.gz
6) có tên
umount /dev/vg0/mdb-snap01
dd if=/dev/vg0/mdb-snap01 | gzip > mdb-snap01.gz
7 của tập
umount /dev/vg0/mdb-snap01
dd if=/dev/vg0/mdb-snap01 | gzip > mdb-snap01.gz
8 trong nhóm âm lượng
umount /dev/vg0/mdb-snap01
dd if=/dev/vg0/mdb-snap01 | gzip > mdb-snap01.gz
9.

Ví dụ này tạo ra một ảnh chụp nhanh có tên

umount /dev/vg0/mdb-snap01
dd if=/dev/vg0/mdb-snap01 | gzip > mdb-snap01.gz
7 nằm ở
lvcreate --size 1G --name mdb-new vg0
gzip -d -c mdb-snap01.gz | dd of=/dev/vg0/mdb-new
mount /dev/vg0/mdb-new /srv/mongodb
1. Vị trí và đường dẫn đến các nhóm và thiết bị khối lượng hệ thống của bạn có thể thay đổi một chút tùy thuộc vào cấu hình LVM của hệ điều hành của bạn.

Ảnh chụp có một nắp ở mức 100 megabyte, vì tham số

lvcreate --size 1G --name mdb-new vg0
gzip -d -c mdb-snap01.gz | dd of=/dev/vg0/mdb-new
mount /dev/vg0/mdb-new /srv/mongodb
2. Kích thước này không phản ánh tổng lượng dữ liệu trên đĩa, mà là số lượng khác biệt giữa trạng thái hiện tại của
lvcreate --size 1G --name mdb-new vg0
gzip -d -c mdb-snap01.gz | dd of=/dev/vg0/mdb-new
mount /dev/vg0/mdb-new /srv/mongodb
3 và việc tạo ra ảnh chụp nhanh (nghĩa là
lvcreate --size 1G --name mdb-new vg0
gzip -d -c mdb-snap01.gz | dd of=/dev/vg0/mdb-new
mount /dev/vg0/mdb-new /srv/mongodb
1.)

Cảnh báo

Đảm bảo rằng bạn tạo các ảnh chụp nhanh với đủ không gian để giải thích cho sự phát triển dữ liệu, đặc biệt trong khoảng thời gian cần phải sao chép dữ liệu ra khỏi hệ thống hoặc hình ảnh tạm thời.

Nếu ảnh chụp nhanh của bạn chạy ra khỏi không gian, hình ảnh ảnh chụp nhanh không thể sử dụng được. Loại bỏ khối lượng logic này và tạo một khối khác.

Ảnh chụp nhanh sẽ tồn tại khi lệnh trả về. Bạn có thể khôi phục trực tiếp từ ảnh chụp nhanh bất cứ lúc nào hoặc bằng cách tạo khối lượng logic mới và khôi phục từ ảnh chụp nhanh này sang hình ảnh thay thế.

Mặc dù ảnh chụp nhanh là tuyệt vời để tạo bản sao lưu chất lượng cao một cách nhanh chóng, nhưng chúng không lý tưởng như một định dạng để lưu trữ dữ liệu sao lưu. Ảnh chụp nhanh thường phụ thuộc và cư trú trên cùng một cơ sở hạ tầng lưu trữ như hình ảnh đĩa ban đầu. Do đó, điều quan trọng là bạn lưu trữ những bức ảnh chụp này và lưu trữ chúng ở nơi khác.

Sau khi tạo ảnh chụp nhanh, hãy gắn ảnh chụp nhanh và sao chép dữ liệu vào lưu trữ riêng biệt. Hệ thống của bạn có thể cố gắng nén các hình ảnh sao lưu khi bạn di chuyển chúng ngoại tuyến. Ngoài ra, hãy lấy một bản sao cấp khối của hình ảnh ảnh chụp nhanh, chẳng hạn như với quy trình sau:

umount /dev/vg0/mdb-snap01
dd if=/dev/vg0/mdb-snap01 | gzip > mdb-snap01.gz

Trình tự lệnh trên thực hiện như sau:

  • Đảm bảo rằng thiết bị

    lvcreate --size 1G --name mdb-new vg0
    gzip -d -c mdb-snap01.gz | dd of=/dev/vg0/mdb-new
    mount /dev/vg0/mdb-new /srv/mongodb
    1 không được gắn. Không bao giờ lấy một bản sao cấp khối của ảnh chụp nhanh hệ thống tập tin hoặc hệ thống tập tin được gắn kết.

  • Thực hiện bản sao cấp khối của toàn bộ hình ảnh ảnh chụp bằng cách sử dụng lệnh

    lvcreate --size 1G --name mdb-new vg0
    gzip -d -c mdb-snap01.gz | dd of=/dev/vg0/mdb-new
    mount /dev/vg0/mdb-new /srv/mongodb
    6 và nén kết quả trong một tệp Gzipped trong thư mục làm việc hiện tại.

    Cảnh báo

    Đảm bảo rằng bạn tạo các ảnh chụp nhanh với đủ không gian để giải thích cho sự phát triển dữ liệu, đặc biệt trong khoảng thời gian cần phải sao chép dữ liệu ra khỏi hệ thống hoặc hình ảnh tạm thời.

Nếu ảnh chụp nhanh của bạn chạy ra khỏi không gian, hình ảnh ảnh chụp nhanh không thể sử dụng được. Loại bỏ khối lượng logic này và tạo một khối khác.

lvcreate --size 1G --name mdb-new vg0
gzip -d -c mdb-snap01.gz | dd of=/dev/vg0/mdb-new
mount /dev/vg0/mdb-new /srv/mongodb

Ảnh chụp nhanh sẽ tồn tại khi lệnh trả về. Bạn có thể khôi phục trực tiếp từ ảnh chụp nhanh bất cứ lúc nào hoặc bằng cách tạo khối lượng logic mới và khôi phục từ ảnh chụp nhanh này sang hình ảnh thay thế.

  • Mặc dù ảnh chụp nhanh là tuyệt vời để tạo bản sao lưu chất lượng cao một cách nhanh chóng, nhưng chúng không lý tưởng như một định dạng để lưu trữ dữ liệu sao lưu. Ảnh chụp nhanh thường phụ thuộc và cư trú trên cùng một cơ sở hạ tầng lưu trữ như hình ảnh đĩa ban đầu. Do đó, điều quan trọng là bạn lưu trữ những bức ảnh chụp này và lưu trữ chúng ở nơi khác.

    Sau khi tạo ảnh chụp nhanh, hãy gắn ảnh chụp nhanh và sao chép dữ liệu vào lưu trữ riêng biệt. Hệ thống của bạn có thể cố gắng nén các hình ảnh sao lưu khi bạn di chuyển chúng ngoại tuyến. Ngoài ra, hãy lấy một bản sao cấp khối của hình ảnh ảnh chụp nhanh, chẳng hạn như với quy trình sau:

    Trình tự lệnh trên thực hiện như sau:

    Đảm bảo rằng thiết bị

    lvcreate --size 1G --name mdb-new vg0
    gzip -d -c mdb-snap01.gz | dd of=/dev/vg0/mdb-new
    mount /dev/vg0/mdb-new /srv/mongodb
    1 không được gắn. Không bao giờ lấy một bản sao cấp khối của ảnh chụp nhanh hệ thống tập tin hoặc hệ thống tập tin được gắn kết.

  • Thực hiện bản sao cấp khối của toàn bộ hình ảnh ảnh chụp bằng cách sử dụng lệnh

    lvcreate --size 1G --name mdb-new vg0
    gzip -d -c mdb-snap01.gz | dd of=/dev/vg0/mdb-new
    mount /dev/vg0/mdb-new /srv/mongodb
    6 và nén kết quả trong một tệp Gzipped trong thư mục làm việc hiện tại.

  • Lệnh này sẽ tạo một tệp

    lvcreate --size 1G --name mdb-new vg0
    gzip -d -c mdb-snap01.gz | dd of=/dev/vg0/mdb-new
    mount /dev/vg0/mdb-new /srv/mongodb
    7 lớn trong thư mục làm việc hiện tại của bạn. Đảm bảo rằng bạn chạy lệnh này trong một hệ thống tệp có đủ không gian trống.

Ghi chú

Chỉ sử dụng quy trình sau làm hướng dẫn cho hệ thống sao lưu và cơ sở hạ tầng. Hệ thống sao lưu sản xuất phải xem xét một số yêu cầu và yếu tố cụ thể của ứng dụng duy nhất cho các môi trường cụ thể.

Đã thay đổi trong phiên bản 3.2: Bắt đầu trong MongoDB 3.2, với mục đích sao lưu mức âm lượng của các phiên bản MongoDB bằng WiredTiger, các tệp dữ liệu và tạp chí không còn cần phải cư trú trên một tập.

umount /dev/vg0/mdb-snap01
lvcreate --size 1G --name mdb-new vg0
dd if=/dev/vg0/mdb-snap01 of=/dev/vg0/mdb-new
mount /dev/vg0/mdb-new /srv/mongodb

Ghi chú

Mới trong phiên bản 3.6:

Tất cả các bộ sưu tập MongoDB đều có UUID theo mặc định. Khi MongoDB khôi phục các bộ sưu tập, các bộ sưu tập được khôi phục giữ lại UUID gốc của chúng. Khi khôi phục một bộ sưu tập không có UUID, MongoDB tạo ra một UUID cho bộ sưu tập được khôi phục.UUIDs by default. When MongoDB restores collections, the restored collections retain their original UUIDs. When restoring a collection where no UUID was present, MongoDB generates a UUID for the restored collection.

Để biết thêm thông tin về bộ sưu tập UUID, xem Bộ sưu tập.Collections.

Bạn có thể triển khai các bản sao lưu ngoài hệ thống bằng quá trình kết hợp và SSH.combined process and SSH.

Trình tự này giống hệt với các thủ tục được giải thích ở trên, ngoại trừ việc nó lưu trữ và nén bản sao lưu trên một hệ thống từ xa bằng SSH.

Xem xét thủ tục sau:

umount /dev/vg0/mdb-snap01
dd if=/dev/vg0/mdb-snap01 | ssh gzip > /opt/backup/mdb-snap01.gz
lvcreate --size 1G --name mdb-new vg0
ssh gzip -d -c /opt/backup/mdb-snap01.gz | dd of=/dev/vg0/mdb-new
mount /dev/vg0/mdb-new /srv/mongodb

Đã thay đổi trong phiên bản 3.2: Bắt đầu trong MongoDB 3.2, với mục đích sao lưu mức âm lượng của các phiên bản MongoDB bằng WiredTiger, các tệp dữ liệu và tạp chí không còn cần phải cư trú trên một tập. Tuy nhiên, cơ sở dữ liệu phải được khóa và tất cả các ghi vào cơ sở dữ liệu phải bị đình chỉ trong quá trình sao lưu để đảm bảo tính nhất quán của bản sao lưu.

Nếu ví dụ mongod của bạn đang chạy mà không có nhật ký hoặc có các tệp nhật ký trên một tập riêng, bạn phải xóa tất cả các ghi vào đĩa và khóa cơ sở dữ liệu để ngăn chặn ghi trong quá trình sao lưu. Nếu bạn có một cấu hình bộ bản sao, thì để bạn dự phòng, sử dụng thứ cấp không nhận được đọc (tức là thành viên ẩn).

Để mở khóa cơ sở dữ liệu sau khi ảnh chụp nhanh đã hoàn thành, hãy sử dụng lệnh sau trong

umount /dev/vg0/mdb-snap01
dd if=/dev/vg0/mdb-snap01 | ssh gzip > /opt/backup/mdb-snap01.gz
lvcreate --size 1G --name mdb-new vg0
ssh gzip -d -c /opt/backup/mdb-snap01.gz | dd of=/dev/vg0/mdb-new
mount /dev/vg0/mdb-new /srv/mongodb
3
umount /dev/vg0/mdb-snap01
dd if=/dev/vg0/mdb-snap01 | ssh gzip > /opt/backup/mdb-snap01.gz
lvcreate --size 1G --name mdb-new vg0
ssh gzip -d -c /opt/backup/mdb-snap01.gz | dd of=/dev/vg0/mdb-new
mount /dev/vg0/mdb-new /srv/mongodb
3