Cách triển khai cụm phân mảnh MongoDB 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 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.

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
[*] 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 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
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ủ 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
Bây giờ hãy cài đặt MongoDB 3.4 từ kho lưu trữ mongodb bằng lệnh yum sau.
Mã:
sudo yum -y install mongodb-org
Sau khi mongodb được cài đặt, bạn có thể sử dụng lệnh 'mongo' hoặc 'mongod'.
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
Chỉnh sửa cấu hình mongodb mặc định 'mongod.conf' bằng trình soạn thảo Vim.
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 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.
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' với địa chỉ IP là 10.0.15.31 và máy chủ thứ hai với 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 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
Sau đó, hãy khởi động dịch vụ mongod bằng lệnh bên dưới.
Mã:
mongod --config /etc/mongod.conf
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.
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
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.
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 tên bộ bản sao: 'shardreplica02'
Kết nối với từng máy chủ, dừng dịch vụ mongod (Nếu có 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
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.
Mã:
bindIP: 10.0.15.21
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ư.
Mã:
replication:
 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 MongoDB đang chạy bằng lệnh sau:
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 vớ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ư sau 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 cho 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 - '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
Chạy mongos bằng dòng lệnh như hiển thị 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ả 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
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 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
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ẽ 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ướ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
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 đ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"],
})
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'.
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.



MongoDB Sharded Cluster trên CentOS 7 đã được cài đặt và triển khai thành công.

Tham khảo​

 
Back
Bên trên