Replica set trong mongodb

Sao chép cung cấp khả năng dự phòng và tăng tính khả dụng của dữ liệu. Với nhiều bản sao dữ liệu trên các máy chủ cơ sở dữ liệu khác nhau, sao chép cung cấp mức độ chịu lỗi đối với việc mất một máy chủ cơ sở dữ liệu

Trong một số trường hợp, sao chép có thể tăng khả năng đọc vì máy khách có thể gửi các thao tác đọc đến các máy chủ khác nhau. Duy trì các bản sao dữ liệu trong các trung tâm dữ liệu khác nhau có thể tăng vị trí dữ liệu và tính khả dụng cho các ứng dụng phân tán. Bạn cũng có thể duy trì các bản sao bổ sung cho các mục đích chuyên dụng, chẳng hạn như khắc phục thảm họa, báo cáo hoặc sao lưu

Sao chép trong MongoDB

Bộ bản sao là một nhóm gồm 11 phiên bản duy trì cùng một bộ dữ liệu. Một bộ bản sao chứa một số nút mang dữ liệu và tùy chọn một nút trọng tài. Trong số các nút mang dữ liệu, một và chỉ một thành viên được coi là nút chính, trong khi các nút khác được coi là nút phụ

Nút chính nhận tất cả các thao tác ghi. Một bộ bản sao chỉ có thể có một bản chính có khả năng xác nhận ghi với ____12 mối quan tâm ghi; . [1] Sơ cấp ghi lại tất cả các thay đổi đối với bộ dữ liệu của nó trong nhật ký vận hành, tôi. e. xin lỗi. Để biết thêm thông tin về hoạt động của nút chính, hãy xem Bản sao đặt chính

Replica set trong mongodb

Phần phụ sao chép oplog của phần chính và áp dụng các thao tác cho tập dữ liệu của chúng sao cho tập dữ liệu của phần phụ phản ánh tập dữ liệu của phần chính. Nếu bầu cử sơ bộ không khả dụng, thì bầu cử phụ đủ điều kiện sẽ tổ chức một cuộc bầu cử để bầu cho mình bầu cử sơ bộ mới. Để biết thêm thông tin về các thành viên phụ, xem Bộ bản sao Thành viên phụ

Replica set trong mongodb

Trong một số trường hợp (chẳng hạn như bạn có một phiên bản chính và một phiên bản phụ nhưng hạn chế về chi phí không cho phép thêm một phiên bản phụ khác), bạn có thể chọn thêm phiên bản

db.serverStatus( { mirroredReads: 1 } )
1 vào bộ bản sao làm trọng tài. Một trọng tài tham gia vào các cuộc bầu cử nhưng không nắm giữ dữ liệu (i. e. không cung cấp dự phòng dữ liệu). Để biết thêm thông tin về người phân xử, xem Bản sao Set Arbiter

Replica set trong mongodb

Trọng tài sẽ luôn là trọng tài trong khi trọng tài chính có thể từ chức và trở thành trọng tài phụ và trọng tài phụ có thể trở thành trọng tài chính trong cuộc bầu cử

Sao chép không đồng bộ

Phần phụ sao chép oplog của phần chính và áp dụng các hoạt động cho tập dữ liệu của chúng một cách không đồng bộ. Bằng cách để bộ dữ liệu của bộ phụ phản ánh bộ dữ liệu của bộ chính, bộ bản sao có thể tiếp tục hoạt động bất chấp sự cố của một hoặc nhiều thành viên

Để biết thêm thông tin về cơ chế sao chép, hãy xem Oplog của Bộ bản sao và Đồng bộ hóa dữ liệu của Bộ bản sao

Hoạt động chậm

Bắt đầu từ phiên bản 4. 2 (cũng có sẵn bắt đầu từ 4. 0. 6), các thành viên phụ của bộ bản sao hiện ghi nhật ký các mục oplog mất nhiều thời gian hơn ngưỡng hoạt động chậm để áp dụng. Những tin nhắn oplog chậm này

  • Được đăng nhập cho các phần thứ hai trong

    db.serverStatus( { mirroredReads: 1 } )
    4

  • Được đăng nhập dưới thành phần

    db.serverStatus( { mirroredReads: 1 } )
    5 với văn bản
    db.serverStatus( { mirroredReads: 1 } )
    6

  • Không phụ thuộc vào cấp độ nhật ký (ở cấp độ hệ thống hoặc thành phần)

  • Không phụ thuộc vào mức độ hồ sơ

  • Có thể bị ảnh hưởng bởi

    db.serverStatus( { mirroredReads: 1 } )
    7, tùy thuộc vào phiên bản MongoDB của bạn

    • Trong MongoDB 4. 2 trở về trước, các mục oplog chậm này không bị ảnh hưởng bởi

      db.serverStatus( { mirroredReads: 1 } )
      7. MongoDB ghi nhật ký tất cả các mục oplog chậm bất kể tốc độ mẫu

    • Trong MongoDB 4. 4 trở lên, các mục oplog chậm này bị ảnh hưởng bởi

      db.serverStatus( { mirroredReads: 1 } )
      7

Trình hồ sơ không ghi lại các mục oplog chậm

Độ trễ sao chép và kiểm soát luồng

Độ trễ sao chép đề cập đến lượng thời gian cần thiết để sao chép (i. e. sao chép) thao tác ghi trên sơ cấp sang thứ cấp. Một số khoảng thời gian trễ nhỏ có thể được chấp nhận, nhưng các vấn đề nghiêm trọng sẽ xuất hiện khi độ trễ sao chép tăng lên, bao gồm cả việc tạo áp lực bộ đệm trên bộ đệm chính.

Bắt đầu từ MongoDB 4. 2, quản trị viên có thể giới hạn tốc độ áp dụng ghi chính của nó với mục tiêu giữ độ trễ của

db.serverStatus( { mirroredReads: 1 } )
2 dưới một giá trị tối đa có thể định cấu hình
db.serverStatus( { mirroredReads: 1 } )
3

Theo mặc định, điều khiển luồng là

db.serverStatus( { mirroredReads: 1 } )
4

Ghi chú

Để kiểm soát luồng tham gia, cụm bản sao được thiết lập/phân đoạn phải có. FeatureCompatibilityVersion (FCV) của

db.serverStatus( { mirroredReads: 1 } )
5 và đọc mối quan tâm
db.serverStatus( { mirroredReads: 1 } )
6. Nghĩa là, điều khiển luồng đã bật sẽ không có tác dụng nếu FCV không phải là
db.serverStatus( { mirroredReads: 1 } )
5 hoặc nếu phần lớn mối quan tâm đã đọc bị tắt

Với kiểm soát luồng được bật, khi độ trễ tăng lên gần với

db.serverStatus( { mirroredReads: 1 } )
3, ghi trên chính phải lấy vé trước khi sử dụng khóa để áp dụng ghi. Bằng cách giới hạn số lượng vé được phát hành mỗi giây, cơ chế kiểm soát luồng cố gắng giữ độ trễ dưới mục tiêu

Để biết thêm thông tin, hãy xem Kiểm tra độ trễ sao chép và kiểm soát luồng

Chuyển đổi dự phòng tự động

Khi một thành viên chính không giao tiếp với các thành viên khác của nhóm trong khoảng thời gian hơn

db.serverStatus( { mirroredReads: 1 } )
9 đã định cấu hình (10 giây theo mặc định), một thành viên phụ đủ điều kiện sẽ yêu cầu một cuộc bầu cử để tự đề cử mình làm thành viên chính mới. Cụm cố gắng hoàn thành bầu cử sơ bộ mới và tiếp tục hoạt động bình thường

Replica set trong mongodb

Bộ bản sao không thể xử lý các thao tác ghi cho đến khi cuộc bầu cử hoàn tất thành công. Bộ bản sao có thể tiếp tục phân phát các truy vấn đã đọc nếu các truy vấn đó được định cấu hình để chạy trên các truy vấn phụ trong khi truy vấn chính đang ngoại tuyến

Thời gian trung bình trước khi một cụm bầu chọn chính mới thường không được vượt quá 12 giây, giả sử mặc định là

db.serverStatus( { mirroredReads: 1 } )
10. Điều này bao gồm thời gian cần thiết để đánh dấu chính là

không khả dụng và gọi và hoàn tất cuộc bầu cử. Bạn có thể điều chỉnh khoảng thời gian này bằng cách sửa đổi tùy chọn cấu hình sao chép
db.serverStatus( { mirroredReads: 1 } )
11. Các yếu tố như độ trễ mạng có thể kéo dài thời gian cần thiết để hoàn tất các cuộc bầu cử bộ bản sao, do đó ảnh hưởng đến lượng thời gian mà cụm của bạn có thể hoạt động mà không có cuộc bầu chọn chính. Các yếu tố này phụ thuộc vào kiến ​​trúc cụm cụ thể của bạn.

Hạ thấp tùy chọn cấu hình sao chép

db.serverStatus( { mirroredReads: 1 } )
9 từ
db.serverStatus( { mirroredReads: 1 } )
13 mặc định (10 giây) có thể giúp phát hiện lỗi chính nhanh hơn. Tuy nhiên, cụm có thể gọi các cuộc bầu cử thường xuyên hơn do các yếu tố như độ trễ mạng tạm thời ngay cả khi cụm chính hoạt động bình thường. Điều này có thể dẫn đến tăng số lần khôi phục cho w. 1 thao tác ghi

Logic kết nối ứng dụng của bạn phải bao gồm dung sai đối với chuyển đổi dự phòng tự động và các cuộc bầu cử tiếp theo. Trình điều khiển MongoDB có thể phát hiện việc mất tệp chính và tự động thử lại một số thao tác ghi nhất định một lần, cung cấp khả năng xử lý tích hợp bổ sung cho các cuộc bầu cử và chuyển đổi dự phòng tự động

Thay đổi trong phiên bản 4. 2

Bắt đầu từ MongoDB 4. 2, trình điều khiển tương thích cho phép ghi có thể thử lại theo mặc định

Bắt đầu từ phiên bản 4. 4, MongoDB cung cấp các lần đọc được nhân đôi để làm ấm trước bộ đệm của các thành viên phụ có thể bầu chọn với dữ liệu được truy cập gần đây nhất. Làm ấm trước bộ đệm của bộ đệm thứ cấp có thể giúp khôi phục hiệu suất nhanh hơn sau một cuộc bầu cử.

Để tìm hiểu thêm về quy trình chuyển đổi dự phòng của MongoDB, hãy xem

  • Cuộc bầu cử bộ bản sao

  • Ghi có thể thử lại

  • Rollbacks trong quá trình chuyển đổi dự phòng đặt bản sao

Đọc hoạt động

đọc tùy chọn

Theo mặc định, khách hàng đọc từ [1] chính;

Replica set trong mongodb

Sao chép không đồng bộ sang phần phụ có nghĩa là các lần đọc từ phần phụ có thể trả về dữ liệu không phản ánh trạng thái của dữ liệu trên phần chính.

Các giao dịch nhiều tài liệu chứa thao tác đọc phải sử dụng tùy chọn đọc

db.serverStatus( { mirroredReads: 1 } )
14. Tất cả các hoạt động trong một giao dịch nhất định phải định tuyến đến cùng một thành viên

Để biết thông tin về cách đọc từ các bộ bản sao, hãy xem Tùy chọn đọc

Hiển thị dữ liệu

Tùy thuộc vào mối quan tâm đọc, khách hàng có thể xem kết quả ghi trước khi ghi lâu bền

  • Bất kể mối quan tâm ghi của một lần ghi, các khách hàng khác sử dụng mối quan tâm đọc

    db.serverStatus( { mirroredReads: 1 } )
    15 hoặc
    db.serverStatus( { mirroredReads: 1 } )
    16 có thể thấy kết quả của thao tác ghi trước khi thao tác ghi được xác nhận cho khách hàng phát hành

  • Khách hàng sử dụng mối quan tâm đọc

    db.serverStatus( { mirroredReads: 1 } )
    15 hoặc
    db.serverStatus( { mirroredReads: 1 } )
    16 có thể đọc dữ liệu mà sau đó có thể được khôi phục trong quá trình chuyển đổi dự phòng thiết lập bản sao

Đối với các hoạt động trong giao dịch nhiều tài liệu, khi giao dịch được thực hiện, tất cả các thay đổi dữ liệu được thực hiện trong giao dịch được lưu và hiển thị bên ngoài giao dịch. Nghĩa là, một giao dịch sẽ không thực hiện một số thay đổi của nó trong khi khôi phục các thay đổi khác

Cho đến khi giao dịch được thực hiện, các thay đổi dữ liệu được thực hiện trong giao dịch sẽ không hiển thị bên ngoài giao dịch

Tuy nhiên, khi một giao dịch ghi vào nhiều phân đoạn, không phải tất cả các hoạt động đọc bên ngoài đều cần đợi kết quả của giao dịch đã cam kết hiển thị trên các phân đoạn. Ví dụ: nếu một giao dịch được thực hiện và ghi 1 hiển thị trên phân đoạn A nhưng ghi 2 chưa hiển thị trên phân đoạn B, thì việc đọc bên ngoài tại mối quan tâm đã đọc

db.serverStatus( { mirroredReads: 1 } )
15 có thể đọc kết quả của ghi 1 mà không thấy ghi 2

Để biết thêm thông tin về cách ly đọc, tính nhất quán và lần truy cập gần đây cho MongoDB, hãy xem Cách ly đọc, tính nhất quán và lần truy cập gần đây

Đọc nhân đôi

Các lần đọc được nhân đôi làm giảm tác động của các cuộc bầu cử sơ bộ sau khi ngừng hoạt động hoặc bảo trì theo kế hoạch. Sau khi chuyển đổi dự phòng trong một bộ bản sao, phần phụ đảm nhận vai trò chính mới sẽ cập nhật bộ đệm của nó khi có truy vấn mới. Trong khi bộ đệm đang khởi động, hiệu suất có thể bị ảnh hưởng

Bắt đầu từ phiên bản 4. 4, các lần đọc được nhân đôi làm ấm trước bộ đệm của các thành viên bộ bản sao thứ cấp của

db.serverStatus( { mirroredReads: 1 } )
10. Để làm ấm trước bộ nhớ đệm của các tùy chọn thứ cấp có thể chọn, bộ nhớ chính phản chiếu một mẫu các hoạt động được hỗ trợ mà nó nhận được cho các tùy chọn thứ cấp có thể chọn.

Kích thước của tập hợp con gồm các thành viên của bộ bản sao thứ cấp

db.serverStatus( { mirroredReads: 1 } )
10 nhận được các lần đọc được nhân đôi có thể được định cấu hình bằng tham số
db.serverStatus( { mirroredReads: 1 } )
12. Xem Bật/Tắt hỗ trợ đọc phản chiếu để biết thêm chi tiết.

Ghi chú

Các lần đọc được nhân đôi không ảnh hưởng đến phản hồi của chính đối với khách hàng. Các lần đọc rằng các bản sao chính đối với các bản sao phụ là các hoạt động "cháy và quên". Chính không chờ phản hồi

Hoạt động được hỗ trợ

Đọc phản chiếu hỗ trợ các thao tác sau

  • db.serverStatus( { mirroredReads: 1 } )
    13

  • db.serverStatus( { mirroredReads: 1 } )
    14

  • db.serverStatus( { mirroredReads: 1 } )
    15

  • db.serverStatus( { mirroredReads: 1 } )
    16 (Cụ thể, bộ lọc được gửi dưới dạng đọc phản chiếu)

  • db.serverStatus( { mirroredReads: 1 } )
    17 (Cụ thể, bộ lọc được gửi dưới dạng đọc phản chiếu)

Kích hoạt/Vô hiệu hóa hỗ trợ cho Mirrored Reads

Bắt đầu từ MongoDB 4. 4, các lần đọc phản chiếu được bật theo mặc định và sử dụng

db.serverStatus( { mirroredReads: 1 } )
18 mặc định của
db.serverStatus( { mirroredReads: 1 } )
19. Để vô hiệu hóa các lần đọc được nhân đôi, hãy đặt tham số
db.serverStatus( { mirroredReads: 1 } )
12 thành
db.serverStatus( { mirroredReads: 1 } )
21

db.adminCommand( {  setParameter: 1,  mirrorReads: { samplingRate: 0.0 }} )

Với tốc độ lấy mẫu lớn hơn

db.serverStatus( { mirroredReads: 1 } )
22, máy nhân bản chính được hỗ trợ đọc một tập hợp con của
db.serverStatus( { mirroredReads: 1 } )
10 máy chủ phụ. Với tốc độ lấy mẫu là
db.serverStatus( { mirroredReads: 1 } )
19, phần chính phản ánh một phần trăm số lần đọc được hỗ trợ mà nó nhận được cho mỗi phần phụ có thể chọn.

Hãy xem xét một bộ bản sao bao gồm một bộ chính và hai bộ phụ có thể lựa chọn. Nếu phần chính nhận được ____125 hoạt động có thể được nhân đôi và tốc độ lấy mẫu là ____119, phần chính sẽ gửi khoảng ____127 lượt đọc cho phần phụ có thể lựa chọn. Mỗi phụ có thể chọn chỉ nhận được một phần nhỏ trong số 10 lần đọc. Mỗi lần đọc được nhân đôi, được gửi đến một lựa chọn không trống được chọn ngẫu nhiên của các thứ cấp có thể bầu chọn

Thay đổi tốc độ lấy mẫu cho các lần đọc được nhân đôi

Để thay đổi tốc độ lấy mẫu cho các lần đọc được nhân đôi, hãy đặt tham số

db.serverStatus( { mirroredReads: 1 } )
12 thành một số trong khoảng từ
db.serverStatus( { mirroredReads: 1 } )
22 đến
db.serverStatus( { mirroredReads: 1 } )
10

  • Tốc độ lấy mẫu của

    db.serverStatus( { mirroredReads: 1 } )
    22 vô hiệu hóa các lần đọc được nhân đôi

  • Tốc độ lấy mẫu của một số trong khoảng từ

    db.serverStatus( { mirroredReads: 1 } )
    22 đến
    db.serverStatus( { mirroredReads: 1 } )
    10 dẫn đến chuyển tiếp chính một mẫu ngẫu nhiên của số lần đọc được hỗ trợ ở tốc độ mẫu đã chỉ định .

  • Tốc độ lấy mẫu là

    db.serverStatus( { mirroredReads: 1 } )
    10 dẫn đến chuyển tiếp chính tất cả các lần đọc được hỗ trợ đến các phụ có thể chọn.

Để biết chi tiết, xem

db.serverStatus( { mirroredReads: 1 } )
12

Số lần đọc được nhân đôi

Bắt đầu từ MongoDB 4. 4, lệnh

db.serverStatus( { mirroredReads: 1 } )
16 và phương thức shell
db.serverStatus( { mirroredReads: 1 } )
17 trả về số liệu
db.serverStatus( { mirroredReads: 1 } )
18 nếu bạn chỉ định trường trong thao tác

db.serverStatus( { mirroredReads: 1 } )

giao dịch

Bắt đầu từ MongoDB 4. 0, các giao dịch nhiều tài liệu có sẵn cho các bộ bản sao

Các giao dịch nhiều tài liệu chứa thao tác đọc phải sử dụng tùy chọn đọc

db.serverStatus( { mirroredReads: 1 } )
14. Tất cả các hoạt động trong một giao dịch nhất định phải định tuyến đến cùng một thành viên

Cho đến khi giao dịch được thực hiện, các thay đổi dữ liệu được thực hiện trong giao dịch sẽ không hiển thị bên ngoài giao dịch

Tuy nhiên, khi một giao dịch ghi vào nhiều phân đoạn, không phải tất cả các hoạt động đọc bên ngoài đều cần đợi kết quả của giao dịch đã cam kết hiển thị trên các phân đoạn. Ví dụ: nếu một giao dịch được thực hiện và ghi 1 hiển thị trên phân đoạn A nhưng ghi 2 chưa hiển thị trên phân đoạn B, thì việc đọc bên ngoài tại mối quan tâm đã đọc

db.serverStatus( { mirroredReads: 1 } )
15 có thể đọc kết quả của ghi 1 mà không thấy ghi 2

Thay đổi luồng

Bắt đầu từ MongoDB 3. 6, các luồng thay đổi có sẵn cho các bộ bản sao và cụm phân đoạn. Các luồng thay đổi cho phép các ứng dụng truy cập các thay đổi dữ liệu theo thời gian thực mà không gặp phải sự phức tạp và rủi ro khi theo dõi oplog. Các ứng dụng có thể sử dụng các luồng thay đổi để đăng ký tất cả các thay đổi dữ liệu trên một hoặc nhiều bộ sưu tập

Tính năng bổ sung

Bộ bản sao cung cấp một số tùy chọn để hỗ trợ nhu cầu ứng dụng. Ví dụ: bạn có thể triển khai một bộ bản sao với các thành viên trong nhiều trung tâm dữ liệu hoặc kiểm soát kết quả bầu cử bằng cách điều chỉnh

db.serverStatus( { mirroredReads: 1 } )
41 của một số thành viên. Các bộ bản sao cũng hỗ trợ các thành viên chuyên dụng cho các chức năng báo cáo, khắc phục thảm họa hoặc sao lưu

Xem Thành viên nhóm bản sao ưu tiên 0, Thành viên nhóm bản sao ẩn và Thành viên nhóm bản sao bị trì hoãn để biết thêm thông tin