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, phân vùng dữ liệu trên các phiên bản độc lập và có thể là 'Bộ bản sao'. Phân vùng tập dữ liệu trên 'Sharding' sử dụng khóa shard. 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 trên ngăn xếp của bạn.
Config Server - Được sử dụng để lưu trữ siêu dữ liệu cụm, chứa bản đồ của tập dữ liệu cụm và các phân đoạn. 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 các phiên bản mongos, sau đó mongos sẽ chuyển 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ây giờ hãy cài đặt mongodb 3.4 từ kho lưu trữ mongodb bằng lệnh yum bên dưới.
Sau khi mongodb được cài đặt, hãy sử dụng lệnh 'mongo' hoặc 'mongod' theo cách sau để kiểm tra thông tin chi tiết về phiên bản.
Nếu có dịch vụ mongod đang chạy trên máy chủ, hãy dừng nó bằng lệnh systemctl sau.
Chỉnh sửa cấu hình mongodb mặc định 'mongod.conf'.
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 '/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' có địa chỉ IP là 10.0.15.31 và máy chủ thứ hai có địa chỉ là 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 quyền sở hữu của thư mục đó thành người dùng 'mongod'.
Tiếp theo, khởi động dịch vụ mongod bằng lệnh sau.
Bạn có thể kiểm tra dịch vụ mongod đang chạy trên cổng 27017 bằng lệnh netstat.
Configsvr1 và Configsvr2 đã sẵn sàng cho bộ 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ả các thành viên configsvr bằng cách sử dụ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.
Trong dòng 'bindIP', hãy thay đổi giá trị thành địa chỉ mạng nội bộ của bạn.
Trong 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 xem MongoDB có đang chạy hay không bằng lệnh bên dưới:
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 tớ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ư hiển thị 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 trên 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 làm shard - 'shardreplica01' và 'shardreplica02'.
Đăng nhập vào máy chủ mongos và dừng dịch vụ MongoDB.
Chạy mongos bằng lệnh 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ả bên dưới.
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ẽ phân mảnh trạng thái như được hiển thị trong ảnh chụp màn hình bên dưới.
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.
Truy cập shell mongo của máy chủ mongos.
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 mảnh 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 mảnh 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 tôi thêm tài liệu vào bộ sưu tập trên cụm phân mảnh, chúng tôi phải bao gồm 'khóa phân mảnh'.
Bạn có thể sử dụng ví dụ bên dưới. Chúng tôi đang sử dụng khóa phân mảnh 'name', như chúng tôi đã thêm khi bật phân mảnh cho các bộ sưu tập.
Các tài liệu đã được thêm thành công vào bộ sưu tập, như được hiển thị trong ảnh chụp màn hình sau.
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.
Cụm phân mảnh MongoDB trên CentOS 7 đã được cài đặt và triển khai thành công.
Sharding và Replication
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 vào một thư mục khác. Mặt khác, 'Replication' chỉ là đồ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, chứa bản đồ của tập dữ liệu cụm và các phân đoạn. 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 các phiên bản mongos, sau đó mongos sẽ chuyển 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 ta 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ủ:
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 MongoDB mới nhất (MongoDB 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 các 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 nó bằng lệnh systemctl sau.
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 quyền 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 cho bộ 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()
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 bản sao set name: 'shardreplica02'
Mã:
systemctl stop mongod
vim /etc/mongod.conf
Mã:
storage:
dbPath: /data/db1
Mã:
bindIP: 10.0.15.21
Mã:
sao chép:
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 tớ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 trên 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 làm shard - 'shardreplica01' và 'shardreplica02'.
Bước 5 - Cấu hình mongos/Query Router
'Query Router' hoặc mongos chỉ là các phiên bản đang 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ả bên dưới.
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 5, 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
Bây giờ chúng ta sẽ kiểm tra máy chủ MongoDB bằng cách bật phân mảnh và sau đó thêm tài liệu.Truy cập 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 mảnh 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 mảnh 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 tôi thêm tài liệu vào bộ sưu tập trên cụm phân mảnh, chúng tôi phải bao gồm 'khóa phân mảnh'.
Bạn có thể sử dụng ví dụ bên dưới. Chúng tôi đang sử dụng khóa phân mảnh 'name', như chúng tôi đã 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()
Cụm phân mảnh MongoDB trên CentOS 7 đã được cài đặt và triển khai thành công.