Từng bước sao chép MongoDB

Sao chép bằng bộ bản sao là một phương pháp mạnh mẽ để tăng khả năng phục hồi dữ liệu của toàn bộ cơ sở dữ liệu MongoDB của bạn

Trong bài viết này, tôi sẽ hướng dẫn bạn

Bắt đầu nào

(Bài viết này là một phần của Hướng dẫn MongoDB của chúng tôi. Sử dụng menu bên phải để điều hướng. )

Bản sao MongoDB là gì?

Nói một cách đơn giản, sao chép MongoDB là quá trình tạo một bản sao của cùng một tập dữ liệu trong nhiều máy chủ MongoDB. Điều này có thể đạt được bằng cách sử dụng Bộ bản sao. Bộ bản sao là một nhóm các phiên bản MongoDB duy trì cùng một tập dữ liệu và liên quan đến bất kỳ quy trình mongod nào

Bản sao cho phép quản trị viên cơ sở dữ liệu cung cấp

  • Dữ liệu dự phòng
  • Tính sẵn sàng cao của dữ liệu

Việc duy trì nhiều máy chủ MongoDB với cùng một dữ liệu cung cấp quyền truy cập phân tán vào dữ liệu đồng thời tăng khả năng chịu lỗi của cơ sở dữ liệu bằng cách cung cấp các bản sao lưu

Ngoài ra, sao chép cũng có thể được sử dụng như một phần của cân bằng tải, trong đó các hoạt động đọc và ghi có thể được phân phối trên tất cả các phiên bản tùy thuộc vào trường hợp sử dụng

Cách sao chép MongoDB hoạt động

MongoDB xử lý sao chép thông qua Bộ bản sao, bao gồm nhiều nút MongoDB được nhóm lại với nhau thành một đơn vị

Bộ bản sao yêu cầu tối thiểu ba nút MongoDB

  • Một trong các nút sẽ được coi là nút chính nhận tất cả các thao tác ghi
  • Những cái khác được coi là nút phụ. Các nút phụ này sẽ sao chép dữ liệu từ nút chính

Từng bước sao chép MongoDB

Phương pháp sao chép cơ bản

Mặc dù nút chính là phiên bản duy nhất chấp nhận thao tác ghi, bất kỳ nút nào khác trong bộ bản sao đều có thể chấp nhận thao tác đọc. Chúng có thể được định cấu hình thông qua ứng dụng khách MongoDB được hỗ trợ

Trong trường hợp nút chính không khả dụng hoặc không thể hoạt động, nút phụ sẽ đảm nhận vai trò của nút chính để cung cấp dữ liệu liên tục. Trong trường hợp như vậy, việc lựa chọn nút chính được thực hiện thông qua một quy trình có tên là Bầu chọn tập hợp bản sao, trong đó nút phụ phù hợp nhất được chọn làm nút chính mới

Quy trình nhịp tim

Heartbeat là quá trình xác định trạng thái hiện tại của nút MongoDB trong bộ bản sao. Ở đó, các nút thiết lập bản sao gửi ping cho nhau cứ sau hai giây (do đó có tên). Nếu bất kỳ nút nào không ping lại trong vòng 10 giây, các nút khác trong bộ bản sao sẽ đánh dấu nút đó là không thể truy cập được

Chức năng này rất quan trọng đối với quy trình chuyển đổi dự phòng tự động trong đó nút chính không thể truy cập được và các nút phụ không nhận được nhịp tim từ nút đó trong khung thời gian được phân bổ. Sau đó, MongoDB sẽ tự động chỉ định một máy chủ phụ đóng vai trò là máy chủ chính

Bản sao thiết lập cuộc bầu cử

Các cuộc bầu cử trong bộ bản sao được sử dụng để xác định nút MongoDB nào sẽ trở thành nút chính. Các cuộc bầu cử này có thể xảy ra trong các trường hợp sau

  • Mất kết nối với nút chính (được phát hiện bằng nhịp tim)
  • Đang khởi tạo một bộ bản sao
  • Thêm một nút mới vào một bộ bản sao hiện có
  • Bảo trì bộ Bản sao bằng cách sử dụng stepDown hoặc rs. phương pháp cấu hình lại

Trong quá trình bầu cử, đầu tiên, một trong các nút sẽ giương cờ yêu cầu bầu cử và tất cả các nút khác sẽ bỏ phiếu để chọn nút đó làm nút chính. Thời gian trung bình để hoàn tất quy trình bầu chọn là 12 giây, giả sử rằng cài đặt cấu hình bản sao ở giá trị mặc định. Một yếu tố chính có thể ảnh hưởng đến thời gian hoàn thành cuộc bầu cử là độ trễ của mạng và yếu tố này có thể gây ra sự chậm trễ trong việc đặt bản sao của bạn hoạt động trở lại với nút chính mới

Bộ bản sao không thể xử lý bất kỳ thao tác ghi nào cho đến khi quá trình bầu chọn hoàn tất. Tuy nhiên, các hoạt động đọc có thể được phục vụ nếu các truy vấn đọc được định cấu hình để xử lý trên các nút phụ. MongoDB 3. 6 hỗ trợ các trình điều khiển kết nối tương thích được định cấu hình để thử lại

Bộ bản sao MongoDB vs Cụm MongoDB

Bộ bản sao tạo nhiều bản sao của cùng một tập dữ liệu trên các nút của bộ bản sao. Mục tiêu cơ bản của một bộ bản sao là để

  • Tăng tính khả dụng của dữ liệu
  • Cung cấp giải pháp sao lưu tích hợp

Các cụm hoạt động khác nhau. Cụm MongoDB phân phối dữ liệu trên nhiều nút bằng khóa phân đoạn. Quá trình này sẽ chia nhỏ dữ liệu thành nhiều phần được gọi là phân đoạn và sau đó sao chép từng phân đoạn vào một nút riêng biệt

Mục đích chính của một cụm là hỗ trợ các tập dữ liệu cực lớn và các hoạt động có thông lượng cao bằng cách thay đổi quy mô khối lượng công việc theo chiều ngang

Sự khác biệt chính giữa bộ bản sao và cụm là

  • Một bộ bản sao sao chép toàn bộ tập dữ liệu
  • Một cụm phân phối khối lượng công việc và lưu trữ các mẩu dữ liệu (phân đoạn) trên nhiều máy chủ

MongoDB cho phép người dùng kết hợp hai chức năng này bằng cách tạo một cụm phân đoạn, trong đó mỗi phân đoạn được sao chép sang một máy chủ thứ cấp để cung cấp tính khả dụng và dự phòng dữ liệu cao

Xử lý sự chậm trễ sao chép

Một mối quan tâm chính khi cấu hình sao chép là độ trễ sao chép (lag). Điều này đề cập đến độ trễ trong quá trình sao chép sang nút phụ sau khi cập nhật lên nút chính trong bộ bản sao

Độ trễ sao chép nhất định trong khi sao chép tập dữ liệu lớn là bình thường. Tuy nhiên, các yếu tố sau có thể làm tăng độ trễ sao chép, phủ nhận lợi ích của việc sao chép cập nhật

  • Độ trễ mạng. Vì bạn đang xử lý nhiều phiên bản MongoDB nằm trong các máy chủ khác nhau trong quá trình sao chép, nên phương thức giao tiếp chính sẽ là mạng. Nếu mạng không đủ để đáp ứng nhu cầu của quá trình sao chép, thì sẽ có sự chậm trễ trong việc sao chép dữ liệu trong toàn bộ bản sao. Do đó, tốt hơn hết là luôn định tuyến lưu lượng truy cập của bạn trong một mạng ổn định với đủ băng thông
  • Thông lượng đĩa. Nếu các nút sao chép sử dụng các loại đĩa khác nhau (e. g. , nút chính sử dụng SSD trong khi các nút phụ sử dụng ổ cứng HDD làm đĩa), sẽ có độ trễ trong quá trình sao chép do các nút phụ sẽ xử lý các truy vấn ghi chậm hơn so với nút chính. Đây là một vấn đề phổ biến trong triển khai nhiều bên thuê và quy mô lớn
  • khối lượng công việc nặng. Việc thực hiện các thao tác ghi nặng và kéo dài trên nút chính cũng sẽ dẫn đến sự chậm trễ trong quá trình sao chép. Vì vậy, tốt nhất là định cấu hình chính xác MongoDB Write Concern để quá trình sao chép có thể theo kịp khối lượng công việc mà không ảnh hưởng đến hiệu suất tổng thể của bộ bản sao
  • Nhiệm vụ nền. Một bước quan trọng khác là xác định các tác vụ nền như cập nhật máy chủ, công việc định kỳ và kiểm tra bảo mật có thể gây ra các tác động không mong muốn đối với việc sử dụng mạng hoặc ổ đĩa, gây ra sự chậm trễ trong quá trình sao chép
  • Hoạt động cơ sở dữ liệu. – Một số truy vấn cơ sở dữ liệu có thể thực thi chậm, trong khi một số truy vấn có thể mất nhiều thời gian để thực hiện. Sử dụng trình lược tả cơ sở dữ liệu, bạn có thể xác định các truy vấn như vậy và cố gắng tối ưu hóa chúng cho phù hợp

Định cấu hình Bộ bản sao

Các phần trên đã bao gồm tất cả các lý thuyết quan trọng liên quan đến sao chép. Tiếp theo, hãy định cấu hình bộ bản sao bằng các phiên bản MongoDB được cài đặt trên ba máy chủ Ubuntu

Thiết lập môi trường

Mỗi máy chủ Ubuntu sẽ có phiên bản MongoDB riêng với cổng MongoDB tiêu chuẩn 27017 có thể truy cập thông qua tường lửa. MongoDB khuyến nghị sử dụng tên máy chủ DNS hợp lý thay vì địa chỉ IP khi định cấu hình bộ bản sao trong môi trường sản xuất. Đó là để tránh gián đoạn giao tiếp trong bộ bản sao do thay đổi địa chỉ IP

Bạn có thể cập nhật tệp /etc/hosts để gán tên máy chủ cho từng máy chủ trong môi trường thử nghiệm. Ở đó, bạn phải thêm các tên máy chủ được đề cập bên dưới làm máy chủ chỉ ra từng nút và khởi động lại từng máy chủ để tải cấu hình mới

/etc/hosts

10.10.10.56 mongodb-node-01
10.10.10.57 mongodb-node-02
10.10.10.58 mongodb-node-03

Bắt đầu phiên bản MongoDB

Trước khi bắt đầu phiên bản MongoDB, bạn cần sửa đổi tệp cấu hình trong mỗi máy chủ để phản ánh địa chỉ IP và chỉ ra bộ bản sao. Hãy thực hiện các sửa đổi sau trong mỗi mongod. tập tin conf

mongodb-nút-01

# network interfaces
net:
port: 27017
bindIp: 127.0.0.1,mongodb-node-01# replica set
replication:
replSetName: replicasetMain

mongodb-nút-02

# network interfaces
net:
port: 27017
bindIp: 127.0.0.1,mongodb-node-02# replica set
replication:
replSetName: replicasetMain

mongodb-nút-03

# network interfaces
net:
port: 27017
bindIp: 127.0.0.1,mongodb-node-03# replica set
replication:
replSetName: replicasetMain

Sau khi cập nhật xong, hãy khởi động lại dịch vụ mongod trong từng phiên bản để tải lại cấu hình

sudo systemctl restart mongod

Khởi tạo bộ bản sao

Bạn có thể khởi tạo một bộ bản sao bằng cách sử dụng rs. khởi tạo phương thức(). Phương thức này chỉ được yêu cầu thực thi trên một cá thể MongoDB duy nhất trong bộ bản sao. Trong phương thức khởi tạo, bạn có thể chỉ định tên bộ bản sao và thành viên. Các chi tiết này phải khớp với các cấu hình bạn đã thực hiện trong từng tệp cấu hình ở bước trước

rs.initiate( {
_id : "replicasetMain",
members: [
{ _id: 0, host: "mongodb-node-01:27017" },
{ _id: 1, host: "mongodb-node-02:27017" },
{ _id: 2, host: "mongodb-node-03:27017" }
]
})

Kết quả

Từng bước sao chép MongoDB

sử dụng rs. conf(), bạn có thể xem cấu hình bộ bản sao như bên dưới

rs.conf()

Kết quả

Từng bước sao chép MongoDB

Xác thực sao chép dữ liệu

Bây giờ bạn đã định cấu hình bộ sao chép, bước tiếp theo là xác thực quy trình sao chép. Để làm điều đó, trước tiên hãy đăng nhập vào nút MongoDB chính trong bộ bản sao

Sau đó, bạn cần tạo một bộ sưu tập với một số dữ liệu mẫu bằng các lệnh sau

use replicatestdata
db.createCollection("replicatestCollection01")
db.replicatestCollection01.insertMany([
{name: "test_record_one", description: "testing replica set", record: 1},
{name: "test_record_two", description: "testing replica set", record: 2},
{name: "test_record_three", description: "testing replica set", record: 3}
])

Kết quả

Từng bước sao chép MongoDB

Tiếp theo, đăng nhập vào nút phụ và kiểm tra xem dữ liệu có bị sao chép không. Một điều quan trọng cần lưu ý ở đây là theo mặc định, các truy vấn đã đọc bị tắt trong các nút phụ. Vì vậy, bạn cần kích hoạt chúng bằng lệnh sau

________số 8

Sau đó, bạn có thể tìm kiếm dữ liệu và xác minh xem chúng có được sao chép tốt vào nút phụ hay không

show dbs
use replicatestdata
show collections
db.replicatestCollection01.find().sort({record: 1}).pretty()

Kết quả

Từng bước sao chép MongoDB

Kết quả trên chỉ ra rằng dữ liệu của nút chính đã được sao chép thành công sang phiên bản phụ

Thêm một nút mới vào Bộ bản sao

sử dụng rs. add(), bạn có thể thêm một nút mới vào bộ bản sao hiện có

Trước khi thêm một nút mới, bạn cần cấu hình nó. Đối với điều đó, sửa đổi mongd. conf để chỉ ra bộ bản sao và khởi động lại dịch vụ mongod

mongodb-nút-04

# network interfaces
net:
port: 27017
bindIp: 127.0.0.1,mongodb-node-01# replica set
replication:
replSetName: replicasetMain
0

Sau đó, chuyển đến nút chính của bộ bản sao và chạy lệnh add() với các tham số được liệt kê bên dưới

  • máy chủ đề cập đến địa chỉ IP hoặc tên máy chủ của nút mới
  • mức độ ưu tiên cho biết tính đủ điều kiện tương đối của nút mới để trở thành nút chính. (ưu tiên 0 có nghĩa là nút không thể trở thành nút chính trong bất kỳ trường hợp nào. )
  • phiếu bầu cho biết nút đó có khả năng bỏ phiếu trong các cuộc bầu cử để chọn nút chính hay không
# network interfaces
net:
port: 27017
bindIp: 127.0.0.1,mongodb-node-01# replica set
replication:
replSetName: replicasetMain
1

Kết quả

Từng bước sao chép MongoDB

Lệnh trên sẽ thêm một nút mới vào bộ bản sao. Bạn có thể xác minh xem nút mới đã được thêm chưa bằng cách sử dụng lệnh rs. lệnh status(), lệnh này sẽ hiển thị thông tin chi tiết của nút mới

# network interfaces
net:
port: 27017
bindIp: 127.0.0.1,mongodb-node-01# replica set
replication:
replSetName: replicasetMain
2

Kết quả

Từng bước sao chép MongoDB

Cuối cùng, dữ liệu trong các nút khác sẽ được tự động sao chép sang nút mới

Xóa một nút khỏi Bộ bản sao

rs. lệnh remove() có thể được sử dụng để xóa một nút khỏi bộ bản sao. Bạn cần tắt phiên bản máy chủ trước khi thử xóa một nút. Khi xóa, bạn có thể chỉ định nút nào sẽ bị xóa bằng tên của nút đó

MongoDB có bản sao không?

MongoDB xử lý sao chép thông qua Bộ bản sao , bao gồm nhiều nút MongoDB được nhóm lại với nhau thành một đơn vị. Bộ bản sao yêu cầu tối thiểu ba nút MongoDB. Một trong các nút sẽ được coi là nút chính nhận tất cả các thao tác ghi.

Làm cách nào để thiết lập bản sao trong MongoDB trong Linux?

Bạn có thể thiết lập Bộ bản sao mới trong MongoDB bằng các bước sau. .
Bước 1. Bắt đầu trường hợp mongod
Bước 2. Định cấu hình Bộ bản sao
Bước 3. Kích hoạt bản sao trong MongoDB
Bước 4. Thêm các phiên bản MongoDB vào các bộ bản sao
Bước 5. Xóa Instances khỏi Replica Sets
Bước 6. Kiểm tra quá trình sao chép

Mục đích của việc sao chép trong MongoDB là gì?

Bản sao cung cấp khả năng dự phòng và tăng tính khả dụng của dữ liệu với nhiều bản sao dữ liệu trên các máy chủ cơ sở dữ liệu khác nhau. Bản sao bảo vệ cơ sở dữ liệu khỏi sự mất mát của một máy chủ

Sự khác biệt giữa sao chép và bảo vệ trong MongoDB là gì?

Sao chép có thể hiểu đơn giản là sao chép tập dữ liệu trong khi sharding là phân vùng tập dữ liệu thành các phần rời rạc . Bằng cách chia nhỏ, bạn đã chia bộ sưu tập của mình thành các phần khác nhau. Sao chép cơ sở dữ liệu của bạn có nghĩa là bạn tạo các hình ảnh của tập dữ liệu của mình.