Xây dựng Sharded Cluster MongoDB

    

    Khả năng mở rộng là một đặc điểm của một hệ thống thể hiện khả năng chịu tải dưới một khối lượng công việc đáng kể. Một hệ thống tốt là hệ thống có khả năng duy trì và tăng cường mức độ hoạt động của nó tùy theo nhu cầu mở rộng.

    MongoDB hỗ trợ mở rộng theo chiều ngang (horizontal scaling) thông qua Sharding, phân phối dữ liệu thông qua nhiều máy chủ và tạo điều kiện cho các hoạt động đọc ghi với các bộ dữ liệu lớn.

    Cùng tìm hiểu xem cài đặt một hệ thống MongoDB có khả năng chịu tải xem như thế nào nhé!

    Nhìn vào hình trên thì có 3 thành phần chính:

  • Shard: Một shard chứa một tập nhỏ các data đã được sharded
  • MongoS: Thực chất đây là một Query Router tương tác giữa ứng dụng và Sharded Cluster
  • Config Servers: Lưu trữ metadata và cấu hình cài đặt cho Cluster

    Bài viết sẽ setup Sharded Cluster bao gồm 2 shard, mỗi shard sẽ gồm 1 Master và 1 Replica, 1 Config Server và 1 Router Server.

    

1. Tạo thư mục chứa data

    Tạo thư mục data

$ mkdir data

    Tạo các thư mục con chứa data trong thư mục data gồm các thư mục cho các MongoD, cổng 27030, 27031, 27032, 27033

$ cd data/
$ mkdir mongod.data.27030 mongod.data.27031 mongod.data.27032 mongod.data.27033

    Tạo thư mục cho MongoC, cổng 27040

$ mkdir mongoc.data.27040

2. Tạo thư mục chứa configs

    Tạo thư mục configs cùng cấp với thư mục data

$ mkdir configs

    Tạo các thư mục con chứa configs trong thư mục configs vừa tạo

$ cd configs/

    2.1 Tạo config cho MongoD

$ touch mongod.conf.27030 mongod.conf.27031 mongod.conf.27032 mongod.conf.27033

    2.2 Tạo config cho MongoC

$ touch mongoc.conf.27040

    2.3 Tạo config cho MongoS

$ touch mongos.conf.27050

3. Setup cụm Replica

3.1 Tạo cụm replica set cho rs0

  • Chạy mongod với port 27030

    Sửa lại nội dung file config mongod.conf.27030

storage:
  dbPath: /your_path/data/mongod.data.27030
sharding:
  clusterRole: shardsvr
replication:
  replSetName: rs0 # Đối với port 27030 với 27031 thì giá trị sẽ là rs0 vì chúng là 1 cụm
net:
  bindIp: 127.0.0.1 # Do đang setup ở local nên host sẽ là 127.0.0.1, nếu triển khai trên nhiều servers cần điền địa chỉ private IP vào
  port: 27030 # Port để chạy MongoD

    Chạy mongod

$ mongod --config /your_path/configs/mongod.conf.27030
  • Chạy mongod với port 27031

    Sửa lại nội dung file config mongod.conf.27031

storage:
  dbPath: /your_path/data/mongod.data.27031
sharding:
  clusterRole: shardsvr
replication:
  replSetName: rs0
net:
  bindIp: 127.0.0.1
  port: 27031

    Chạy mongod

$ mongod --config /your_path/configs/mongod.conf.27031

    Kết nối vào MongoD port 27030 (chỉ định làm master)

$ mongo --port 27030 
rs.initiate({ _id: "rs0", members: [ { _id: 0, host: "localhost:27030" }]})
rs.add("localhost:27031") # Thêm MongoD port 27031 vào cùng một cụm rs0

    

    

3.2 Tạo cụm replica set cho rs1

  • Chạy mongod với port 27032

    Sửa lại nội dung file config mongod.conf.27032

storage:
  dbPath: /your_path/data/mongod.data.27032
sharding:
  clusterRole: shardsvr
replication:
  replSetName: rs1
net:
  bindIp: 127.0.0.1
  port: 27032

    Chạy mongod

$ mongod --config /your_path/configs/mongod.conf.27032
  • Chạy mongod với port 27033

    Sửa lại nội dung file config mongod.conf.27033

storage:
  dbPath: /your_path/data/mongod.data.27033
sharding:
  clusterRole: shardsvr
replication:
  replSetName: rs1
net:
  bindIp: 127.0.0.1
  port: 27033

    Chạy mongod

$ mongod --config /your_path/configs/mongod.conf.27033

    Kết nối vào MongoD port 27032 (chỉ định làm master)

$ mongo --port 27032 
rs.initiate({ _id: "rs1", members: [ { _id: 0, host: "localhost:27032" }]})
rs.add("localhost:27033") # Thêm MongoD port 27033 vào cùng một cụm rs1

4. Setup MongoC

    Sửa file mongoc.conf.27040 đã tạo với nội dung như sau:

storage:
  dbPath: /your_path/data/mongoc.data.27040
sharding:
  clusterRole: configsvr
replication:
  replSetName: configsvr
net:
  bindIp: 127.0.0.1
  port: 27040

    Để chạy MongoC dùng lệnh sau

$ mongod --config /your_path/configs/mongoc.conf.27040

    Kết nối vào MongoC port 27040

$ mongo --port 27040 
rs.initiate({ _id: "configsvr", configsvr: true, members: [ { _id: 0, host: "localhost:27040" }]})

    

5. Setup MongoS

    Sửa file mongos.conf.27050 đã tạo với nội dung như sau:

sharding:
  configDB: configsvr/localhost:27040
net:
  bindIp: 127.0.0.1 # Do đang setup ở local nên host sẽ là 127.0.0.1, nếu triển khai trên nhiều servers cần điền địa chỉ private IP vào
  port: 27050

    Để chạy MongoS dùng lệnh sau

$ mongos --config /your_path/configs/mongos.conf.27050

    Connect đến MongoS và add các shards rs0 rs1 đã cài đặt ở trên

$ mongo --port 27050
rs.addShard("rs0/localhost:27030")
rs.addShard("rs1/localhost:27032")

    

    

6. Shard Database

    Tiếp theo chúng ta enable cho database cần phải shard

sh.enableSharding("demo-sharding")

    

    Add shard cho collection

    

    Đến đây là kết thúc cài đặt Sharded Cluster MongoDB, để kiểm tra, chạy 2 lệnh sau sẽ ra các thông tin về tất cả các shards

use demo-sharding
db.stats()
db.printShardingStatus()

    Cảm ơn các bạn đã theo dõi bài viết!

Tài liệu tham khảo

  1. https://docs.mongodb.com/manual/tutorial/deploy-shard-cluster/
  2. https://www.linode.com/docs/guides/build-database-clusters-with-mongodb/

Nguồn: Viblo

Bình luận
Vui lòng đăng nhập để bình luận
Một số bài viết liên quan