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 Show
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 đơn1 Lấy các tệp Cơ sở dữ liệu MongoDB sao lưuCá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ệuBắ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 sao chép mongod --dbpath /data/db --replSet <replName> 3 Kết nối Shell với phiên bản mongodVí dụ: để kết nối với một máy chủ đang chạy trên cổng mặc định của mongo3, chỉ cần ra lệnh sao chép mongo 4 Bắt đầu bộ bản sao mớiSử 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 saoMongoDB 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
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ảnSử 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ụcSử 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ục4 Thêm phần phụ vào bộ bản saoTrong 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 đầuSử 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ống2 Thêm từng thành viên tiềm năng vào bộ bản saoKhi 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ẽ 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 Bhuvanesh_R
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. 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, 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 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) 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. |