Bản sao MongoDB thiết lập sao lưu

Quy trình này phác thảo quy trình lấy dữ liệu MongoDB và khôi phục dữ liệu đó thành một. Sử dụng phương pháp này để triển khai thử nghiệm gieo hạt từ các bản sao lưu sản xuất cũng như một phần của quá trình khắc phục thảm họa

Bạn không thể khôi phục một tập dữ liệu thành ba phiên bản mới rồi tạo một tập hợp bản sao. Trong tình huống này, MongoDB sẽ buộc các phần thứ hai thực hiện đồng bộ hóa ban đầu. Các quy trình trong tài liệu này mô tả các cách chính xác và hiệu quả để triển khai một bộ bản sao

Khôi phục cơ sở dữ liệu thành một bộ bản sao nút đơn

1

Lấy các tệp Cơ sở dữ liệu MongoDB sao lưu

Các tệp sao lưu có thể đến từ ảnh chụp nhanh hệ thống tệp . Trình quản lý đám mây MongoDB tạo các tệp cơ sở dữ liệu MongoDB cho các ảnh chụp nhanh được lưu trữ và ảnh chụp nhanh theo thời gian. Đối với Ops Manager, một giải pháp tại chỗ có sẵn trong MongoDB Enterprise Advanced, hãy xem thêm Tổng quan về Sao lưu Ops Manager.

Bạn cũng có thể sử dụng để khôi phục tệp cơ sở dữ liệu bằng cách sử dụng dữ liệu được tạo bằng. Xem Sao lưu và khôi phục bằng công cụ MongoDB để biết thêm thông tin.

2

Bắt đầu sử dụng tệp dữ liệu từ bản sao lưu làm đường dẫn dữ liệu

Bắt đầu một phiên bản cho bộ bản sao một nút mới. Chỉ định đường dẫn đến các tệp dữ liệu sao lưu với tùy chọn --dbpath và tên bộ bản sao với tùy chọn --replSet

sao chép

mongod --dbpath /data/db --replSet <replName>

3

Kết nối Shell với phiên bản mongod

Ví dụ: để kết nối với một máy chủ đang chạy trên cổng mặc định của

mongo
3, chỉ cần ra lệnh

sao chép

mongo

4

Bắt đầu bộ bản sao mới

Sử dụng trên một và chỉ một thành viên của bộ bản sao

sao chép

rs.initiate()

MongoDB khởi tạo một tập hợp bao gồm thành viên hiện tại và sử dụng cấu hình tập hợp bản sao mặc định

Thêm thành viên vào bộ bản sao

MongoDB cung cấp hai tùy chọn để khôi phục các thành viên phụ của bộ bản sao

  • Sao chép thủ công các tệp cơ sở dữ liệu vào từng thư mục dữ liệu
  • Cho phép phân phối dữ liệu tự động

Các phần sau đây phác thảo cả hai cách tiếp cận

Ghi chú

Nếu cơ sở dữ liệu của bạn lớn, quá trình đồng bộ hóa ban đầu có thể mất nhiều thời gian để hoàn tất. Đối với cơ sở dữ liệu lớn, có thể nên sao chép các tệp cơ sở dữ liệu vào từng máy chủ

Sao chép tệp cơ sở dữ liệu và khởi động lại phiên bản

Sử dụng chuỗi thao tác sau để “gieo” các thành viên bổ sung của bộ bản sao với dữ liệu đã khôi phục bằng cách sao chép trực tiếp các tệp dữ liệu MongoDB

1

Tắt phiên bản mà bạn đã khôi phục

Sử dụng hoặc để đảm bảo tắt sạch

2

Sao chép thư mục dữ liệu của chính vào từng thư mục phụ

Sao chép thư mục dữ liệu vào các thành viên khác của bộ bản sao. Theo mặc định là

rs.initiate()
1

3

Bắt đầu phiên bản mà bạn đã khôi phục

4

Thêm phần phụ vào bộ bản sao

Trong trình bao được kết nối với , hãy thêm trình bao vào bộ bản sao bằng cách sử dụng. Xem Triển khai bộ bản sao để biết thêm thông tin về cách triển khai bộ bản sao.

Cập nhật phần phụ bằng cách sử dụng Đồng bộ hóa ban đầu

Sử dụng chuỗi thao tác sau để "gieo" thêm các thành viên của bộ bản sao với dữ liệu đã khôi phục bằng thao tác đồng bộ hóa ban đầu mặc định

1

Đảm bảo rằng các thư mục dữ liệu trên các thành viên của bộ bản sao tiềm năng trống

2

Thêm từng thành viên tiềm năng vào bộ bản sao

Khi bạn thêm một thành viên vào bộ bản sao, hãy sao chép dữ liệu từ thành viên đó sang thành viên mới

←   Sao lưu và khôi phục bằng Ảnh chụp nhanh hệ thống tệp Sao lưu và khôi phục bằng công cụ MongoDB  →

© MongoDB, Inc 2008-nay. MongoDB, Mongo và logo chiếc lá là các nhãn hiệu đã đăng ký của MongoDB, Inc

Mục tiêu điểm phục hồi (RPO) thường đề cập đến lượng dữ liệu có thể bị mất trong khoảng thời gian phù hợp nhất với doanh nghiệp, trước khi xảy ra thiệt hại đáng kể, từ thời điểm xảy ra sự kiện quan trọng đến lần sao lưu trước đó

RTO là gì?

Mục tiêu thời gian khôi phục (RTO) thường đề cập đến lượng thời gian mà một ứng dụng, hệ thống và/hoặc quy trình có thể ngừng hoạt động mà không gây ra thiệt hại đáng kể cho doanh nghiệp cũng như thời gian dành cho việc khôi phục ứng dụng và dữ liệu của nó

Tôi nghĩ bạn có nghĩa là RPO thay vì RTO. Bởi vì khôi phục toàn bộ cụm 30 TB 5 nút trong 5 phút… Chúc may mắn với điều đó

Bây giờ tôi sẽ giả sử mục tiêu là RPO 5 phút (=dữ liệu bị mất tối đa 5 phút)

Nhưng trước hết, 30 TB dữ liệu trong một Bộ bản sao (RS) là KHỔNG LỒ. Thông thường, các máy khách MongoDB được khuyến nghị phân đoạn cụm của chúng khi chúng đạt tới 2TB dữ liệu. Đôi khi, tùy thuộc vào trường hợp sử dụng và sau một số cuộc thảo luận với Kỹ sư Dịch vụ Kỹ thuật (TSE), họ có thể đẩy lên 4TB dữ liệu nhưng không hiếm khi vượt quá mức đó

Thông thường, một MongoDB Cluster khỏe mạnh cần khoảng 15 đến 20% dung lượng lưu trữ trong RAM. Vì vậy, nếu bạn có 30 TB, tôi khuyên bạn nên có ~6 TB RAM trên mỗi máy trong RS của mình…

Vì vậy, để tóm tắt, bạn nên shard

Như đã nói, chúng ta hãy quay lại vấn đề sao lưu

Tôi không rành về snapshot của AWS và EBS. Nhưng để đảm bảo an toàn, tôi sẽ db.fsyncLock() (doc) nút bạn muốn chụp nhanh trước khi chụp nhanh. Điều này buộc nút phải tuôn ra đĩa tất cả các hoạt động ghi đang chờ xử lý và khóa toàn bộ phiên bản mongod. Tôi nghĩ điều này sẽ tốt hơn để đảm bảo tính nhất quán của ảnh chụp nhanh

Bây giờ hãy nói về oplog. Nếu bạn muốn RPO 5 phút, bạn sẽ phải có khả năng phát lại oplog từ thời điểm ảnh chụp nhanh cuối cùng đến dấu thời gian mong muốn. Điều đó có nghĩa là bạn phải ghi lại oplog ở một cụm khác ở nơi khác

Mà bây giờ đưa chúng ta đến câu hỏi này

Bản sao MongoDB thiết lập sao lưu
Bhuvanesh_R

Nhưng tại thời điểm nào tôi cần bắt đầu khôi phục oplog? . Vì vậy, bất kỳ con trỏ để biết về điều này?

oplog là

Điều này có nghĩa là bạn có thể phát lại toàn bộ oplog mà bạn có, bất kể thời gian chụp nhanh là bao nhiêu, bạn sẽ luôn kết thúc ở cùng một trạng thái

Giả sử ảnh chụp nhanh của bạn được thực hiện lúc 10 giờ sáng và bạn gặp sự cố lúc 10 giờ. 20 giờ sáng. Vào lúc 11 giờ sáng, bạn đã khôi phục ảnh chụp nhanh lúc 10 giờ sáng của mình cho 5 máy hoàn toàn mới (chúc may mắn với 30TB… đó là lý do tại sao sharding cũng quan trọng đối với chiến lược RTO). Bây giờ bạn có thể áp dụng oplog từ 9 giờ sáng => mục oplog cuối cùng bạn nhận được (vì vậy có thể là 10. 19 và 55 giây sáng và kết quả cuối cùng sẽ ở trạng thái giống như bộ sưu tập lúc 10. 19 và 55 giây chính xác. Bạn cũng có thể chọn phát lại TẤT CẢ oplog bạn có từ 3 ngày trước hoặc chỉ phát lại từ 9. 59am, ban se tro thanh bang chung

Miễn là bạn đảm bảo rằng bạn không bắt đầu phát lại oplog sau thời gian chụp nhanh (chẳng hạn như 10. 01 giờ sáng), bạn có thể phát lại bất cứ thứ gì bạn thích

Đó cũng là lý do tại sao việc giữ một lượng lớn oplog (chẳng hạn như 3 ngày) lại quan trọng. Vì vậy, bạn có thể khôi phục cụm ở bất kỳ trạng thái nào trong 3 ngày này, với điều kiện là bạn có ảnh chụp nhanh trước ngày đó và vẫn được bảo vệ bởi oplog

Tôi hy vọng nó có ý nghĩa.

Bản sao MongoDB thiết lập sao lưu

Chỉ là một nhận xét cuối cùng về lý do tại sao sharding giúp RTO. việc mang lại 2TB trên 15 phân đoạn (15 * 3 nút) với 2TB trên mỗi phân đoạn dễ dàng hơn là khôi phục 30TB trên 3 nút. Khi bạn được phân đoạn, bạn có thể bắt đầu tất cả quá trình truyền dữ liệu song song và RTO cuối cùng của bạn sẽ là (thời gian truyền 2TB + 1h bảo trì & cung cấp máy + thời gian phát lại oplog). Nếu bạn đang sử dụng một RS, thì RTO của bạn sẽ bắt đầu với (thời gian truyền 30TB)

Oh và tuyên bố kết thúc. Mọi thứ mà chúng tôi nói ở đây là hoàn toàn tự động, được mã hóa, được thiết kế và triển khai cẩn thận trong MongoDB Atlas

Khôi phục toàn bộ cụm bằng ảnh chụp nhanh + phát lại oplog giống như 10 lần nhấp chuột trên cùng

Chúc mừng,
tối đa

Không vì oplog là idempotent. Bạn có thể phát lại oplog hoàn toàn 10 lần, cơ sở dữ liệu và bộ sưu tập ở cuối sẽ luôn ở cùng một trạng thái

Nếu bạn muốn, oplog chỉ chứa kết quả của giao dịch chứ không chứa chính giao dịch đó. Mỗi hoạt động bạn chạy được chuyển đổi thành một mục idempotent trong oplog

Ví dụ

chèn tài liệu {name: "Max"} vào coll trở thành tài liệu {_id: ObjectId(xx), name: "Max"} được chèn vào coll. Khi bạn phát lại oplog, nó sẽ phát lại thao tác này dưới dạng upsert với ID duy nhất. Nếu tài liệu tồn tại => không làm gì. Nếu không, nó được tạo ở trạng thái đó

Một vi dụ khac. Giả sử bạn muốn tăng $inc lên 1 tuổi (ngày sinh của ai đó trong bộ sưu tập người của bạn)
Kết quả trong oplog là. trong bộ sưu tập persons, SET tuổi của tài liệu với _id= ObjectId(xx) đến 10

Khi bạn thực hiện truy vấn cập nhật đó, tuổi là 9 => $inc +1 đến 10. Chỉ kết quả của truy vấn được lưu trữ trong oplog. Không phải bản thân truy vấn. Nếu bạn phát lại oplog. Lệnh là THIẾT LẬP TUỔI 10. Không $inc tuổi bằng 1

Bạn có thể chơi lại 10 lần => Tuổi vẫn là 10. Nếu oplog đang lưu truy vấn $inc, nó sẽ là 19. cái nào sẽ không hoạt động

Làm cách nào để lên lịch sao lưu MongoDB?

Tự động sao lưu MongoDB .
Tạo một thư mục nơi bạn sẽ lưu trữ các bản sao lưu của mình. mkdir -p ~/mongo/sao lưu
Lên lịch sao lưu thường xuyên để chạy vào mỗi nửa đêm (hoặc vào một thời điểm khác nếu bạn muốn) bằng cách sử dụng cronjob với. mongodump. . 0 0 * * * mongodump --gzip --archive=~/mongo/backups/backup. gz

Bạn sẽ thiết lập bộ bản sao MongoDB như thế nào?

Đối với mỗi thành viên, hãy bắt đầu phiên bản mongod với các cài đặt sau. .
Đặt bản sao. tùy chọn replSetName thành tên bộ bản sao. .
đặt lưới. tùy chọn bindIp cho tên máy chủ/ip hoặc danh sách tên máy chủ/ip được phân tách bằng dấu phẩy
Đặt bất kỳ cài đặt nào khác phù hợp với việc triển khai của bạn

Mục đích của việc sử dụng bộ bản sao trong MongoDB là gì?

Bộ bản sao trong MongoDB là một nhóm các quy trình mongod duy trì cùng một bộ dữ liệu. Bộ bản sao cung cấp khả năng dự phòng và tính sẵn sàng cao, đồng thời là cơ sở cho tất cả các triển khai sản xuất .

Làm cách nào để lấy bản sao lưu từ MongoDB?

Để tạo bản sao lưu cơ sở dữ liệu trong MongoDB, bạn nên dùng lệnh mongodump . Lệnh này sẽ kết xuất toàn bộ dữ liệu của máy chủ của bạn vào thư mục kết xuất. Có nhiều tùy chọn có sẵn để bạn có thể giới hạn lượng dữ liệu hoặc tạo bản sao lưu cho máy chủ từ xa của mình.