STACKJAVA

Replication, Replica Set trong MongoDB là gì?

This entry is part 23 of 24 in the series MongoDB

Replication, Replica Set trong MongoDB là gì?

Replication, Replica Set trong MongoDB là gì?

Replication có nghĩa là nhân bản, trong MongoDB thì replication là  một tiến trình đồng bộ hóa dữ liệu.

Cơ chế của nó như sau:

Trong thực tế, nhiều trường hợp để server hoạt động ổn định người ta dùng nhiều hơn 1 server để lưu dữ liệu. Ví dụ dùng 2 server mongodb là A và B, khi có dữ liệu mới được lưu vào A thì nó sẽ tiến hành sao lưu, đồng bộ sang B (quá trình replica) nếu A bị chết hoặc mất dữ liệu thì ta chuyển sang kết nối tới B để lấy dữ liệu như thế sẽ đảm bảo server luôn hoạt động và dữ liệu tin cậy không bị mất mát.

Quá trình replication này khác với quá trình backup / sao lưu ở chỗ là nó thực hiện realtime. Tức là khi bạn thêm dữ liệu vào A thì nó sẽ lập tức đồng bộ sang B… Trong khi quá trình backup thì thường thực hiện theo lịch (chạy cuối mỗi ngày, chạy hàng giờ…) và có thể phải xây dựng lại chỉ mục / index

(Sử dụng nhiều server có nhiều lợi ích thế nhưng không phải lúc nào cũng áp dụng nhé. Việc sử dụng nhiều server MongoDB kéo theo nhiều vấn đề như cấu hình và code phức tạp hơn, chi phí tăng…)

Replica Set trong MongoDB

Replica Set là một nhóm các server MongoDB trong hệ Replication. (Một nhóm server MongoDB tham gia thực hiện việc nhân bản.)

Mỗi server MongoDB trong Replica Set được coi là 1 node hoặc 1 thể hiện.

Trong một Replica Set, sẽ có một node chính (primary node) và nhiều node phụ (secondary node) + node trọng tài (arbiter node).

Primary node sẽ thực hiện nhận tất cả các write request để thực hiện thêm/sửa/xóa data, các thay đổi trên data này sẽ được ghi lại vào file oplog, khi file oplog thay đổi, nó sẽ dựa vào các thông tin thay đổi đó để đồng bộ dữ liệu sang các secondary node. (arbiter node sẽ không thực hiện ghi dữ liệu)

Cơ chế Automatic Failover trong Replica Set

Các node trong Replica Set luôn duy trì kết nối với nhau (kết nối heartbeat ). Khi primary node bị mất kết nối với các node còn lại (bị shutdown, connection timeout…) thì các node còn lại sẽ tự động sẽ tự động bầu ra 1 node làm primary node.

Quá trình bầu primary node giống như bỏ phiếu vậy, node nào nhiều phiếu hơn thì trở thành primary node. Tuy nhiên sẽ có trường hợp có 2 node cùng số phiếu. Trong trường hợp này node arbiter sẽ quyết định node nào là primary node.

(Arbiter node chỉ có tác dụng ra bầu ra primary node chứ không chứa dữ liệu)

Khi primary node bị ngắt kết nối lúc trước được kết nối trở lại vào Replica Set thì nó sẽ trở thành secondary node.

Mặc định, Client sẽ đọc dữ liệu từ primary node. Tuy nhiên ta có thể cấu hình cho phép client đọc dữ liệu từ các secondary node để giảm tải áp lực cho primary node.

Cài đặt Replication Set trong MongoDB

 

Okay, Done!

 

References:

https://docs.mongodb.com/manual/replication/

Series Navigation<< Tạo Replica Set trong MongoDB, Ví dụ Replica Set MongoDBPhân trang trong MongoDB (skip(), limit() paging trong MongoDB) >>