Xin chào mọi người, bài viết hôm nay của chúng ta sẽ tìm hiểu về một khái niệm trong MongoDB là Replica set.


Tất cả các node trong replica set đều nhận được tác vụ đọc (read operation), tuy nhiên, theo mặc định, thì ứng dụng sẽ hướng trực tiếp tác vụ đọc đến primary node luôn.
Vì trong mỗi replica set chỉ có duy nhất một primary node, nên trong trường hợp primary node bị unavailable như chết server, thì việc bầu cử (election) sẽ được thực thi để chọn ra primary node từ các secondary node còn lại.

Secondary node có nhiệm vụ duy trì một bản sao dữ liệu từ primary node. Để nhân bản dữ liệu, secondary sẽ apply các tác vụ từ oplog của primary node vào tập dữ liệu của chính nó thông qua một quá trình bất đồng bộ.

Hình trên là mô tả 1 replica set có 2 secondary node và 2 node này đang thực hiện nhân bản dữ liệu từ primary node.
Chúng ta có thể cấu hình cho secondary node với các mục đích khác nhau như:
Arbiter node không bắt buộc phải có trong 1 replica set, và nếu có mặt nó không có chứa bản sao của dữ liệu và cũng không thể trở thành primary node sau bầu cử. Mục đích chính của arbiter node chính là trong lúc bầu cử tìm ra primary node.
Giả sử trong cuộc bầu cử tìm ra primary node, tỉ số đang là hoà giữa các secondary node. Để tìm ra kết quả ta cần có thêm 1 secondary node để tạo thành số lẻ khi vote. Tuy nhiên việc duy trì secondary node sẽ gây nên tốn chi phí. Vì vậy thay vào đó, ta có thể thêm 1 arbiter node vào. Khi đó arbiter node có 1 vote trong bầu cử nhưng không cần phải là secondary nên sẽ giảm bớt chi phí.

1. Replicat set trong MongoDB là gì?
Mộtreplica set trong MongoDB là một nhóm các mongod process có nhiệm vụ duy trì cùng một tập dữ liệu (data set). Replica set cung cấp 2 đặc tính cơ bản của production deployment, đó là tính dự phòng và độ sẵn sàng cao (Redundancy and High Availability)2. Tính dự phòng và độ sẵn sàng cao của dữ liệu
Tính dự phòng (Redundancy)
Với việc có rất nhiều các bản sao của dữ liệu trên các database server khác nhau,Replica set tạo ra 1 mức độ chịu lỗi (level of fault tolerance) để chống lại việc mất mát dữ liệu nếu chỉ có 1 database server duy nhấtĐộ sẵn sàng cao của dữ liệu
Replica set cho phép tăng cường khả năng đọc dữ liệu khi client gửi các tác vụ đọc đến các server khác nhau. Việc duy trì nhiều bản sao của data tạo ra tính địa phương và tính sẵn có của dữ liệu đối với các ứng dụng phân tán (distributed applications). Dữ liệu sẽ luôn được nhân bản để phòng những trường hợp cụ thể như: khôi phục sau thảm hoả, backup hoặc reporting.3. Kiến trúc và các thành phần của replica set
Replica set chứa rất nhiều node mang dữ liệu (data bearing nodes), trong những node này chỉ có duy nhất 1 node là primary (node sơ cấp), còn lại là secondary nodes (node thứ cấp)Primary node
Primary node nhận tất cả các tác vụ ghi (write operation) và là node duy nhất trong replica set làm được điều này. MongoDB sẽ áp dụng các write operation trên primary node, sau đó ghi lại (record) những tác vụ này trong operation log (oplog) của primary node. Các secondary node sẽ sẽ nhân bản log này và áp dụng các tác vụ lên data set của chúng. Như hình dưới đây ta có thể thấy, primary node nhận tất cả các write operation, rồi các secondary node sẽ nhân bản oplog rồi apply vào tập dữ liệu của chúngTất cả các node trong replica set đều nhận được tác vụ đọc (read operation), tuy nhiên, theo mặc định, thì ứng dụng sẽ hướng trực tiếp tác vụ đọc đến primary node luôn.
Vì trong mỗi replica set chỉ có duy nhất một primary node, nên trong trường hợp primary node bị unavailable như chết server, thì việc bầu cử (election) sẽ được thực thi để chọn ra primary node từ các secondary node còn lại.
Secondary node
Trong một replica set, có thể có 1 hoặc nhiều secondary node.Secondary node có nhiệm vụ duy trì một bản sao dữ liệu từ primary node. Để nhân bản dữ liệu, secondary sẽ apply các tác vụ từ oplog của primary node vào tập dữ liệu của chính nó thông qua một quá trình bất đồng bộ.
Hình trên là mô tả 1 replica set có 2 secondary node và 2 node này đang thực hiện nhân bản dữ liệu từ primary node.
Chúng ta có thể cấu hình cho secondary node với các mục đích khác nhau như:
- Không cho nó trở thành primary node trong khi bầu cử
- Không cho ứng dụng thực hiện tác vụ đọc từ nó
- Lưu trữ
historical snapshotđể nhằm mục đích khôi phục dữ liệu khi có sự cố xảy như vô tinh xoá database.
Arbiter node
Ngoài các node mang dữ liệu kể trên, replica set còn có thể có một node khác là node trọng tài (arbiter node).Arbiter node không bắt buộc phải có trong 1 replica set, và nếu có mặt nó không có chứa bản sao của dữ liệu và cũng không thể trở thành primary node sau bầu cử. Mục đích chính của arbiter node chính là trong lúc bầu cử tìm ra primary node.
Giả sử trong cuộc bầu cử tìm ra primary node, tỉ số đang là hoà giữa các secondary node. Để tìm ra kết quả ta cần có thêm 1 secondary node để tạo thành số lẻ khi vote. Tuy nhiên việc duy trì secondary node sẽ gây nên tốn chi phí. Vì vậy thay vào đó, ta có thể thêm 1 arbiter node vào. Khi đó arbiter node có 1 vote trong bầu cử nhưng không cần phải là secondary nên sẽ giảm bớt chi phí.
Kết
Hi vọng qua bài viết này các bạn đã hiểu thêm được một khái niệm trong MongoDB để có thể áp dụng trong thực tế. Trong các bài viết sau mình sẽ đề cập đến các khái niệm khác như oplog, sharding trong MongoDB.Reference:
Advertisement