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!