Là một dạng NoSQL database với khả năng lưu trữ và xử lý dữ liệu lớn – MongoDB đang được giảng dạy trong chương trình học kỳ 3 khóa học Lập trình Full-stack (ADSE) của FPT Aptech. 

Bài viết này sẽ giới thiệu cho các bạn về Replica Set để hiểu sâu hơn tính ứng dụng của MongoDB. Cùng theo dõi nhé!

Replica Set là gì?

Replica Set trong MongoDB là một nhóm các MongoDB instances lưu trữ cùng một dữ liệu nhằm đảm bảo tính sẵn sàng cao (high availability) và khả năng chịu lỗi (fault tolerance) của hệ thống. Mỗi Replica Set thường bao gồm các thành viên sau:

Primary: Node chính chịu trách nhiệm xử lý tất cả các yêu cầu ghi (write operations). Nó đồng bộ dữ liệu với các thành viên khác trong Replica Set.

Secondary: Các node phụ nhận bản sao dữ liệu từ Primary. Các node này có thể xử lý các yêu cầu đọc (read operations), giúp giảm tải cho Primary.

Arbiter: Một thành viên đặc biệt không lưu trữ dữ liệu nhưng tham gia vào quá trình bầu chọn (election) khi cần thiết, để quyết định node nào sẽ trở thành Primary mới nếu Primary hiện tại gặp sự cố.

Cách thức hoạt động của Replica Set 

Khi một thao tác ghi được thực hiện trên Primary, dữ liệu sẽ được truyền đến các node Secondary dưới dạng các bản ghi nhật ký (oplog). Các node Secondary sau đó sẽ áp dụng các thay đổi này vào cơ sở dữ liệu của mình để đảm bảo rằng tất cả các node đều có cùng một phiên bản dữ liệu.

Arbiter trong Replica Set

Arbiter là một thành viên trong Replica Set có vai trò hỗ trợ quá trình bầu chọn khi cần thiết nhưng không lưu trữ dữ liệu. Điều này giúp Arbiter tiết kiệm tài nguyên hệ thống như CPU, RAM và dung lượng lưu trữ.

Tại sao cần Arbiter?
Arbiter giúp duy trì số lượng thành viên lẻ trong Replica Set, điều này quan trọng trong quá trình bầu chọn một Primary mới. Trong một cấu hình có số lượng node chẵn, Arbiter đảm bảo rằng quá trình bầu chọn không gặp bế tắc (tình huống mà không thể đưa ra quyết định do số phiếu bầu bằng nhau).

Lợi ích:

  • Giảm thiểu tài nguyên cần thiết vì Arbiter không lưu trữ dữ liệu.
  • Đảm bảo quá trình bầu chọn diễn ra suôn sẻ ngay cả khi số lượng thành viên chính thức (Primary và Secondary) là chẵn.

Hạn chế:

  • Vì Arbiter không chứa dữ liệu, nó không giúp tăng cường khả năng sao lưu dữ liệu của hệ thống.

Heartbeat trong Replica Set

Heartbeat là cơ chế dùng để các thành viên trong Replica Set liên tục kiểm tra trạng thái của nhau. Mỗi node trong Replica Set sẽ gửi các thông điệp ping (Heartbeat) định kỳ đến các node khác để đảm bảo rằng tất cả các thành viên đều hoạt động bình thường.

Tần suất gửi Heartbeat: Thông thường, các node gửi Heartbeat đến nhau mỗi 2 giây. Nếu một node không phản hồi trong một khoảng thời gian nhất định (mặc định là 10 giây), các node khác sẽ đánh dấu node đó là không phản hồi (unresponsive).

Vai trò của Heartbeat:

  • Giám sát trạng thái: Heartbeat giúp các node biết được tình trạng hoạt động của các thành viên khác trong Replica Set.
  • Kích hoạt bầu chọn: Nếu Primary không phản hồi với các Heartbeat, các node Secondary sẽ bắt đầu quá trình bầu chọn để chọn ra một Primary mới, đảm bảo tính liên tục của hệ thống.
  • Tự động khôi phục: Khi phát hiện một node gặp sự cố, hệ thống sẽ tự động điều chỉnh cấu hình để duy trì hoạt động bình thường.

Lợi ích của Replica Set

  • Tính sẵn sàng cao: Với khả năng tự động bầu chọn Primary mới khi gặp sự cố, Replica Set đảm bảo hệ thống luôn sẵn sàng phục vụ.
  • Khả năng chịu lỗi: Dữ liệu được sao lưu trên nhiều node, giảm nguy cơ mất mát dữ liệu khi xảy ra lỗi phần cứng hoặc phần mềm.
  • Cân bằng tải: Secondary có thể xử lý các yêu cầu đọc, giảm tải cho Primary và tăng hiệu suất hệ thống.
  • Sao lưu liên tục: Replica Set giúp sao lưu dữ liệu liên tục và tự động, không cần thao tác sao lưu thủ công.

Các tình huống sử dụng Replica Set

Replica Set phù hợp với nhiều ứng dụng đòi hỏi độ tin cậy cao và tính sẵn sàng liên tục, chẳng hạn như:

  • Hệ thống tài chính: Yêu cầu dữ liệu phải luôn được cập nhật và không bị gián đoạn.
  • Thương mại điện tử: Đảm bảo các giao dịch luôn được xử lý nhanh chóng và chính xác, ngay cả khi có sự cố.
  • Ứng dụng đọc phân tán: Các hệ thống có nhu cầu đọc dữ liệu lớn, cần nhiều node để phục vụ các yêu cầu đọc nhanh chóng.

Kết luận

Replica Set trong MongoDB là một giải pháp mạnh mẽ để đảm bảo tính sẵn sàng, khả năng chịu lỗi và cân bằng tải cho hệ thống cơ sở dữ liệu. Với các thành phần như Primary, Secondary, Arbiter và cơ chế Heartbeat, Replica Set không chỉ giúp bảo vệ dữ liệu mà còn đảm bảo rằng hệ thống luôn duy trì hoạt động ổn định và liên tục, ngay cả trong các tình huống gặp sự cố. Đây là một lựa chọn lý tưởng cho các doanh nghiệp cần sự ổn định và hiệu suất cao trong quản lý dữ liệu.

Hướng dẫn cách triển khai và quản lý Replica Set trong MongoDB

Bước 1: Mở file mongod.cfg tại thư mục C:\Program\Files\MongoDB\Server\7.0\bin

Bước 2: Bổ sung đoạn code như sau:

Đoạn code bổ sung để thiết lập replSetName là rất quan trọng. replSetName đại diện cho tên của Replica Set và tất cả các thành viên trong Replica Set phải được cấu hình với cùng một tên để có thể hoạt động đúng với vai trò của chúng.

Bước 3: Mở Task Manager và restart lại server mongodb

Bước 5: Tạo thư mục data chứa 3 folder con nơi MongoDB sẽ lưu trữ dữ liệu

Bước 6: Mở 3 terminal CMD -> Chạy 3 lệnh như sau:

+ Terminal 1

mongod –port 27017 –dbpath “C:\data\db” –replSet rs0 –bind_ip localhost

+ Terminal 2

mongod –port 27018 –dbpath “C:\data\db1” –replSet rs0 –bind_ip localhost

+ Terminal 3

mongod –port 27019 –dbpath “C:\data\db2” –replSet rs0 –bind_ip localhost

Mongod : Đây là lệnh để khởi động một server MongoDB. mongod là daemon chính của MongoDB, xử lý tất cả các hoạt động liên quan đến cơ sở dữ liệu.

 –port 27017, –port 27018, –port 27019: Tham số này chỉ định cổng mà MongoDB sẽ lắng nghe. Mặc định, MongoDB sử dụng cổng 27017,27018,27019 nhưng bạn có thể thay đổi nếu cần.

–dbpath “C:\data\db”, –dbpath “C:\data\db1”, –dbpath “C:\data\db2”: Tham số này chỉ định đường dẫn đến thư mục nơi MongoDB sẽ lưu trữ dữ liệu. Trong trường hợp này, MongoDB sẽ lưu trữ dữ liệu tại C:\data\db, C:\data\db1, C:\data\db2. Đảm bảo rằng thư mục này tồn tại và có quyền ghi đối với MongoDB.

–replSet rs0: Tham số này chỉ định tên của Replica Set mà instance này sẽ tham gia. Trong ví dụ này, tên của Replica Set là rs0. Tất cả các thành viên của Replica Set phải có cùng một tên này để hoạt động chính xác.

 –bind_ip localhost: Tham số này chỉ định địa chỉ IP mà MongoDB sẽ lắng nghe. Khi bạn đặt localhost, MongoDB chỉ có thể truy cập từ máy cục bộ (local machine). Điều này hữu ích khi bạn muốn giới hạn truy cập chỉ từ máy chủ hiện tại.

Bước 6: Kết nối với MongoDB thông qua mongosh và chỉ định cổng cụ thể

mongosh –port 27017

Tiếp theo chạy lệnh rs.status()

Lệnh này trong MongoDB được sử dụng để kiểm tra trạng thái của một Replica Set. Nó cung cấp thông tin chi tiết về cấu hình hiện tại của Replica Set, bao gồm các thành viên, vai trò của từng thành viên (primary, secondary, arbiter), trạng thái kết nối, chỉ số lag, và các thông tin liên quan khác.

Chúng ta dễ dàng nhìn thấy server chạy trên port 27017 đóng vai trò là Primary, các server còn lại sẽ có vai trò là secondary

Hãy tạo một database với tên replicadb và một collection testdb, nơi chúng ta có thể thực hiện các thao tác đọc và ghi dữ liệu trực tiếp trên server Primary.

Tiếp theo chúng ta kết nối server với port 27018

Khi kết nối tới server trên cổng 27018, server này đang đảm nhiệm vai trò là Secondary. Chúng ta có thể truy xuất và đọc dữ liệu đã được đồng bộ từ Primary, nhưng không thể thực hiện các thao tác ghi dữ liệu.

Điều tuyệt vời hơn nữa là khả năng chuyển đổi vai trò Primary giữa các server trong một Replica Set. Hãy thử thực hiện như sau:

  1. Trên server đang chạy ở cổng 27017, bạn chạy lệnh db.shutdownServer() để tắt server này.
  2. Sau đó, chạy lệnh rs.status() để kiểm tra trạng thái hiện tại và vai trò của các server trong Replica Set.

Kết quả sẽ cho thấy rằng vai trò Primary đã được chuyển sang server trên cổng 27018, trong khi server ở cổng 27017 đã trở thành Secondary. Thật thú vị, phải không? Đây chính là sức mạnh của Replica Set trong MongoDB, đảm bảo tính sẵn sàng cao và khả năng tự động chuyển đổi vai trò giữa các thành viên trong hệ thống.

Chúng ta hãy thử kết nối tới server trên cổng 27019.

Đúng như mong đợi, dữ liệu đã được sao chép đầy đủ đến server Secondary đang hoạt động trên cổng 27019. Điều này minh chứng cho khả năng đồng bộ dữ liệu mạnh mẽ của Replica Set trong MongoDB, đảm bảo rằng tất cả các bản sao Secondary đều duy trì được sự nhất quán với Primary.

Để hiểu rõ hơn về Replica Set trong MongoDB, mời các bạn tham khảo video demo mà chúng tôi đã chuẩn bị. Video sẽ cung cấp những ví dụ minh họa cụ thể và hướng dẫn chi tiết cách triển khai và quản lý Replica Set.

 

MongoDB là một trong những công nghệ cốt lõi được giảng dạy trong chương trình học Fullstack tại FPT Aptech. Chương trình này không chỉ cung cấp kiến thức toàn diện về MongoDB mà còn trang bị cho sinh viên những kỹ năng cần thiết để trở thành một lập trình viên Fullstack chuyên nghiệp.

Với sự hướng dẫn từ các chuyên gia giàu kinh nghiệm, sinh viên sẽ có cơ hội tiếp cận với các công nghệ hàng đầu, bao gồm cả việc triển khai và quản lý Replica Set trong MongoDB, giúp họ sẵn sàng cho các dự án thực tế.

Đừng bỏ lỡ cơ hội tham gia chương trình học tại FPT APTECH để nắm vững các kỹ năng lập trình hiện đại và mở ra con đường sự nghiệp trong lĩnh vực công nghệ thông tin đầy tiềm năng.

Lê Tuấn Xuyên / Giảng viên FPT Aptech

FPT Aptech trực thuộc Tổ chức Giáo dục FPT có hơn 25 năm kinh nghiệm đào tạo lập trình viên quốc tế tại Việt Nam, và luôn là sự lựa chọn ưu tiên của các sinh viên và nhà tuyển dụng.
0981578920
icons8-exercise-96