Đối với bất kỳ cơ sở dữ liệu nào, việc cân bằng tải của tất cả các yêu cầu đến từ máy khách là một cơ chế quan trọng và cơ bản để đảm bảo khả năng mở rộng. Một giải pháp cân bằng tải thích hợp trải đều tất cả các yêu cầu của khách hàng trên tất cả các tài nguyên cơ sở dữ liệu. Nếu cụm cơ sở dữ liệu không được bảo vệ bằng giải pháp cân bằng tải thích hợp, thì cơ sở dữ liệu của bạn sẽ không thể xử lý tải lưu lượng truy cập tăng lên trên đó.
May mắn thay, MongoDB cung cấp hỗ trợ tích hợp để cân bằng tải lưu lượng truy cập cao bằng cách hỗ trợ chia tỷ lệ ngang thông qua sharding. Bạn có thể phân phối dữ liệu của bộ sưu tập của mình trên nhiều máy chủ bằng cách sử dụng sharding. Bạn cũng có thể thêm máy chủ / máy mới vào cụm của mình để xử lý lưu lượng truy cập tăng trên cơ sở dữ liệu. Bạn có thể làm theo hướng dẫn này để chuyển đổi cụm bản sao MongoDB của mình thành một cụm sharding.
Trong bài viết này, chúng ta sẽ tìm hiểu về hoạt động của quy trình cân bằng chạy trong các cụm phân đoạn MongoDB và cách sửa đổi hành vi của nó. Quy trình cân bằng MongoDB đảm nhận việc phân phối đồng đều các bộ sưu tập của bạn trên các phân đoạn. Ví dụ:nếu một phân đoạn trong cụm của bạn chứa quá nhiều phần trong bộ sưu tập được phân đoạn của bạn, phân đoạn cụ thể đó có thể nhận được nhiều lưu lượng truy cập hơn so với các phân đoạn khác. Do đó, quá trình cân bằng cân bằng các phần của bộ sưu tập đúng cách trên các phân đoạn. Trong hầu hết các triển khai MongoDB, cấu hình mặc định của quá trình cân bằng là đủ cho các hoạt động bình thường. Tuy nhiên, trong một số tình huống, quản trị viên cơ sở dữ liệu có thể muốn thay đổi hành vi mặc định của quá trình này. Nếu bạn muốn sửa đổi hành vi mặc định của quy trình cân bằng cho bất kỳ nhu cầu cấp ứng dụng hoặc yêu cầu hoạt động nào thì bạn có thể làm theo hướng dẫn này.
Hãy bắt đầu với một số lệnh cơ bản để có một số thông tin về trạng thái và trạng thái của quy trình cân bằng.
Trạng thái Trạng thái Cân bằng
Lệnh này kiểm tra xem bộ cân bằng có được bật hoặc được phép chạy hay không. Nếu quá trình cân bằng không chạy thì lệnh này sẽ trả về false. Điều này sẽ không kiểm tra xem quá trình cân bằng có đang chạy hay không.
sh.getBalancerState()
Bật Quy trình Cân bằng
Nếu bộ cân bằng không được bật theo mặc định thì bạn có thể bật bộ cân bằng bằng cách chạy lệnh sau. Lệnh này sẽ không bắt đầu quá trình cân bằng nhưng nó sẽ kích hoạt quá trình và đảm bảo rằng cân bằng phân đoạn sẽ không bị chặn khi quá trình cân bằng chạy vào lần tiếp theo.
sh.enableBalancing(<collection_name/namespace>)
Tắt Quy trình Cân bằng
Theo mặc định, quá trình cân bằng chạy bất kỳ lúc nào. Do đó, nếu bạn muốn tắt quá trình cân bằng trong một khoảng thời gian cụ thể thì bạn có thể sử dụng lệnh sau. Một tình huống lý tưởng để sử dụng lệnh này là khi bạn đang sao lưu cơ sở dữ liệu của mình.
sh.stopBalancer()
Đảm bảo rằng quá trình cân bằng được dừng trước khi thực hiện sao lưu. Nếu quá trình được bật trong khi thực hiện sao lưu cơ sở dữ liệu, bạn có thể nhận được một số bản sao không nhất quán của cơ sở dữ liệu của mình. Điều này có thể xảy ra khi quá trình cân bằng di chuyển một số phần trên các phân đoạn để cân bằng tải trong quá trình sao lưu.
Bạn cũng có thể tắt tính năng cân bằng trên một số tập hợp cụ thể bằng cách cung cấp không gian tên đầy đủ của tập hợp dưới dạng tham số bằng lệnh sau.
sh.disableBalancing("<db_name>.<collection_name>")
Trạng thái chạy của bộ cân bằng
Lệnh này kiểm tra xem quá trình cân bằng có đang chạy hay không. Nó cũng kiểm tra xem nó có đang chủ động quản lý các khối cá mập hay không. Trả về true nếu quá trình đang chạy, ngược lại trả về false.
sh.isBalancerRunning()
Cấu hình Kích thước Chunk Mặc định
Theo mặc định, kích thước chunk trong bất kỳ cụm phân đoạn MongoDB nào là 64MB. Đối với hầu hết các tình huống, điều này đủ tốt để di chuyển hoặc chia nhỏ các phần đã được chia nhỏ. Tuy nhiên, đôi khi quá trình di chuyển thông thường không bao gồm nhiều hoạt động I / O hơn phần cứng của bạn có thể xử lý. Trong những loại tình huống này, bạn có thể muốn giảm kích thước của các khối. Bạn có thể làm như vậy bằng cách chạy bộ lệnh sau.
use config
db.settings.save( { _id:"chunksize", value: <sizeInMB> } )
Nếu bạn thay đổi kích thước mặc định trong cụm phân đoạn, hãy ghi nhớ những điều sau
- Bạn chỉ có thể chỉ định kích thước đoạn từ 1 đến 1024 MB
- Tách tự động sẽ chỉ xảy ra khi chèn hoặc cập nhật
- Kích thước đoạn nhỏ hơn sẽ dẫn đến mất nhiều thời gian hơn trong quá trình phân tách.
Cân bằng lịch biểu cho một thời gian cụ thể
Khi kích thước cơ sở dữ liệu của bạn lớn, quá trình cân bằng hoặc di chuyển có thể ảnh hưởng đến hiệu suất tổng thể của cơ sở dữ liệu của bạn. Do đó, nên lập lịch trình cân bằng trong một khoảng thời gian cụ thể khi tải trên cơ sở dữ liệu rất ít. Bạn có thể sử dụng các lệnh sau để đặt cửa sổ thời gian cho quá trình cân bằng chạy.
use config
db.settings.update({ _id : "balancer" }, { $set : { activeWindow : { start : "<start-time>", stop : "<stop-time>" } } }, true )
Ví dụ
Lệnh sau sẽ đặt cửa sổ thời gian từ 1:00 AM đến 5:00 AM để quá trình cân bằng chạy.
db.settings.update({ _id : "balancer" }, { $set : { activeWindow : { start : "01:00", stop : "05:00" } } }, true )
Đảm bảo rằng khung thời gian nhất định là đủ cho quá trình cân bằng hoàn chỉnh.
Bạn cũng có thể xóa bất kỳ cửa sổ thời gian nào của quy trình cân bằng hiện có bằng cách chạy lệnh sau.
db.settings.update({ _id : "balancer" }, { $unset : { activeWindow : true } })
Ngoài các lệnh trên, bạn cũng có thể thay đổi hành vi sao chép trong khi thực hiện quá trình di chuyển đoạn bằng cách sử dụng tham số _secondaryThrottle. Ngoài ra, bạn có thể sử dụng thuộc tính _waitForDelete với lệnh moveChunk để yêu cầu quá trình cân bằng chờ giai đoạn xóa của quá trình di chuyển hiện tại trước khi bắt đầu với giai đoạn di chuyển đoạn mới.
Kết luận
Hy vọng rằng đây sẽ là tất cả những gì bạn cần trong khi thay đổi hành vi mặc định của quy trình cân bằng MongoDB. Cân bằng là một khía cạnh rất quan trọng của bất kỳ cụm phân đoạn MongoDB nào. Vì vậy, nếu bạn biết chi tiết về quy trình cân bằng, bạn sẽ rất dễ dàng sửa đổi hành vi mặc định của quy trình cân bằng theo nhu cầu và trường hợp sử dụng của mình.