Trong MongoDB, Replication là quá trình sao chép và duy trì các bản sao dữ liệu trên nhiều máy chủ (nodes) để đảm bảo tính sẵn sàng và độ tin cậy của hệ thống cơ sở dữ liệu. Replication cho phép tổ chức MongoDB triển khai mô hình khả dụng cao (high availability) và đảm bảo rằng dữ liệu vẫn sẽ có sẵn khi có sự cố xảy ra trên một hoặc nhiều máy chủ.
Trong mô hình Replication, một node MongoDB được xác định là Primary Node (nút chính) và các node khác được gọi là Secondary Nodes (nút phụ). Primary Node là nơi ghi dữ liệu mới nhất và xử lý các yêu cầu ghi từ ứng dụng. Các Secondary Nodes tiếp nhận dữ liệu từ Primary Node và sao chép nó để duy trì các bản sao của cơ sở dữ liệu.
Xem thêm Linked List Allocation trong Hệ điều hành
Khi một Primary Node gặp sự cố hoặc bị tạm ngừng, hệ thống tự động chọn một Secondary Node khác làm Primary Node mới để tiếp tục phục vụ yêu cầu từ ứng dụng. Quá trình này được gọi là quá trình failover và giúp đảm bảo rằng dữ liệu vẫn sẽ được cung cấp và không bị gián đoạn.
Replication trong MongoDB cũng hỗ trợ đọc từ các Secondary Nodes, điều này cho phép phân tải tải và cải thiện hiệu suất của hệ thống bằng cách phân phối yêu cầu đọc dữ liệu trên nhiều node.
Tóm lại, Replication trong MongoDB là quá trình sao chép dữ liệu và duy trì các bản sao trên nhiều node để đảm bảo tính khả dụng, độ tin cậy và hiệu suất của hệ thống cơ sở dữ liệu.
Các Replication Command cơ bản trong MongoDB
Trong MongoDB, có một số Replication Command cơ bản để quản lý quá trình Replication và tương tác với các node trong một Replica Set. Dưới đây là các Replication Command phổ biến trong MongoDB:
- rs.initiate(): Khởi tạo một Replica Set mới. Lệnh này được chạy trên node mongod primary và bắt đầu quá trình Replication.
- rs.add(): Thêm một Secondary Node mới vào Replica Set. Lệnh này được chạy trên node mongod primary và thông qua nó, bạn có thể thêm các Secondary Node để tăng khả năng sao chép và phân phối dữ liệu.
- rs.remove(): Xóa một Secondary Node khỏi Replica Set. Lệnh này được chạy trên node mongod primary và thông qua nó, bạn có thể xóa các Secondary Node không cần thiết khỏi Replica Set.
- rs.stepDown(): Chuyển đổi một Primary Node hiện tại thành một Secondary Node. Lệnh này được chạy trên node mongod primary và dùng để thực hiện quá trình failover hoặc khi bạn muốn chuyển đổi primary node cho bảo trì hoặc nâng cấp.
- rs.status(): Xem trạng thái của Replica Set. Lệnh này được chạy trên bất kỳ node nào trong Replica Set và cung cấp thông tin về các node, trạng thái của chúng và cấu hình hiện tại của Replica Set.
- rs.isMaster(): Kiểm tra xem một node có phải là Primary Node hay không. Lệnh này được chạy trên bất kỳ node nào và trả về thông tin về vai trò của node đó trong Replica Set.
Lưu ý rằng các lệnh Replication Command này được thực thi thông qua giao diện dòng lệnh hoặc giao diện điều khiển của MongoDB, chẳng hạn như mongo shell hoặc các thư viện và công cụ lập trình MongoDB khác.
Cách sử dụng Replication Command trong MongoDB
Để sử dụng các Replication Command trong MongoDB, bạn có thể thực hiện các bước sau:
- Mở mongo shell hoặc kết nối đến MongoDB sử dụng công cụ quản lý cơ sở dữ liệu của bạn.
- Đảm bảo rằng bạn đang làm việc trên node mongod primary trong Replica Set.
- Chạy các Replication Command theo các yêu cầu của bạn. Dưới đây là một số ví dụ về cách sử dụng Replication Command:
- Để khởi tạo một Replica Set mới:
rs.initiate()
- Để thêm một Secondary Node mới vào Replica Set:
rs.add("secondary_node_host:port")
- Để xóa một Secondary Node khỏi Replica Set:
rs.remove("secondary_node_host:port")
- Để chuyển đổi Primary Node hiện tại thành một Secondary Node:
rs.stepDown()
- Để kiểm tra trạng thái của Replica Set:
rs.status()
- Để kiểm tra xem một node có phải là Primary Node hay không:
rs.isMaster()
Lưu ý rằng bạn cần thay thế “secondary_node_host:port” bằng địa chỉ và cổng của Secondary Node trong các lệnh cụ thể. Ngoài ra, cần đảm bảo rằng bạn có đủ quyền truy cập và quyền hạn để chạy các Replication Command trên MongoDB của bạn.
Khi thực hiện các Replication Command, hãy cẩn thận và chắc chắn rằng bạn đã hiểu rõ tác động của từng lệnh và cần thực hiện chúng với cẩn thận để tránh làm hỏng Replica Set hoặc gây mất dữ liệu.
Các lưu ý khi sử dụng Replication Command
Khi sử dụng Replication Command trong MongoDB, dưới đây là một số lưu ý quan trọng:
- Quyền truy cập: Đảm bảo rằng bạn có đủ quyền truy cập và quyền hạn để thực hiện các Replication Command trên MongoDB. Các lệnh này thường yêu cầu quyền admin hoặc quyền đặc biệt để thực thi.
- Quyền riêng tư và bảo mật: Kiểm tra và áp dụng các biện pháp bảo mật phù hợp khi thực hiện các Replication Command. Đảm bảo rằng bạn chỉ chia sẻ thông tin nhạy cảm như tên người dùng, mật khẩu và địa chỉ IP với các thành viên trong nhóm đáng tin cậy.
- Sự cẩn thận với các lệnh xóa và thay đổi: Cẩn thận khi sử dụng các lệnh xóa (như rs.remove()) hoặc thay đổi vai trò của các node (như rs.stepDown()). Đảm bảo rằng bạn đã hiểu rõ tác động của từng lệnh và xác nhận lại trước khi thực hiện.
- Sự cân nhắc khi thêm mới node: Khi thêm một Secondary Node mới vào Replica Set, hãy xác định rõ các yêu cầu phần cứng và mạng cho node mới để đảm bảo rằng hệ thống có đủ tài nguyên để xử lý dữ liệu và sao chép.
- Giám sát và bảo trì: Thực hiện giám sát định kỳ và bảo trì Replica Set để đảm bảo rằng hệ thống Replication vẫn hoạt động ổn định. Kiểm tra các log, thông báo và sự cân bằng tải trên các node để phát hiện và giải quyết sự cố kịp thời.
- Sao lưu dữ liệu: Đảm bảo rằng bạn thực hiện sao lưu dữ liệu định kỳ và kiểm tra tính toàn vẹn của các bản sao dữ liệu. Điều này giúp đảm bảo rằng bạn có một bản sao dữ liệu phục hồi được trong trường hợp có sự cố xảy ra.
- Tài liệu và tìm hiểu: Đọc tài liệu chính thức và tìm hiểu kỹ về các Replication Command và các khái niệm liên quan trong MongoDB. Điều này giúp bạn hiểu rõ hơn về cách sử dụng và tối ưu hóa quá trình Replication trong môi trường của bạn.
Lưu ý rằng cách sử dụng Replication Command cụ thể có thể khác nhau tùy thuộc vào phiên bản MongoDB và cấu hình cụ thể của Replica Set. Do đó, luôn kiểm tra tài liệu và hướng dẫn chính thức của MongoDB để biết thêm thông tin chi tiết và cập nhật mới nhất.
Xem thêm set trong c++
Các phương thức khác trong Replication
Lệnh isMaster trong MongoDB
Vai trò của cá thể mongod được mô tả bởi tài liệu được trả về bởi lệnh isMaster. Để tạo thông tin đăng nhập của một người dùng cụ thể, một loạt các cơ chế SASL đã được sử dụng. Nó được trả về khi saslSupportMechs được chỉ định làm trường tùy chọn. Lệnh isMaster trả về một tập hợp con của tập hợp bản sao nếu cá thể đó là thành viên của tập bản sao.
Các viết liên quan:
Lệnh isMaster trả về thông tin được liên kết khi được gửi đến một cá thể mongod, không phải là thành viên của tập hợp bản sao.
Cú pháp:
db.runCommand ({isMaster: 1})
Lệnh MongoDB replySetAbortPrimaryCatchUp
Lệnh buộc thành viên chính được chỉ định của tập hợp bản sao kết thúc đồng bộ hóa, sau đó hoàn tất quá trình chuyển đổi sang thành viên chính.
Cú pháp:
{replSetAbortPrimaryCatchUp: 1}
Lệnh MongoDB replSetGetConfig
Lệnh trả về một tài liệu chỉ định cấu hình hiện tại của tập hợp bản sao. Để tìm nạp lệnh trực tiếp, chúng ta phải sử dụng thao tác sau:
Cú pháp:
db.runCommand ({replSetGetConfig: 1});
Ví dụ – Chúng tôi có một tài liệu đại diện cho cấu hình tập hợp bản sao. Nó có thể chỉ bao gồm một tập hợp con của các cài đặt sau:
{ _id: <string>, version: <int>, protocolVersion: <number>, writeConcernMajorityJournalDefault: <boolean>, configsvr: <boolean>, members: [ { _id: <int>, host: <string>, arbiterOnly: <boolean>, buildIndexes: <boolean>, hidden: <boolean>, priority: <number>, tags: <document>, slaveDelay: <int>, votes: <number> }, ... ], settings: { chainingAllowed : <boolean>, heartbeatIntervalMillis : <int>, heartbeatTimeoutSecs: <int>, electionTimeoutMillis : <int>, catchUpTimeoutMillis : <int>, getLastErrorModes : <document>, getLastErrorDefaults : <document>, replicaSetId: <ObjectId> } }
Lệnh MongoDB replSetInitiate
Lệnh replSetInitiative được sử dụng để khởi tạo một tập hợp bản sao mới.
Cú pháp:
{replSetInitiate: <config_document>}
Ví dụ để chuyển tài liệu tới trình trợ giúp rs.initiate ():
Lệnh MongoDB replSetGetStatus
Lệnh trả về trạng thái cho tập hợp bản sao. Nó trả về nó từ máy chủ, được sử dụng để xử lý tài liệu. Dữ liệu được trả về bởi lệnh này bắt nguồn từ dữ liệu có trong tín hiệu được gửi đến máy chủ bởi các thành viên khác của tập hợp.
Cú pháp:
db.adminCommand ({replSetGetStatus: 1})
Ví dụ: