Bản sao Mongo DB bị kẹt ở trạng thái PHỤC HỒI


14

Chúng tôi đã tạo một bộ bản sao và bây giờ vấn đề là 2 thành viên của bộ bản sao [bộ 3 thành viên] đang ở chế độ khôi phục từ 48 giờ. Ban đầu kích thước của các nút phục hồi đang tăng lên và bây giờ thậm chí điều đó đã dừng lại. Vì vậy, trong việc khôi phục các nút, chúng bị kẹt sau 90 GB dữ liệu với hơn 60 GB dữ liệu cục bộ.

Làm thế nào để đi ra khỏi chế độ này?

Câu trả lời:


13

Cách dễ dàng, mặc dù một chút không an toàn

  1. Dừng thứ cấp thứ nhất
  2. Xóa nội dung của nó dbpath
  3. Khởi động lại trung học
  4. Đợi nó bắt kịp với chính
  5. Lặp lại quá trình với thứ cấp thứ hai

Điều này là một chút không an toàn vì không biết tại sao những người thứ hai bước vào trạng thái Phục hồi.

Cách an toàn hơn, nhưng cũng xâm nhập hơn

Như trên, nhưng dừng ứng dụng của bạn trong quá trình. Điều này ngăn khả năng ứng dụng của bạn chèn nhiều dữ liệu hơn so với các ứng dụng phụ có thể sao chép. Tuy nhiên, vấn đề có thể xảy ra trong quá trình sản xuất.

Cách an toàn nhất, nhưng cũng xâm nhập nhất

  1. Tắt toàn bộ bản sao
  2. Xóa nội dung của dbpathtrên cả hai secondaries
  3. Sao chép nội dung của dbpathcả haidbpath
  4. Bắt đầu chính cũ.
  5. Bắt đầu một trong những thứ hai cũ.
  6. Chờ cho đến khi một chính mới được bầu.
  7. Bắt đầu thứ cấp còn lại.

Một số lưu ý:

Sử dụng MMS . Nó miễn phí, dễ cài đặt và nó cung cấp cho bạn thông tin tốt về bộ bản sao của bạn. Cố gắng giữ giá trị cho "độ trễ sao chép" quanh 0 và lấy tất cả các phương tiện cần thiết để độ trễ sao chép của bạn không bao giờ lớn hơn "cửa sổ oplog sao chép".

Luôn đảm bảo rằng bạn có mạng 1Gb và bộ nhớ RAM (xin lỗi). Càng nhiều càng tốt. Nguyên tắc bổ sung: thay vì một nửa RAM và SSD hơn gấp đôi RAM và không có SSD (với RAM còn lại trong giới hạn hợp lý).

Tuyên bố miễn trừ trách nhiệm: Luôn tạo một bản sao lưu dữ liệu sản xuất trước khi đấu tranh với nó.


1
Hiện tại chúng tôi không có nút phụ trong bộ bản sao. Một ở chế độ CHÍNH và hai cái khác ở chế độ PHỤC HỒI.
Avinash Sahu

1
Thứ hai hợp lý, sau đó. Quá trình này như nhau.
Markus W Mahlberg

Tôi đã thử nhiều lần bắt đầu phiên bản Mongo và đồng bộ lại, mỗi lần nó bắt đầu sao chép dữ liệu sang nút khác cho đến khi có kích thước cố định (~ 96gb) và sau đó bị kẹt. Có kích thước oplog phải làm một cái gì đó với nó?
Avinash Sahu

1
Không thực sự, ngoại trừ thực tế là đồng bộ lại có thể dừng khi bạn chèn nhiều dữ liệu hơn oplog có thể giữ trong khi đồng bộ lại ban đầu. Chọn tùy chọn 2 hoặc 3 trong trường hợp này.
Markus W Mahlberg

1
Bạn có thể giải thích thêm chút này? "thay vì một nửa RAM và SSD hơn gấp đôi RAM và không có SSD (với RAM còn lại trong giới hạn hợp lý)."
Stephen Nguyễn

1

Quá trình sao chép thất bại ngay cả khi bạn bắt đầu cào từ một dbpath mới trên phụ. Vì vậy, điều cần làm là thực hiện một số thay đổi trong oplog . Kích thước của oplog phải được đặt thành một giá trị tối ưu để nó có thể xử lý tất cả các ứng dụng ghi vào nó.

Tăng kích thước oplog:

Tắt máy chủ chính

use admin

db.shutdownServer()

Bắt đầu chính là độc lập và chạy trên cổng khác nhau, nói 37017

Đăng nhập vào mongo trong cổng 37017

mongo --port 37017

Xóa nội dung cũ trong cơ sở dữ liệu cục bộ

Để an toàn, hãy sao lưu oplog cũ trước khi thả

mongodump --db local --collection 'oplog.rs' --port 37017

Bỏ nội dung cũ vào cơ sở dữ liệu cục bộ

use local

db.oplog.rs.drop()

db.me.drop()

db.replset.election.drop()

db.replset.minvalid.drop()

db.startup_log.drop()

Bộ sưu tập thay thế không thể bị loại bỏ vì vậy hãy xóa nó với id yêu cầu:

db.system.replset.remove({ "_id" : "your_replsetname"})

Tạo một oplog mới có kích thước yêu cầu là 50 GB

db.runCommand( { create: "oplog.rs", capped: true, size: (50 * 1024 * 1024 * 1024) } )

Ngoài ra, bạn có thể chỉ định kích thước oplog tính bằng MB trong tệp mongod.conf, giả sử 50 GB là 429496 MB

replication:
   oplogSizeMB: 429496

Hi vọng điêu nay co ich !!!

Biên tập:

Như đề cập của Nicholas Tolley Cottrell trong các bình luận. Trong phiên bản MongoDB 3.6, chúng ta có thể thay đổi kích thước oplog trong thời gian chạy mà không cần khởi động lại.

Kiểm tra kích thước oplog hiện tại

use local
db.oplog.rs.stats().maxSize

Để thay đổi kích thước oplog thành 10 GB

db.adminCommand({replSetResizeOplog: 1, size: 10000})

1
Trên đây là hết hạn kể từ 3.6. Bây giờ bạn có thể thay đổi kích thước oplog mà không cần bỏ nội dung hoặc thậm chí khởi động lại các nút: docs.mongodb.com/manual/tutorial/change-oplog-size
Nicholas Tolley Cottrell

1
@NicholasTcarCottrell yeah, tôi đã chỉnh sửa câu trả lời.
JERRY
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.