Cách cài đặt MongoDB Sharded Cluster trên CentOS 7

theanh

Administrator
Nhân viên
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.

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
[*] 4 máy chủ CentOS 7 làm Bản sao phân đoạn Đặt
  • 10.0.15.21 shardsvr1
  • 10.0.15.22 shardsvr2
  • 10.0.15.23 shardsvr3
  • 10.0.15.24 shardsvr4
[*] 1 máy chủ CentOS 7 làm mongos/Query Router
  • 10.0.15.11 mongos
[*] Quyền root
[*] 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
Vô hiệu hóa SELinux bằng cách chỉnh sửa tệp cấu hình.
Mã:
vim /etc/sysconfig/selinux
Thay đổi giá trị SELinux thành 'disabled'.
Mã:
SELINUX=disabled
Lưu và thoát.

Tiếp theo, chỉnh sửa tệp hosts trên mỗi máy chủ.
Mã:
vim /etc/hosts
Dán cấu hình hosts sau:
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
Lưu và thoát.

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
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.
Mã:
sudo yum -y install mongodb-org
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.
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
Chỉnh sửa cấu hình mongodb mặc định 'mongod.conf'.
Mã:
vim /etc/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.
Mã:
lưu trữ:
 dbPath: /data/db1
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.
Mã:
bindIP: 10.0.15.31
Trong phần sao chép, hãy đặt tên sao chép.
Mã:
sao chép:
 replSetName: "replconfig01"
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'.
Mã:
sharding:
 clusterRole: 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'.
Mã:
mkdir -p /data/db1
chown -R mongod:mongod /data/db1
Tiếp theo, khởi động dịch vụ mongod bằng lệnh sau.
Mã:
mongod --config /etc/mongod.conf
Bạn có thể kiểm tra dịch vụ mongod đang chạy trên cổng 27017 bằng lệnh netstat.
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
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.
Mã:
rs.initiate(
 {
 _id: "replconfig01",
 configsvr: true,
 members: [
 { _id : 0, host : "configsvr1:27017" },
 { _id : 1, host : "configsvr2:27017" }
 ]
 }
)
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ụ.
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 bản sao set name: 'shardreplica02'
Kết nối với từng máy chủ và dừng dịch vụ mongod (Nếu dịch vụ đang chạy) và chỉnh sửa tệp cấu hình MongoDB.
Mã:
systemctl stop mongod
vim /etc/mongod.conf
Thay đổi bộ lưu trữ mặc định thành thư mục cụ thể của bạn.
Mã:
storage:
 dbPath: /data/db1
Trong dòng 'bindIP', hãy thay đổi giá trị thành địa chỉ mạng nội bộ của bạn.
Mã:
bindIP: 10.0.15.21
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ư.
Mã:
sao chép:
 replSetName: "shardreplica01"
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.
Mã:
sharding:
 clusterRole: 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.
Mã:
mkdir -p /data/db1
chown -R mongod:mongod /data/db1
Khởi động dịch vụ mongod.
Mã:
mongod --config /etc/mongod.conf
Kiểm tra xem MongoDB có đang chạy hay không bằng lệnh bên dưới:
Mã:
netstat -plntu
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.
Mã:
ssh root@shardsvr1
mongo --host shardsvr1 --port 27017
Khởi tạo bộ bản sao với tên 'shardreplica01', và các thành viên là 'shardsvr1' và 'shardsvr2'.
Mã:
rs.initiate(
 {
 _id : "shardreplica01",
 thành viên: [
 { _id : 0, host : "shardsvr1:27017" },
 { _id : 1, host : "shardsvr2:27017" }
 ]
 }
 )
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ừ shardsvr3shardsvr4 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ủ shardsvr3shardsvr4 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
Chạy mongos bằng lệnh bên dưới.
Mã:
mongos --configdb "replconfig01/configsvr1:27017,configsvr2:27017"
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.
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
Các phiên bản mongos đang chạy.


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
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'.
Mã:
sh.addShard( "shardreplica01/shardsvr1:27017")
sh.addShard( "shardreplica01/shardsvr2:27017")
Đối với các phiên bản 'shardreplica02'.
Mã:
sh.addShard( "shardreplica02/shardsvr3:27017")
sh.addShard( "shardreplica02/shardsvr4:27017")
Đảm bảo không có lỗi và kiểm tra trạng thái phân mảnh.
Mã:
sh.status()
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.

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
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.
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"],
})
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'.
Mã:
ssh root@shardsvr2
mongo --host shardsvr2 --port 27017
Kiểm tra cơ sở dữ liệu có sẵn trên bộ bản sao.
Mã:
show dbs
use lemp
db.stack.find()
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.

Tham khảo​

 
Back
Bên trên