hocvietcode.com
  • Trang chủ
  • Học lập trình
    • Lập trình C/C++
    • Cấu trúc dữ liệu và giải thuật
    • Lập trình HTML
    • Lập trình Javascript
      • Javascript cơ bản
      • ReactJS framework
      • AngularJS framework
      • Typescript cơ bản
      • Angular
      • NodeJS
    • Lập trình Mobile
      • Lập Trình Dart Cơ Bản
        • Dart Flutter Framework
    • Cơ sở dữ liệu
      • MySQL – MariaDB
      • Micrsoft SQL Server
      • Extensible Markup Language (XML)
      • JSON
      • MongoDB
    • Lập trình PHP
      • Lập trình PHP cơ bản
      • Laravel Framework
    • Lập trình Java
      • Java Cơ bản
    • Lập trình C#
      • Lập Trình C# Cơ Bản
      • ASP.NET Core MVC
    • Machine Learning
    • Git và Github
  • WORDPRESS
    • WordPress cơ bản
    • WordPress nâng cao
    • Chia sẻ WordPress
  • Kiến thức hệ thống
    • Microsoft Azure
    • Docker
    • Linux
  • Chia sẻ IT
    • Tin học văn phòng
      • Microsoft Word
      • Microsoft Excel
    • Marketing
      • Google Adwords
      • Facebook Ads
      • Kiến thức khác
    • Chia sẻ phần mềm
    • Review công nghệ
    • Công cụ – tiện ích
      • Kiểm tra bàn phím online
      • Kiểm tra webcam online
Đăng nhập
  • Đăng nhập / Đăng ký

Please enter key search to display results.

Home
  • Cơ sở dữ liệu
  • MongoDB
Sao chép dữ liệu và phân mảnh trong MongoDB

Sao chép dữ liệu và phân mảnh trong MongoDB

  • 22-06-2026
  • Toanngo92
  • 0 Comments

Mục lục

    • Mục tiêu học tập
  • 8.1 Sao chép dữ liệu
  • 8.1.1 Kiến trúc Replication
  • 8.1.2 Các phương thức Replication
  • 8.1.3 Triển khai Replication bằng kiến trúc P-S-S
      • 8.1.4 Replication Metrics
      • Metrics in MongoDB 8.0
    • 8.2 Sharding
      • 1. Vertical scaling
      • 2. Horizontal scaling
    • 8.2.1 Shard Clusters
      • • Shard Servers
      • • mongos
      • • Configuration Servers
    • 8.2.2 Sharding Strategies
      • • Hash-based Sharding
      • • Range-based Sharding
    • 8.2.3 Sharding Methods
  • 8.2.4 Implementing Sharding
  • Building the Configuration Server Replica Set
      • 1. Tạo các thư mục
      • 2. Tạo primary configuration server
      • 3. Kết nối tới configuration server
      • 4. Cấu hình cs1 làm primary configuration server
      • 5. Cấu hình các secondary configuration server
      • 6. Thêm các secondary server vào replica set
      • 7. Kiểm tra trạng thái configuration servers
    • Figure 8.28: Trạng thái của Configuration Server Replica Set
  • Tạo các Shard Server Shard0 và Shard1
      • 8. Tạo thư mục dữ liệu
      • 9. Tạo thư mục log
      • 10. Tạo Shard0
      • 11. Kết nối tới Shard0
      • 12. Cấu hình Shard0 làm Primary
      • 13. Tạo Shard1
      • 14. Khởi động Routing Server (mongos)
      • 15. Kết nối tới Routing Server
      • 16. Thêm Shard vào Router
      • 17. Kích hoạt Sharding cho Database
      • 18. Kích hoạt Sharding cho Collection
      • 19. Chèn dữ liệu vào Collection
      • 20. Kiểm tra dữ liệu đã được Sharding hay chưa

Mục tiêu học tập

Trong session này, học viên sẽ học:

  • Giải thích replication
  • Mô tả các cách triển khai replication
  • Giải thích sharding
  • Mô tả các cách triển khai sharding

Khi làm việc với các tập dữ liệu lớn, việc đảm bảo tính sẵn sàng cao (high availability) của database là yêu cầu quan trọng nhất đối với bất kỳ công nghệ cơ sở dữ liệu nào.

Để đảm bảo dữ liệu được nhiều client trên toàn cầu truy cập mà không bị downtime, cần duy trì nhiều bản sao dữ liệu.

Replication là quá trình duy trì nhiều bản sao của database và cho phép các bản sao phục vụ client trong trường hợp database gốc không khả dụng.

Ngoài ra, một database phát triển nhanh cũng có thể được xử lý bằng cách phân phối dữ liệu và duy trì dữ liệu trên nhiều server khác nhau. Điều này được gọi là sharding.

Replication giúp duy trì nhiều bản sao dữ liệu trên nhiều server nhằm đảm bảo tính sẵn sàng cao của dữ liệu.

Sharding giúp phân phối dữ liệu trên nhiều server để quản lý lưu lượng truy cập lớn và hỗ trợ truy xuất dữ liệu dễ dàng.

Session này trình bày khái niệm và cách triển khai replication và sharding trong MongoDB.


8.1 Sao chép dữ liệu

Replication là quá trình tạo các bản sao của dữ liệu hiện có trên các server khác nhau.

Nó giúp client truy cập dữ liệu mà không bị gián đoạn, đặc biệt trong các sự cố kỹ thuật.

Mặc dù dữ liệu trở nên dư thừa (redundant), replication vẫn hỗ trợ high availability bằng cách đảm bảo luôn có ít nhất một bản sao dữ liệu sẵn sàng để truy cập khi nguồn dữ liệu chính bị lỗi.


8.1.1 Kiến trúc Replication

Hãy cùng tìm hiểu cách MongoDB triển khai replication.

Main data server nơi các thao tác đọc và ghi được thực hiện trên database được gọi là primary server.

Các server lưu trữ bản sao của database được gọi là secondary servers.

Một tập hợp hoàn chỉnh gồm một primary cùng với các secondary servers được gọi là replica set.

Một replica set phải có tối thiểu:

  • 1 primary server
  • 2 secondary servers

Figure 8.1 mô tả cấu hình Primary-Secondary-Secondary (P-S-S) của một replica set trong MongoDB, trong đó có:

  • 1 primary server
  • 2 secondary members

Mỗi server trong ba server này đều có một mongo instance riêng.

Mọi thao tác ghi hoặc cập nhật trên primary server đều được ghi lại trong operation log gọi là oplog.

Oplog từ primary server sẽ được các secondary server sao chép lại, sau đó các secondary server cập nhật database tương ứng của chúng từ oplog này.


Figure 8.1: Replication Set Operations


Trong trường hợp primary server bị lỗi, một cuộc bầu chọn (election) sẽ được tổ chức giữa các secondary servers.

Replica set có thể kích hoạt election nếu:

  • Một server mới được thêm vào.
  • Một replica set mới được thêm vào.
  • Secondary servers mất kết nối với primary server vượt quá thời gian timeout cấu hình (mặc định là 10 giây).
  • Replica set được lên lịch bảo trì.

Trong quá trình election, secondary servers vẫn có thể phục vụ các yêu cầu đọc nếu được cấu hình.

Tuy nhiên, các thao tác ghi chỉ được tiếp tục sau khi quá trình election hoàn tất.

Kết quả của election là một secondary server sẽ trở thành primary server và có khả năng xử lý cả thao tác đọc lẫn ghi trên database.

Khi primary server ban đầu hoạt động trở lại, primary server mới được bầu sẽ trở thành secondary server.


Một replica set có thể bao gồm một server chỉ có quyền bỏ phiếu trong election.
Server này được gọi là arbiter và nó không chứa bản sao của database.
Cấu hình gồm:

  • 1 primary server
  • 1 secondary server
  • 1 arbiter

được gọi là kiến trúc Primary-Secondary-Arbiter (P-S-A).


8.1.2 Các phương thức Replication

MongoDB 8.0 giới thiệu kiến trúc replication song song giúp cải thiện hiệu năng và giảm độ trễ.

Thay vì quy trình tuần tự single-threaded, replication hiện sử dụng hai thread:

  • Writer Thread: sao chép các oplog entries
  • Applier Thread: áp dụng các entries này một cách độc lập

Thiết kế này cho phép secondary servers áp dụng các thao tác nhanh hơn và song song.

Replication sử dụng dual buffers:

  • Write Buffer: xử lý việc tiếp nhận oplog entries
  • Apply Buffer: xử lý việc áp dụng entries vào database

Table 8.1 liệt kê các phương thức quan trọng được sử dụng để triển khai replication.

Ở đây, rs là viết tắt của replica set.

NameDescription
rs.addThêm một member mới vào replica set hiện có
rs.addArbThêm một arbiter vào replica set
rs.confTrả về document cấu hình replica set
rs.freezeNgăn member tham gia tranh cử vai trò primary server
rs.initiateKhởi tạo một replica set mới
rs.printReplicationInfoIn báo cáo định dạng về trạng thái replica set theo primary server
rs.printSecondaryReplicationInfoIn báo cáo định dạng về trạng thái replica set theo secondary server
rs.reconfigÁp dụng object cấu hình mới cho replica set hiện có
rs.reconfigForPSASetThực hiện thay đổi cấu hình trên replica set PSA hoặc replica set chuyển sang kiến trúc P-S-A
rs.removeXoá member khỏi replica set
rs.statusTrả về trạng thái replica set dưới dạng document
rs.stepDownChuyển primary server hiện tại thành secondary server và ép hệ thống thực hiện election
rs.syncFromGhi đè lựa chọn sync target mặc định và đặt member sync từ target được chỉ định

8.1.3 Triển khai Replication bằng kiến trúc P-S-S

Bây giờ hãy xem cách triển khai kiến trúc P-S-S trong MongoDB thông qua ví dụ.

Giả sử:

  • Máy local sẽ chứa cả ba server:
    • một primary
    • hai secondary
  • Mongo instance của primary server sẽ chạy qua port 27017 và chờ request từ application client.
  • Hai secondary servers sẽ chạy lần lượt qua port:
    • 27019
    • 27020
  • Như vậy sẽ có ba instance của mongod chạy trên máy local và mongosh sẽ được dùng để giao tiếp với các instance này.
  • Database, collection và document sẽ được tạo trong primary server và có thể đọc từ cả ba server.
  • Người dùng phải sử dụng port 27017 để chạy query trên primary server.
  • Người dùng phải sử dụng port 27019 và 27020 để chạy query trên secondary servers.

Để triển khai replication:

  1. Tạo ba thư mục tên:
    • rs1
    • rs2
    • rs3

trong thư mục c:\data để lưu trữ ba replica sets như minh hoạ trong Figure 8.2.

Chạy services.msc.

Để dừng instance MongoDB server đang chạy:

Trong cửa sổ Services:

  • nhấp chuột phải vào MongoDB Server
  • chọn Stop

như minh họa trong Figure 8.3.

Mở command prompt.

Khởi động mongod instance kết nối tới port 27017 bằng lệnh:

mongod --replSet replicaset --logpath \data\rs1\1.log --dbpath \data\rs1 --port 27017

Figure 8.4 hiển thị kết quả của lệnh.

  • Figure 8.4: Primary Server: mongod Server Instance on Port 27017

Khi người dùng chạy lệnh trong Figure 8.4, output có thể chỉ hiển thị con trỏ nhấp nháy nếu đây là lần đầu tiên chạy lệnh.
Figure 8.4 hiển thị output khi cùng lệnh được chạy lần thứ hai.


  1. Trong command prompt khác, kết nối tới mongod instance bằng lệnh mongosh:
mongosh --port 27017

Figure 8.5 hiển thị output của lệnh.

  • Figure 8.5: mongoshell Command to Connect to Port 27017

  1. Cấu hình server lắng nghe trên port 27017 làm primary server bằng lệnh:
rsconfig={_id:"replicaset",members:[{_id:0,host:"localhost:27017"}]}

Figure 8.6 hiển thị output của lệnh.

  • Figure 8.6: Configuring Port 27017 as Primary Server

Thêm primary server vào replica set bằng lệnh:

rs.initiate(rsconfig)

Figure 8.7 hiển thị output của lệnh.

  • Figure 8.7: Making the Primary Server as a Part of Replica Set

Xác nhận port 27017 đã được cấu hình làm primary server bằng lệnh:

rs.status()

Figure 8.8 cho thấy port 27017 đã được gán cho primary server.

  • Figure 8.8: Confirming the Assignment of Port 27017 to Primary Server

Bây giờ primary server đã được cấu hình, bước tiếp theo là cấu hình các secondary servers.


Mở command prompt mới.

Khởi động mongod instance kết nối tới port 27019 bằng lệnh:

mongod --replSet replicaset --logpath \data\rs2\2.log --dbpath \data\rs2 --port 27019

Figure 8.9 hiển thị output của lệnh.

  • Figure 8.9: Secondary Server 1: mongod Server Instance on Port 27019

  1. Mở command prompt mới.
  2. Khởi động mongod instance kết nối tới port 27020 bằng lệnh:
mongod --replSet replicaset --logpath \data\rs3\3.log --dbpath \data\rs3 --port 27020

Figure 8.10 hiển thị output của lệnh.

  • Figure 8.10: Secondary Server 2: mongod Server Instance on Port 27020

  1. Tại mongoshell đang kết nối với primary server, thêm port 27019 vào replica set của primary server bằng lệnh:
rs.add("localhost:27019")

Figure 8.11 hiển thị output của lệnh.

  • Figure 8.11: Adding Port 27019 to the Primary Server Replica Set

  1. Tương tự, thêm port 27020 vào replica set của primary server bằng lệnh:
rs.add("localhost:27020")

Figure 8.12 hiển thị output của lệnh.

  • Figure 8.12: Adding Port 27020 to the Primary Server Replica Set

  1. Xác nhận cấu hình của ba port bằng lệnh:
rs.status()

Figures 8.13, 8.14 và 8.15 hiển thị trạng thái của replica set và ba port.

  • Figure 8.13: Status of Replica set
  • Figure 8.14: Status of Port 27017
  • Figure 8.15: Status of Ports 27019 and 27020

Lưu ý rằng trong Figure 8.15, server instance trên port 27017 được nhắc tới như source host cho secondary server.


Kiểm tra xem primary server có đang là primary hay không bằng lệnh:

rs.isMaster()

Figure 8.16 hiển thị output của lệnh.
Lưu ý cụm từ:

isMaster:true
  • Figure 8.16: Confirming the Primary Node

  1. Mở command prompt khác.
  2. Sử dụng mongosh để giao tiếp với secondary server trên port 27019.
mongosh --port 27019

Figure 8.17 hiển thị output của lệnh.


  1. Xác nhận rằng secondary server không phải primary bằng lệnh:
rs.isMaster()

Figure 8.18 hiển thị output của lệnh.
Lưu ý cụm từ:

isMaster:false
Figure 8.18: Confirming the Secondary Node

  1. Mở command prompt khác.
  2. Sử dụng mongosh để giao tiếp với secondary server trên port 27020.
mongosh --port 27020

Figure 8.19 hiển thị output của lệnh.

Figure 8.19: Secondary Server at Port 27020

Bây giờ replica set đã được thiết lập, hãy tạo một database collection và document trên primary server, sau đó đọc dữ liệu từ secondary server.

Figure 8.20 hiển thị việc tạo database, collection và document trên primary server.

Figure 8.20: Creation of a Collection with a Document in Primary Server

Mặc dù các thay đổi đã được replicate sang secondary server, người dùng sẽ chưa thể đọc các dữ liệu được insert ở primary từ secondary server. Người dùng có thể xác minh điều này bằng chuỗi lệnh sau:

show dbs
use sample_emp
show collections
db.empdetails.find()

Figure 8.21 hiển thị output của các lệnh.

Figure 8.21: Reading a Document from Secondary Server

Lưu ý rằng secondaryOk phải được đặt thành true để cho phép đọc nội dung collection từ secondary server.

Để thực hiện điều này, chạy lệnh:

rs.secondaryOk()

Figure 8.22 hiển thị output của lệnh này.

Figure 8.22: Allowing the Secondary Server to Serve Collection Queries

Figure 8.23 cho thấy document được insert trên primary server giờ đây có thể được đọc từ secondary server.

Figure 8.23: Reading Documents from the Secondary Server

Secondary servers có thể trở thành primary server thông qua một quá trình election.

Để ép buộc diễn ra election, người dùng có thể tắt primary server bằng lệnh:

db.shutdownServer()

Figure 8.24 hiển thị kết quả của việc tắt primary server.

Figure 8.24: Shutting Down the Primary Server

Bây giờ, một trong các secondary server sẽ tự động trở thành primary.

Để xác minh điều này, hãy insert thêm một document từ secondary server chạy trên port 27019 bằng lệnh:

db.empdetails.insertOne({Name:"Elana Thomas"})

Figure 8.25 hiển thị output của lệnh này và kết quả khi chạy lệnh find trên collection empdetails.

Figure 8.25: Secondary Server Elected as a Primary Server

Lưu ý rằng server instance trước đây là secondary hiện đã trở thành primary và document đã được insert thành công.

Như vậy, secondary server đã tự động được nâng cấp thành primary server và có quyền ghi dữ liệu khi primary server ban đầu không còn khả dụng.


Để đưa primary server vừa được bầu trở về trạng thái secondary server ban đầu, người dùng có thể sử dụng lệnh stepDown.

Tuy nhiên, primary server đã bị tắt trước đó phải được khởi động lại bằng lệnh trong command prompt mới:

mongod --replSet replicaset --logpath \data\rs1\1.log --dbpath \data\rs1 --port 27017

Trong command prompt khác, người dùng có thể khởi động instance bằng lệnh:

mongosh --port 27017

Bây giờ, tại server instance của port 27019, người dùng có thể chạy lệnh stepDown như sau:

rs.stepDown()

Figure 8.26 hiển thị output của lệnh này.

Figure 8.26: Secondary Server Steps Down from Primary Server Status

8.1.4 Replication Metrics

Replication metrics trong MongoDB là các thống kê được hệ thống sinh ra nhằm hiển thị cách dữ liệu được sao chép từ primary sang secondary nodes.

Các metrics này cung cấp thông tin như:

  • mức sử dụng buffer
  • tốc độ xử lý thao tác
  • replication lag

Trong MongoDB 8.0, replication sử dụng các writer thread và applier thread riêng biệt, do đó metrics hiện theo dõi cả hai giai đoạn, giúp quản trị viên nhanh chóng phát hiện và xử lý các vấn đề hiệu năng.


Metrics in MongoDB 8.0

Kể từ MongoDB 8.0 giới thiệu cơ chế parallel replication với hai buffer, các metrics đã thay đổi:

  • metrics.repl.buffer.write.*
    • Hiển thị thống kê về Writer Buffer (nơi các oplog entries được thu thập).
  • metrics.repl.buffer.apply.*
    • Hiển thị thống kê về Apply Buffer (nơi các oplog entries chờ được apply vào dữ liệu).

Các giá trị được sinh ra bởi metrics có thể được xem thông qua các công cụ giám sát hoặc các lệnh như:

rs.status()
db.serverStatus()

Ví dụ:

db.serverStatus().metrics.repl.buffer.write

Ở đây, db.serverStatus() được dùng để lấy thông tin replication metrics chi tiết.

Trong MongoDB 6.0 và các phiên bản cũ hơn, replication hoạt động theo kiểu tuần tự (sequential) với một buffer duy nhất.
Trong MongoDB 8.0, replication hoạt động song song (parallel) với writer + applier threads cùng dual buffers.


8.2 Sharding

Replication giúp tăng tính sẵn sàng cao (high availability) bằng cách duy trì nhiều bản sao của database và đảm bảo secondary server có thể thay thế primary server khi cần.

Tuy nhiên, các tập dữ liệu tăng trưởng nhanh có thể sớm trở thành thách thức đối với CPU của primary server. CPU, RAM và các thiết bị Input/Output có thể bị quá tải vì lý do này.

Có hai cách để phân phối dữ liệu:

1. Vertical scaling

Vertical scaling liên quan tới:

  • tăng dung lượng RAM
  • sử dụng processor mạnh hơn
  • tăng không gian lưu trữ

Giới hạn công nghệ có thể khiến mô hình này không còn hoạt động hiệu quả với workload hiện tại.

Các nhà cung cấp cloud cũng có giới hạn vertical ceiling làm giảm hiệu quả xử lý truy vấn.


2. Horizontal scaling

Horizontal scaling liên quan tới việc chia dữ liệu ra nhiều server.

Mỗi server là một máy mạnh chứa một phần của tập dữ liệu lớn. Nhờ đó:

  • workload được chia nhỏ
  • xử lý hiệu quả hơn
  • tổng chi phí thấp hơn so với đầu tư vào một server duy nhất

Sharding chính là hình thức phân phối dữ liệu theo chiều ngang trên nhiều server.


Khi tải trên một server tăng lên, MongoDB hỗ trợ phân phối dữ liệu trên nhiều server khác nhau và nhờ đó hỗ trợ horizontal scaling thông qua sharding.


8.2.1 Shard Clusters

MongoDB thực hiện sharding ở cấp độ collection bằng cách phân phối dữ liệu của collection trên nhiều máy chủ khác nhau.

Một shard cluster trong MongoDB gồm ba thành phần:

Sơ đồ Shard Cluster (Applications → mongos → Configuration Server + các Shard)

• Shard Servers

Dữ liệu được phân phối trên các shard server.

Mỗi shard server chứa một phần dữ liệu đã được sharding và phải được triển khai dưới dạng một replica set.

• mongos

Các instance MongoDB mongos hoạt động như các query router.

Chúng cung cấp giao diện trung gian giữa ứng dụng khách và shard cluster.

• Configuration Servers

Thông tin cấu hình và metadata được lưu trong các configuration server.

Mỗi configuration server cũng phải được triển khai dưới dạng một replica set.


8.2.2 Sharding Strategies

Để phân phối dữ liệu trên nhiều shard khác nhau, MongoDB sử dụng shard key.

Các shard key có thể là:

  • Single index key
  • Compound index key

Shard key được lấy từ document để xác định cách dữ liệu được phân phối trong shard cluster.

MongoDB chia dữ liệu thành nhiều chunk.

Mỗi chunk chứa một khoảng giá trị shard key và được gán cho một shard tương ứng.


• Hash-based Sharding

Hashing là việc sử dụng một hàm toán học để tính giá trị hash từ shard key của document.

Sau đó mỗi chunk được gán một phạm vi các giá trị hash key dựa trên kết quả hash.

Kích thước mặc định của một chunk là:

64 MB

Khi người dùng truy vấn dữ liệu, MongoDB tự động tính toán giá trị hash và xác định chunk chứa dữ liệu cần tìm.

Giả sử người dùng sử dụng trường:

id

làm shard key của collection.

Sơ đồ Hash Function → Chunk 1, Chunk 2, Chunk 3 → Shard A-E

Nếu muốn tìm document có:

Id = 5

MongoDB sẽ sử dụng hàm hash để xác định chunk chứa document đó.

Trong ví dụ này:

Chunk 3 → Shard E

Lưu ý:

Các document có shard key gần nhau chưa chắc nằm trên cùng shard hoặc các shard liền kề.

Ví dụ:

Id = 5 nằm ở Shard E
Id = 6 nằm ở Shard A

• Range-based Sharding

Trong Range-based Sharding, các index được sắp xếp theo thứ tự và tạo thành các khoảng liên tục.

Mỗi giá trị index sẽ thuộc về một khoảng nhất định và khoảng đó được gán cho một shard.

  • Sơ đồ Chunk theo khoảng giá trị:
    • Chunk 1: Id < 25
    • Chunk 2: 26 < Id < 50
    • Chunk 3: 51 < Id < 75

Các document có shard key gần nhau thường sẽ nằm trên cùng một shard.


8.2.3 Sharding Methods

Bảng 8.2 liệt kê các phương thức quan trọng để triển khai sharding.

Trong đó:

sh = sharding
TênMô tả
sh.addShard()Thêm shard vào cluster
sh.status()Hiển thị trạng thái của sharded cluster tương tự db.printShardingStatus()
sh.enableSharding()Kích hoạt sharding cho database
sh.shardCollection()Kích hoạt sharding cho collection
sh.moveChunk()Di chuyển chunk tới một cluster

Table 8.2: Sharding Methods


8.2.4 Implementing Sharding

Hãy xem cách triển khai sharding trong MongoDB thông qua một ví dụ.

Giả sử:

  • Người dùng muốn lưu thông tin sinh viên trong collection stud.
  • Collection nằm trong database studentdb.
  • Dữ liệu sẽ được phân phối trên hai shard server:
    • Shard0
    • Shard1
  • Hai shard này lắng nghe trên:
    • Port 2005
    • Port 2007
  • Một routing server sử dụng mongos sẽ lắng nghe trên:
    • Port 2009
  • Configuration server replica set gồm:
    • Primary: cs1
    • Secondary: cs2
    • Secondary: cs3

và chạy trên các port:

2001
2002
2003

Một trăm document gồm các trường:

stud_id
class

sẽ được chuyển qua query router từ mongos shell.

Query router sẽ phân phối dữ liệu tới hai shard server.

Sơ đồ Sharding Architecture (Collection stud → mongos → Shard0/Shard1 + Configuration Replica Set)

Building the Configuration Server Replica Set

1. Tạo các thư mục

Tạo ba thư mục:

cs1
cs2
cs3

trong thư mục:

C:\data

để lưu dữ liệu cho configuration replica set.


2. Tạo primary configuration server

Mở command prompt mới và khởi tạo mongod instance làm primary configuration server:

mongod --configsvr --replSet rshard --logpath \data\cs1\1.log --dbpath \data\cs1 --port 2001

Lưu ý:

Tên replica set là rshard

3. Kết nối tới configuration server

Mở command prompt mới và kết nối tới configuration server cs1 qua port 2001:

mongosh --port 2001

4. Cấu hình cs1 làm primary configuration server

Chạy các lệnh:

shardconfig={_id:"rshard",members:[{_id:0,host:"localhost:2001"}]}

rs.initiate(shardconfig)

Figure 8.27 hiển thị kết quả của các lệnh này.

Figure 8.27: Configuring the Primary Configuration Server

5. Cấu hình các secondary configuration server

Mở hai command prompt mới và chạy:

mongod --configsvr --replSet rshard --logpath \data\cs2\2.log --dbpath \data\cs2 --port 2002
mongod --configsvr --replSet rshard --logpath \data\cs3\3.log --dbpath \data\cs3 --port 2003

6. Thêm các secondary server vào replica set

Từ primary configuration server, chạy:

rs.add("localhost:2002")
rs.add("localhost:2003")

7. Kiểm tra trạng thái configuration servers

Chạy lệnh:

rs.status()

Figure 8.28: Trạng thái của Configuration Server Replica Set

Figure 8.28 hiển thị trạng thái của các configuration server.

Kết quả lệnh rs.status() hiển thị Primary và Secondary của configuration replica set.

Tạo các Shard Server Shard0 và Shard1

8. Tạo thư mục dữ liệu

Tạo hai thư mục mới:

Shard0
Shard1

trong đường dẫn:

C:\data

để lưu dữ liệu phục vụ sharding.


9. Tạo thư mục log

Tạo một thư mục log bên trong mỗi thư mục:

C:\data\Shard0\log
C:\data\Shard1\log

10. Tạo Shard0

Tạo shard server Shard0 dưới dạng replica set lắng nghe trên cổng 2005.

Mở command prompt mới và chạy:

mongod --shardsvr --replSet shardrep --logpath \data\Shard0\log\Shard0.log --dbpath \data\Shard0 --port 2005

Lưu ý:

Tên replica set của Shard0 là shardrep

11. Kết nối tới Shard0

Mở command prompt mới và kết nối tới shard server Shard0 thông qua cổng 2005:

mongosh --port 2005

12. Cấu hình Shard0 làm Primary

Cấu hình Shard0 làm primary shard server trong replica set bằng các lệnh:

sconfig={
   _id:"shardrep",
   members:[
      {_id:0,host:"localhost:2005"}
   ]
}

rs.initiate(sconfig)

Figure 8.29 hiển thị kết quả của các lệnh trên.

Figure 8.29: Shard0 Server Configured to Listen from Port 2005

13. Tạo Shard1

Tương tự, tạo shard server Shard1 dưới dạng replica set lắng nghe trên cổng 2007.

Chạy các lệnh:

mongod --shardsvr --replSet shard0rep --logpath \data\Shard1\log\Shard1.log --dbpath \data\Shard1 --port 2007
mongosh --port 2007
s2config={
   _id:"shard0rep",
   members:[
      {_id:0,host:"localhost:2007"}
   ]
}

rs.initiate(s2config)

14. Khởi động Routing Server (mongos)

Mở command prompt mới và khởi động routing server lắng nghe trên cổng 2009 bằng primary configuration server:

mongos --port 2009 --configdb rshard/localhost:2001

Figure 8.30 hiển thị kết quả của lệnh này.

Figure 8.30: Configuring the Routing Server

15. Kết nối tới Routing Server

Mở command prompt mới và kết nối tới routing server:

mongosh --port 2009

16. Thêm Shard vào Router

Thêm các shard server vào routing server:

sh.addShard("shardrep/localhost:2005")
sh.addShard("shard0rep/localhost:2007")

Figure 8.31 hiển thị kết quả của các lệnh trên.

Figure 8.31: Adding the Shards to the Router

17. Kích hoạt Sharding cho Database

Kích hoạt sharding cho database studentdb:

sh.enableSharding("studentdb")

Figure 8.32 hiển thị kết quả của lệnh.

Figure 8.32: Enable Sharding for the studentdb Database

18. Kích hoạt Sharding cho Collection

Kích hoạt sharding cho collection stud trong database studentdb:

sh.shardCollection(
   "studentdb.stud",
   {"stud_id":"hashed"}
)

Figure 8.33 hiển thị kết quả của lệnh.

Figure 8.33: Sharding the stud Collection with stud_id as Hashed Index

19. Chèn dữ liệu vào Collection

Chèn dữ liệu bằng lệnh:

for (i = 1; i <= 100; i++) {
   db.stud.insertMany([
      {
         stud_id: i,
         class: "Grade-5"
      }
   ]);
}

Figure 8.34 hiển thị kết quả của lệnh.

Figure 8.34: Inserting Records into the Collection

20. Kiểm tra dữ liệu đã được Sharding hay chưa

Thực hiện lệnh:

db.stud.getShardDistribution()

Figure 8.35 hiển thị kết quả của lệnh.

Figure 8.35: Sharded Data

Kết quả cho thấy:

  • Tổng cộng có 100 document được chèn từ router server chạy trên cổng 2009.
  • Shard0 (cổng 2005) chứa:
    • 56 document
    • 2 chunk
    • Mỗi chunk chứa 28 document.
  • Shard1 (cổng 2007) chứa:
    • 44 document
    • 2 chunk
    • Mỗi chunk chứa 22 document.

Điều này cho thấy dữ liệu đã được phân phối thành công giữa hai shard theo cơ chế hashed sharding.

Bài viết liên quan:

Index trong MongoDB
Các phương thức trong MongoDB Shell
Database Command trong MongoDB
Aggregation Pipeline – Các pipeline tổng hợp
Các toán tử trong MongoDB
Làm việc với cơ sở dữ liệu MongoDB
Giới thiệu mongoDB
Giới thiệu khái niệm và một số mô hình cơ sở dữ liệu phân tán
Giới thiệu khái niệm Data Warehouse và một số mô hình phổ biến
Hướng dẫn cài đặt MongoDB trên môi trường windows, linux, macOS
Giới thiệu tổng quan và các khái niệm cơ bản về MongoDB
Triển Khai Ứng Dụng Web Và Ứng Dụng Azure App Service

THÊM BÌNH LUẬN Cancel reply

Dịch vụ thiết kế Wesbite

NỘI DUNG MỚI CẬP NHẬT

Sao chép dữ liệu và phân mảnh trong MongoDB

Tìm Hiểu Express.js và Lập Trình Đồng Bộ – Bất Đồng Bộ Trong Node.js

Index trong MongoDB

Các phương thức trong MongoDB Shell

Tích hợp liên tục / Triển khai liên tục (CI/CD) với Git

Giới thiệu

hocvietcode.com là website chia sẻ và cập nhật tin tức công nghệ, chia sẻ kiến thức, kỹ năng. Chúng tôi rất cảm ơn và mong muốn nhận được nhiều phản hồi để có thể phục vụ quý bạn đọc tốt hơn !

Liên hệ quảng cáo: [email protected]

Kết nối với HỌC VIẾT CODE

© hocvietcode.com - Tech888 Co .Ltd since 2019

Đăng nhập

Trở thành một phần của cộng đồng của chúng tôi!
Registration complete. Please check your email.
Đăng nhập bằng google
Đăng kýBạn quên mật khẩu?

Create an account

Welcome! Register for an account
The user name or email address is not correct.
Registration confirmation will be emailed to you.
Log in Lost your password?

Reset password

Recover your password
Password reset email has been sent.
The email could not be sent. Possible reason: your host may have disabled the mail function.
A password will be e-mailed to you.
Log in Register
×