我已经完成了所有步骤以在Shell脚本中启动副本集。基本上,我试图将一个独立实例A转换为包含一个仲裁器B和一个辅助节点C的副本集。这些是脚本中的以下步骤:
使用以下角色为mongodb admin数据库创建一个管理员用户:
Successfully added user: {
"user" : "mongodb_admin",
"roles" : [
{
"role" : "root",
"db" : "admin"
}
]
}
一切正常,直到步骤5。我能够成功启动副本集。 但是步骤6会引发以下错误:
2018-08-27T11:43:47.080+0100 E QUERY [thread1] Error: auth failed :
DB.prototype._authOrThrow@src/mongo/shell/db.js:1608:20 @(auth):6:1
@(auth):1:2
当我在第5步和第6步之间睡15秒钟时,它工作得很好。 但是我仍然想确保自己做的正确。如果可以安然入睡,那么在检查步骤6中的状态之前,如何确定可以等待15秒。 另外,即使我使用相同的用户名和密码来启动副本集,我也无法理解为什么会给出身份验证错误?
MongoDB版本:3.6.2
答案 0 :(得分:0)
我知道这个问题有些陈旧,但是请尝试在步骤5中调用rs.initiate
之后运行它。
let isPrimary = false;
let count = 0;
while(isPrimary == false && count < 30) {
const rplStatus = db.adminCommand({ replSetGetStatus : 1 });
isPrimary = rplStatus.members[0].stateStr === "PRIMARY";
print("is primary result: ", isPrimary);
count = count + 1;
sleep(1000);
}
这将过滤副本集的状态,并每秒尝试30秒以检查副本集的第一个成员的状态已更改为“ PRIMARY”,此时它将释放线程以进一步执行