xác minh rằng máy chủ mongos được kết nối với máy chủ cấu hình


7

Tôi đã viết một kịch bản sao lưu cho các bộ sao chép bị phân tách và nó gần như đã được thực hiện, ngoại trừ việc tôi dường như không thể lấy nó để khởi động lại bộ cân bằng thành công sau khi mọi thứ đã được nói và làm xong.

Đây là lệnh tôi đang cố sử dụng để khởi động bộ cân bằng; Hãy nhớ rằng điều này đang được chạy trên máy chủ mongos thực tế thông qua SSH.

sudo -s
mongo -u username -p password --authenticationDatabase db
use config
sh.setBalancerState(true)
exit
exit
exit

Tôi tiếp tục nhận được lỗi sau mỗi khi tập lệnh chạm vào startBalancerhàm chạy mã trên.

SyncClusterConnection::udpate prepare failed:  mongo-conf-0.foo.bar.com:27019:10276 
DBClientBase::findN: transport error: mongo-conf-0.foo.bar.com:27019 
ns: admin.$cmd query: { resetError: 1 }

Tôi đã thử kiểm tra trạng thái thoát của mongoquá trình shell, sử dụng cái gì đó như

if (code != 0) {
  return next('repeat');
} else {
  return next();
}

nhưng bất kể điều gì thực sự xảy ra trong mongo-shell, mã thoát dường như luôn luôn là 0.

Vì vậy, bất kỳ ý tưởng nào về cách tôi có thể xác minh rằng quá trình mongos thực sự được kết nối với cả ba cấu hình trước khi tôi cố gắng kích hoạt lại bộ cân bằng - Tôi cho rằng đó là vấn đề, máy chủ mongos cố gắng kết nối với máy chủ cấu hình trước quá trình mongod đã có cơ hội kết thúc việc khởi động (một phần của quá trình sao lưu cho các bộ bản sao bị hủy đang tắt một trong các máy chủ cấu hình )


LƯU Ý , trong khi (như là phương sách cuối cùng) Tôi có thể kiểm tra đầu ra mà lệnh tạo ra, tôi không muốn ... mặc dù tôi chỉ nhận ra rằng tôi có thể kiểm tra xem liệu đầu ra có như mong đợi không và sau đó lặp lại chức năng nếu không phải vậy
Alexej Magura

Tại sao bạn tắt máy chủ cấu hình? Tôi không nghĩ rằng bước đó là cần thiết.
Antonios

Câu trả lời:


0

Bạn đã thử sử dụng sh.startBalancer()helper thay thế?

Thay vì một bản cập nhật thẳng, sẽ mất một thời gian chờ là thời gian chờ đợi để cân bằng bắt đầu cũng như khoảng thời gian ngủ về thời gian ngủ giữa thời gian chờ đợi. Đây là mã từ shell bằng cách giải thích:

mongos> sh.startBalancer
function ( timeout, interval ) {
    sh.setBalancerState( true )
    sh.waitForBalancer( true, timeout, interval )
}

Vì vậy, bạn thậm chí có thể phá vỡ nó và sử dụng người waitForBalancertrợ giúp nếu bạn muốn. Để tham khảo, đây là lỗi tương đương stopBalancerkhi tôi cố gắng dừng nó với một máy chủ cấu hình xuống:

mongos> sh.stopBalancer(2000, 100)
Waiting for active hosts...
Waiting for active host adamc-mbp.local:30999 to recognize new settings... (ping : Tue Dec 31 2013 19:51:32 GMT+0000 (GMT))
Waiting for the balancer lock...
Waiting again for active hosts after balancer is off...
Tue Dec 31 19:51:39.243 error: {
    "$err" : "error creating initial database config information :: caused by :: SyncClusterConnection::udpate prepare failed:  localhost:29000:9001 socket exception [FAILED_STATE] server [localhost:29000] ",
    "code" : 8005
} at src/mongo/shell/query.js:128

0

Đó là cách dễ dàng hơn để "ra lệnh" mongo của bạn hơn những gì bạn làm.

mongo -u username -p password --authenticationDatabase db --eval="sh.stopBalancer()"

mongo -u username -p password --authenticationDatabase db --eval="sh.startBalancer()"

Không cần lệnh sudo hoặc nhiều lối thoát .. Lệnh trả về khi nó sẵn sàng.

Bạn có thể kiểm tra trạng thái của bộ cân bằng với

mongo -u username -p password --authenticationDatabase db --eval="sh.isBalancerRunning()"
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.