- MongoDB là gì? Các khái niệm trong MongoDB
- Hướng dẫn cài đặt, cấu hình MongoDB trên Windows 10
- Cài đặt và sử dụng Robo 3T (RoboMongo) trên Windows
- Hướng dẫn cài đặt MongoDB trên Linux (Ubuntu 16.04)
- Hướng dẫn MongoDB – Tạo database trong MongoDB
- Hướng dẫn MongoDB – Xóa, DROP database trong MongoDB
- Tạo bảng, collections trong MongoDB (Tạo bằng dòng lệnh, Robo3t)
- Xóa bảng, collections trong MongoDB (Xóa bằng lệnh/ Robo3T)
- Insert document, bản ghi trong MongoDB (Insert bằng lệnh, Robo3T)
- Truy vấn dữ liệu/document, find(), Select, Where trong MongoDB
- Xóa document, row trong MongoDB (bằng dòng lệnh, Robo3T)
- Update document, dữ liệu trong MongoDB
- Projection trong MongoDB (SELECT field/column trong MongoDB)
- Sắp xếp trong MongoDB(orderBy, sorting() trong MongoDB)
- Ưu nhược điểm của MongoDB, khi nào nên dùng MongoDB
- Xóa cột, field, trường của collections trong MongoDB ($unset)
- Kiểm tra null, check tồn tại trong MongoDB với $exists
- Đổi tên field trong MongoDB với $rename
- Tạo user/roles, phân quyền người dùng trên MongoDB
- Các loại roles, vai trò, quyền trong MongoDB.
- Đăng nhập mongodb với username và password (database mongo)
- Tạo Replica Set trong MongoDB, Ví dụ Replica Set MongoDB
- Replication, Replica Set trong MongoDB là gì?
- Phân trang trong MongoDB (skip(), limit() paging trong MongoDB)
Tạo Replica Set trong MongoDB, Ví dụ Replica Set MongoDB.
Ở bài trước chúng ta đã tìm hiểu về Replication và ý nghĩa của nó. Trong bài này mình sẽ hướng dẫn cách cài đặt 1 replica set và thêm các node cho nó.
Tạo Replica Set MongoDB
Đảm bảo rằng tất cả các server MongoDB đều cho phép remote access.
(Xem lại: MongoDB Remote Access – truy cập từ xa với MongoDB)
Bước 1: Khởi động các node server MongoDB với tùy chọn replica set: --replSet "REPLICA_SET_INSTANCE_NAME"
Ví dụ:
mongod --replSet "rs0"
Bước 2: thêm các node vào Replica Set
Giả sử bạn có 3 node sau:
Replica Set Member | Hostname |
---|---|
Member 0 | mongodb0.example.net |
Member 1 | mongodb1.example.net |
Member 2 | mongodb2.example.net |
Bây giờ ta cần kết nối tới MongoDB và thêm 3 node trên vào Replica Set:
Truy cập 1 trong 3 node trên bằng lệnh mongo
:
mongo
Dùng lệnh rs.initiate()
để tạo 1 replica set, bạn có thể thêm 1 hoặc nhiều node vào trong lệnh khởi tạo này:
Ví dụ:
rs.initiate( { _id : "rs0", members: [ { _id: 0, host: "mongodb0.example.net:27017" }, { _id: 1, host: "mongodb1.example.net:27017" }, { _id: 2, host: "mongodb2.example.net:27017" } ] })
Sau khi khởi tạo bạn cũng có thể thêm node khác vào replica set bằng lệnh rs.add(HOST_NAME:PORT)
, ví dụ:
rs.add(mongodb3.example.net:27017)
(Trường hợp bạn chỉ cần sử dụng chức năng oplog, ví dụ cần chức năng oplog để đồng bộ dữ liệu MongoDB với Elasticsearch bằng monstache thì chỉ cần thêm 1 node là local server là được không nhất thiết phải thêm nhiều node khác vào replica set)
Bước 3: Xem trạng thái replica set
Sau khi tạo Replica Set và thêm các node vào, bạn có thể kiểm tra lại trạng thái replica set bằng lệnh rs.conf()
Ví dụ:
rs.conf()
Kết quả:
{ "_id" : "rs0", "version" : 1, "protocolVersion" : NumberLong(1), "members" : [ { "_id" : 0, "host" : "mongodb0.example.net:27017", "arbiterOnly" : false, "buildIndexes" : true, "hidden" : false, "priority" : 1, "tags" : { }, "slaveDelay" : NumberLong(0), "votes" : 1 }, { "_id" : 1, "host" : "mongodb1.example.net:27017", "arbiterOnly" : false, "buildIndexes" : true, "hidden" : false, "priority" : 1, "tags" : { }, "slaveDelay" : NumberLong(0), "votes" : 1 }, { "_id" : 2, "host" : "mongodb2.example.net:27017", "arbiterOnly" : false, "buildIndexes" : true, "hidden" : false, "priority" : 1, "tags" : { }, "slaveDelay" : NumberLong(0), "votes" : 1 } ], "settings" : { "chainingAllowed" : true, "heartbeatIntervalMillis" : 2000, "heartbeatTimeoutSecs" : 10, "electionTimeoutMillis" : 10000, "catchUpTimeoutMillis" : -1, "getLastErrorModes" : { }, "getLastErrorDefaults" : { "w" : 1, "wtimeout" : 0 }, "replicaSetId" : ObjectId("585ab9df685f726db2c6a840") } }
Bước 5: kiểm tra primary node
Kết quả của lệnh rs.conf()
sẽ cho biết thông tin số lượng các node, độ ưu tiên, có phải là là arbiter node không…
Để kiểm tra lại primary node ta dùng lệnh rs.status()
... "members" : [ { "_id" : 0, "name" : "mongodb2.example.net:27017", "health" : 1, "state" : 1, "stateStr" : "PRIMARY", "uptime" : 2497, "optime" : { "ts" : Timestamp(1535647924, 1), "t" : NumberLong(6) }, "optimeDate" : ISODate("2018-08-30T16:52:04Z"), "syncingTo" : "", "syncSourceHost" : "", "syncSourceId" : -1, "infoMessage" : "", "electionTime" : Timestamp(1535645442, 1), "electionDate" : ISODate("2018-08-30T16:10:42Z"), "configVersion" : 1, "self" : true, "lastHeartbeatMessage" : "" } ], ...
Oplog
Sau khi thêm các node vào replica set thì trong database local của primary node sẽ có thêm collection oplog để lưu các thay đổi
Bạn thử thêm/sửa/xóa 1 document trên primary node thì sẽ thấy có data tương ứng được thêm vào oplog và dữ liệu được cập nhật sang các node còn lại.
Okay, Done!
References:
https://docs.mongodb.com/manual/tutorial/deploy-replica-set/