Tạo Replica Set trong MongoDB, Ví dụ Replica Set 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

Tạo Replica Set trong MongoDB, Ví dụ Replica Set MongoDB

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/

stackjava.com