Sharding là một quy trình MongoDB để lưu trữ tập dữ liệu trên nhiều máy khác nhau. Nó cho phép bạn thực hiện quy mô dữ liệu theo chiều ngang và phân vùng tất cả dữ liệu trên các phiên bản độc lập. Sharding cho phép bạn thêm nhiều máy hơn dựa trên sự phát triển dữ liệu vào ngăn xếp của bạn.
Config Server - Được sử dụng để lưu trữ siêu dữ liệu cụm và chứa ánh xạ của bộ dữ liệu cụm và các shard. Dữ liệu này được mongos/query server sử dụng để phân phối các hoạt động. Nên sử dụng nhiều hơn 3 phiên bản trong sản xuất.
Mongos/Query Router - Đây chỉ là các phiên bản mongo chạy dưới dạng giao diện ứng dụng. Ứng dụng sẽ gửi yêu cầu đến phiên bản 'mongos', sau đó 'mongos' sẽ phân phối các yêu cầu bằng khóa phân đoạn đến các bộ bản sao phân đoạn.
Điều kiện tiên quyết
[*] Mỗi máy chủ được kết nối với một máy chủ khác
Kết nối đến tất cả các nút thông qua OpenSSH.
Vô hiệu hóa SELinux bằng cách chỉnh sửa tệp cấu hình.
Thay đổi giá trị SELINUX thành 'disabled'.
Lưu và thoát.
Tiếp theo, chỉnh sửa tệp hosts trên mỗi máy chủ.
Dán cấu hình hosts sau:
Lưu và thoát.
Bây giờ hãy khởi động lại tất cả các máy chủ bằng lệnh reboot.
Bây giờ hãy cài đặt MongoDB 3.4 từ kho lưu trữ mongodb bằng lệnh yum sau.
Sau khi mongodb được cài đặt, bạn có thể sử dụng lệnh 'mongo' hoặc 'mongod'.
Nếu có dịch vụ mongod đang chạy trên máy chủ, hãy dừng dịch vụ đó bằng lệnh systemctl.
Chỉnh sửa cấu hình mongodb mặc định 'mongod.conf' bằng trình soạn thảo Vim.
Thay đổi đường dẫn lưu trữ DB thành thư mục của riêng bạn. Chúng tôi sẽ sử dụng thư mục '/data/db1' cho máy chủ đầu tiên và thư mục '/data/db2' cho máy chủ cấu hình thứ hai.
Thay đổi giá trị của dòng 'bindIP' thành địa chỉ mạng nội bộ của bạn - 'configsvr1' với địa chỉ IP là 10.0.15.31 và máy chủ thứ hai với 10.0.15.32.
Trong phần sao chép, hãy đặt tên sao chép.
Và trong phần phân mảnh, hãy xác định vai trò của các phiên bản. Chúng ta sẽ sử dụng hai phiên bản này làm 'configsvr'.
Lưu và thoát.
Tiếp theo, chúng ta phải tạo một thư mục mới cho dữ liệu MongoDB, sau đó thay đổi chủ sở hữu của thư mục đó thành người dùng 'mongod'.
Sau đó, hãy khởi động dịch vụ mongod bằng lệnh bên dưới.
Bạn có thể sử dụng lệnh netstat để kiểm tra xem dịch vụ mongod có đang chạy trên cổng 27017 hay không.
Configsvr1 và Configsvr2 đã sẵn sàng để tạo bản sao. Kết nối với máy chủ 'configsvr1' và truy cập shell mongo.
Khởi tạo tên tập bản sao với tất cả thành viên configsvr bằng truy vấn bên dưới.
Nếu bạn nhận được kết quả '{ "ok" : 1 }', điều đó có nghĩa là configsvr đã được định cấu hình với tập bản sao.
và bạn sẽ có thể thấy nút nào là nút chính và nút nào là nút phụ.
Cấu hình của Config Server Replica Set đã hoàn tất.
Thay đổi bộ lưu trữ mặc định thành thư mục cụ thể của bạn.
Trên dòng 'bindIP', hãy thay đổi giá trị để sử dụng địa chỉ mạng nội bộ của bạn.
Trên phần sao chép, bạn có thể sử dụng 'shardreplica01' cho phiên bản đầu tiên và thứ hai. Và sử dụng 'shardreplica02' cho máy chủ phân đoạn thứ ba và thứ tư.
Tiếp theo, hãy xác định vai trò của máy chủ. Chúng tôi sẽ sử dụng tất cả những thứ này như các phiên bản shardsvr.
Lưu và thoát.
Bây giờ, hãy tạo một thư mục mới cho dữ liệu MongoDB.
Khởi động dịch vụ mongod.
Kiểm tra MongoDB đang chạy bằng lệnh sau:
Bạn sẽ thấy MongoDB đang chạy trên địa chỉ mạng cục bộ.
Tiếp theo, hãy tạo một bộ bản sao mới cho 2 phiên bản shard này. Kết nối với 'shardsvr1' và truy cập shell mongo.
Khởi tạo bộ bản sao với tên 'shardreplica01' và các thành viên là 'shardsvr1' và 'shardsvr2'.
Nếu không có lỗi, bạn sẽ thấy kết quả như sau bên dưới.
Kết quả từ shardsvr3 và shardsvr4 với tên bộ bản sao là 'shardreplica02'.
Thực hiện lại bước này cho các máy chủ shardsvr3 và shardsvr4 với tên bộ bản sao khác là 'shardreplica02'.
Bây giờ chúng ta đã tạo 2 bộ bản sao - 'shardreplica01' và 'shardreplica02' - làm shard.
Đăng nhập vào máy chủ mongos và dừng dịch vụ MongoDB.
Chạy mongos bằng dòng lệnh như hiển thị bên dưới.
Sử dụng tùy chọn '--configdb' để xác định máy chủ cấu hình. Nếu bạn đang ở chế độ sản xuất, hãy sử dụng ít nhất 3 máy chủ cấu hình.
Bạn sẽ thấy kết quả tương tự như sau.
Các phiên bản mongos đang chạy.
Thêm máy chủ phân đoạn bằng truy vấn sh mongodb.
Đối với các phiên bản 'shardreplica01':
Đối với các phiên bản 'shardreplica02':
Đảm bảo không có lỗi và kiểm tra trạng thái phân mảnh.
Bạn sẽ thấy trạng thái phân mảnh tương tự như cách ảnh chụp màn hình sau đây hiển thị.
Chúng tôi có 2 bộ bản sao phân mảnh và 1 phiên bản mongos đang chạy trên stack.
Bật phân mảnh cho cơ sở dữ liệu
Tạo cơ sở dữ liệu mới và bật phân mảnh cho cơ sở dữ liệu mới.
Bây giờ hãy xem trạng thái của cơ sở dữ liệu, cơ sở dữ liệu đã được phân vùng thành tập bản sao 'shardreplica01'.
Bật phân mảnh cho các bộ sưu tập
Tiếp theo, thêm các bộ sưu tập mới vào cơ sở dữ liệu có hỗ trợ phân mảnh. Chúng tôi sẽ thêm bộ sưu tập mới có tên là 'stack' với bộ sưu tập phân đoạn là 'name', sau đó xem trạng thái cơ sở dữ liệu và bộ sưu tập.
Bộ sưu tập mới 'stack' với bộ sưu tập phân đoạn là 'name' đã được thêm vào.
Thêm tài liệu vào bộ sưu tập 'stack'.
Bây giờ hãy chèn tài liệu vào bộ sưu tập. Khi chúng ta thêm tài liệu vào bộ sưu tập trên cụm phân mảnh, chúng ta phải bao gồm 'khóa phân mảnh'.
Trong ví dụ bên dưới, chúng ta đang sử dụng khóa phân mảnh 'tên', như chúng ta đã thêm khi bật phân mảnh cho các bộ sưu tập.
Như được hiển thị trong các ảnh chụp màn hình sau, tài liệu đã được thêm thành công vào bộ sưu tập.
Nếu bạn muốn kiểm tra cơ sở dữ liệu, bạn có thể kết nối với máy chủ CHÍNH của bộ bản sao 'shardreplica01' và mở shell mongo. Tôi đang đăng nhập vào máy chủ CHÍNH 'shardsvr2'.
Kiểm tra cơ sở dữ liệu có sẵn trên bộ bản sao.
Bạn sẽ thấy cơ sở dữ liệu, bộ sưu tập và tài liệu có sẵn trong bộ bản sao.
MongoDB Sharded Cluster trên CentOS 7 đã được cài đặt và triển khai thành công.
Sharding và Replication
Chúng ta hãy làm cho nó đơn giản. Khi bạn có các bộ sưu tập nhạc, 'Sharding' sẽ lưu và giữ các bộ sưu tập nhạc của bạn trong các thư mục khác nhau trên các phiên bản hoặc bộ bản sao khác nhau trong khi 'Replication' chỉ đồng bộ hóa các bộ sưu tập nhạc của bạn với các phiên bản khác.Ba thành phần Sharding
Shard - Được sử dụng để lưu trữ tất cả dữ liệu. Và trong môi trường sản xuất, mỗi shard là các bộ bản sao. Cung cấp tính khả dụng cao và tính nhất quán của dữ liệu.Config Server - Được sử dụng để lưu trữ siêu dữ liệu cụm và chứa ánh xạ của bộ dữ liệu cụm và các shard. Dữ liệu này được mongos/query server sử dụng để phân phối các hoạt động. Nên sử dụng nhiều hơn 3 phiên bản trong sản xuất.
Mongos/Query Router - Đây chỉ là các phiên bản mongo chạy dưới dạng giao diện ứng dụng. Ứng dụng sẽ gửi yêu cầu đến phiên bản 'mongos', sau đó 'mongos' sẽ phân phối các yêu cầu bằng khóa phân đoạn đến các bộ bản sao phân đoạn.
Điều kiện tiên quyết
- 2 máy chủ centOS 7 làm Bộ bản sao cấu hình10.0.15.31 configsvr1
- 10.0.15.32 configsvr2
- 10.0.15.21 shardsvr1
- 10.0.15.22 shardsvr2
- 10.0.15.23 shardsvr3
- 10.0.15.24 shardsvr4
- 10.0.15.11 mongos
[*] Mỗi máy chủ được kết nối với một máy chủ khác
Bước 1 - Vô hiệu hóa SELinux và Cấu hình Máy chủ
Trong hướng dẫn này, chúng tôi sẽ vô hiệu hóa SELinux. Thay đổi cấu hình SELinux từ 'enforcing' thành 'disabled'.Kết nối đến tất cả các nút thông qua OpenSSH.
Mã:
ssh root@SERVERIP
Mã:
vim /etc/sysconfig/selinux
Mã:
SELINUX=disabled
Tiếp theo, chỉnh sửa tệp hosts trên mỗi máy chủ.
Mã:
vim /etc/hosts
Mã:
10.0.15.31 configsvr1
10.0.15.32 configsvr2
10.0.15.11 mongos
10.0.15.21 shardsvr1
10.0.15.22 shardsvr2
10.0.15.23 shardsvr3
10.0.15.24 shardsvr4
Bây giờ hãy khởi động lại tất cả các máy chủ bằng lệnh reboot.
Mã:
khởi động lại
Bước 2 - Cài đặt MongoDB trên tất cả các phiên bản
Chúng tôi sẽ sử dụng phiên bản MongoDB mới nhất (3.4) cho tất cả các phiên bản. Thêm kho lưu trữ MongoDB mới bằng cách thực hiện lệnh sau:
Mã:
cat /etc/yum.repos.d/mongodb.repo
[mongodb-org-3.4]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc
EOF
Mã:
sudo yum -y install mongodb-org
Mã:
mongod --version
Bước 3 - Tạo bộ bản sao máy chủ cấu hình
Trong phần 'điều kiện tiên quyết', chúng tôi đã định nghĩa máy chủ cấu hình với 2 máy 'configsvr1' và 'configsvr2'. Và trong bước này, chúng tôi sẽ cấu hình nó thành một bộ bản sao.Nếu có dịch vụ mongod đang chạy trên máy chủ, hãy dừng dịch vụ đó bằng lệnh systemctl.
Mã:
systemctl stop mongod
Mã:
vim /etc/mongod.conf
Mã:
lưu trữ:
dbPath: /data/db1
Mã:
bindIP: 10.0.15.31
Mã:
sao chép:
replSetName: "replconfig01"
Mã:
sharding:
clusterRole: configsvr
Tiếp theo, chúng ta phải tạo một thư mục mới cho dữ liệu MongoDB, sau đó thay đổi chủ sở hữu của thư mục đó thành người dùng 'mongod'.
Mã:
mkdir -p /data/db1
chown -R mongod:mongod /data/db1
Mã:
mongod --config /etc/mongod.conf
Mã:
netstat -plntu
Configsvr1 và Configsvr2 đã sẵn sàng để tạo bản sao. Kết nối với máy chủ 'configsvr1' và truy cập shell mongo.
Mã:
ssh root@configsvr1
mongo --host configsvr1 --port 27017
Mã:
rs.initiate(
{
_id: "replconfig01",
configsvr: true,
members: [
{ _id : 0, host : "configsvr1:27017" },
{ _id : 1, host : "configsvr2:27017" }
]
}
)
và bạn sẽ có thể thấy nút nào là nút chính và nút nào là nút phụ.
Mã:
rs.isMaster()
rs.status()
Cấu hình của Config Server Replica Set đã hoàn tất.
Bước 4 - Tạo Shard Replica Set
Trong bước này, chúng ta sẽ cấu hình 4 máy chủ 'centos 7' làm máy chủ 'Shard' với 2 'Replica Set'.- 2 máy chủ - 'shardsvr1' và 'shardsvr2' với tên bộ bản sao: 'shardreplica01'
- 2 máy chủ - 'shardsvr3' và 'shardsvr4' với tên bộ bản sao: 'shardreplica02'
Mã:
systemctl stop mongod
vim /etc/mongod.conf
Mã:
storage:
dbPath: /data/db1
Mã:
bindIP: 10.0.15.21
Mã:
replication:
replSetName: "shardreplica01"
Mã:
sharding:
clusterRole: shardsvr
Bây giờ, hãy tạo một thư mục mới cho dữ liệu MongoDB.
Mã:
mkdir -p /data/db1
chown -R mongod:mongod /data/db1
Mã:
mongod --config /etc/mongod.conf
Mã:
netstat -plntu
Tiếp theo, hãy tạo một bộ bản sao mới cho 2 phiên bản shard này. Kết nối với 'shardsvr1' và truy cập shell mongo.
Mã:
ssh root@shardsvr1
mongo --host shardsvr1 --port 27017
Mã:
rs.initiate(
{
_id : "shardreplica01",
thành viên: [
{ _id : 0, host : "shardsvr1:27017" },
{ _id : 1, host : "shardsvr2:27017" }
]
}
)
Kết quả từ shardsvr3 và shardsvr4 với tên bộ bản sao là 'shardreplica02'.
Thực hiện lại bước này cho các máy chủ shardsvr3 và shardsvr4 với tên bộ bản sao khác là 'shardreplica02'.
Bây giờ chúng ta đã tạo 2 bộ bản sao - 'shardreplica01' và 'shardreplica02' - làm shard.
Bước 5 - Cấu hình mongos/Query Router
'Query Router' hoặc mongos chỉ là các phiên bản chạy 'mongos'. Bạn có thể chạy mongos bằng tệp cấu hình hoặc chỉ chạy bằng dòng lệnh.Đăng nhập vào máy chủ mongos và dừng dịch vụ MongoDB.
Mã:
ssh root@mongos
systemctl stop mongod
Mã:
mongos --configdb "replconfig01/configsvr1:27017,configsvr2:27017"
Bạn sẽ thấy kết quả tương tự như sau.
Mã:
Đã kết nối thành công tới configsvr1:27017
Đã kết nối thành công tới configsvr2:27017
Bước 6 - Thêm các phân đoạn vào mongos/Query Router
Mở một shell khác từ bước trước, kết nối lại với máy chủ mongos và truy cập shell mongo.
Mã:
ssh root@mongos
mongo --host mongos --port 27017
Đối với các phiên bản 'shardreplica01':
Mã:
sh.addShard( "shardreplica01/shardsvr1:27017")
sh.addShard( "shardreplica01/shardsvr2:27017")
Mã:
sh.addShard( "shardreplica02/shardsvr3:27017")
sh.addShard( "shardreplica02/shardsvr4:27017")
Mã:
sh.status()
Chúng tôi có 2 bộ bản sao phân mảnh và 1 phiên bản mongos đang chạy trên stack.
Bước 7 - Kiểm tra
Để kiểm tra thiết lập, hãy truy cập vào shell mongo của máy chủ mongos.
Mã:
ssh root@mongos
mongo --host mongos --port 27017
Tạo cơ sở dữ liệu mới và bật phân mảnh cho cơ sở dữ liệu mới.
Mã:
sử dụng lemp
sh.enableSharding("lemp")
sh.status()
Bây giờ hãy xem trạng thái của cơ sở dữ liệu, cơ sở dữ liệu đã được phân vùng thành tập bản sao 'shardreplica01'.
Bật phân mảnh cho các bộ sưu tập
Tiếp theo, thêm các bộ sưu tập mới vào cơ sở dữ liệu có hỗ trợ phân mảnh. Chúng tôi sẽ thêm bộ sưu tập mới có tên là 'stack' với bộ sưu tập phân đoạn là 'name', sau đó xem trạng thái cơ sở dữ liệu và bộ sưu tập.
Mã:
sh.shardCollection("lemp.stack", {"name":1})
sh.status()
Bộ sưu tập mới 'stack' với bộ sưu tập phân đoạn là 'name' đã được thêm vào.
Thêm tài liệu vào bộ sưu tập 'stack'.
Bây giờ hãy chèn tài liệu vào bộ sưu tập. Khi chúng ta thêm tài liệu vào bộ sưu tập trên cụm phân mảnh, chúng ta phải bao gồm 'khóa phân mảnh'.
Trong ví dụ bên dưới, chúng ta đang sử dụng khóa phân mảnh 'tên', như chúng ta đã thêm khi bật phân mảnh cho các bộ sưu tập.
Mã:
db.stack.save({
"name": "LEMP Stack",
"apps": ["Linux", "Nginx", "MySQL", "PHP"],
})
Nếu bạn muốn kiểm tra cơ sở dữ liệu, bạn có thể kết nối với máy chủ CHÍNH của bộ bản sao 'shardreplica01' và mở shell mongo. Tôi đang đăng nhập vào máy chủ CHÍNH 'shardsvr2'.
Mã:
ssh root@shardsvr2
mongo --host shardsvr2 --port 27017
Mã:
show dbs
use lemp
db.stack.find()
MongoDB Sharded Cluster trên CentOS 7 đã được cài đặt và triển khai thành công.