2014-04-10 40 views
0

我目前在mongodb 2.4.8上。我在一臺由主,仲裁和仲裁器組成的機器上設置了複製。我已驗證開啓。我的問題是我無法登錄仲裁器,驗證並運行「db.logRotate();」它一直在失敗的權限。我無法弄清楚我做錯了什麼,或者如果這不能完成,我必須做一個「殺死usr1」。無法在mongodb仲裁器中驗證

+0

我跑由jpsf建議的命令,我也得到了以下內容:>使用adminuse管理 切換到數據庫管理員 > db.runCommand({ logRotate:1}); db.runCommand({logRotate:1}); {「ok」:0,「errmsg」:「未授權」} –

+1

「未授權」錯誤表示您正在使用身份驗證,並且未以具有適當權限的用戶身份登錄,無法在管理數據庫上執行任務。在2.4以下,logRotate命令需要「clusterAdmin」特權。 – daveh

+1

我可以在主服務器或輔助服務器上成功輪轉日誌。我無法得到這個命令在仲裁器上工作。我也無法對仲裁者進行身份驗證。我使用的用戶標識具有「clusterAdmin」特權。 –

回答

0

當同步用戶時,Mongo複製似乎完全忽略了仲裁者。我在我的集​​羣中使用keyFile身份驗證,並且它總是讓我無需任何權限即可登錄仲裁器。在本地機器上,logRotate命令起作用(因爲localhostAuthBypass)。如果我從遠程shell登錄,我沒有授權該命令。

但是,我總是做的是安排一個夜間cronjob來旋轉日誌。你可以做到這一點作爲一個班輪甚至沒有登錄到蒙戈外殼: 簡單地說,它只是:

kill -10 $(cat <pidfile>) 
00 00 * * * /usr/bin/kill -10 /mongo/mongo.pid >>/mongo/logrotation.log 2>&1 

「-10」是指SIGUSR1,它告訴蒙戈旋轉日誌。 確保您使用的是processManagement.pidFilePath(2.6)或--pidfilepath(2.4)選項,並且該命令中列出了相同的pidfilepath。

或者,如果你有一臺服務器上運行多個mongos:

for file in /<mongo_pidfile_directory>/*.pid ; do kill -10 $(cat $file) ; done 
+0

目前我們在生產中的複製套件中沒有仲裁器。你的解決方法是很好的知道,因爲在開發中,我們有仲裁者,我不能在仲裁者中做任何事情,因爲它不允許我進行身份驗證。非常沮喪。 –