Mongodb

驗證 mongos 伺服器是否連接到配置伺服器

  • March 24, 2022

我一直在為分片副本集編寫備份腳本,並且幾乎完成了。除了一切都說完了之後,我似乎無法讓它成功啟動平衡器備份。

這是我試圖用來啟動平衡器備份的命令;請記住,這是通過 SSH 在實際的 mongos 伺服器上執行的。

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

每當腳本命中startBalancer執行上述程式碼的函式時,我都會收到以下錯誤。

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 }

我試過檢查mongoshell程序的退出狀態,使用類似的東西

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

但無論 mongo-shell 中實際發生什麼,退出程式碼似乎總是為 0。

在我嘗試重新啟用平衡器之前,關於如何驗證 mongos 程序是否實際連接到所有三個配置的任何想法?我認為問題是 mongos 伺服器在 mongod 程序有機會完成啟動之前嘗試連接到配置伺服器(分片副本集的備份過程的一部分正在關閉其中一個配置伺服器

您是否嘗試過使用sh.startBalancer()助手

它不是直接更新,而是需要一個超時參數作為等待平衡開始的時間,以及一個睡眠間隔,即等待之間的睡眠時間。以下是來自 shell 的程式碼作為解釋:

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

因此,如果您願意,您甚至可以將其拆分並使用waitForBalancer幫助程序。stopBalancer作為參考,這是當我嘗試在配置伺服器關閉的情況下停止它時出現的等效命令錯誤:

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

“命令”你的 mongo 比你做的更容易。

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

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

不需要 sudo-commands 或多次退出。命令準備好後返回。

您可以檢查平衡器的狀態

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

引用自:https://dba.stackexchange.com/questions/54934