报错具体描述
{
"ok" : 0,
"errmsg" : "not authorized on admin to execute command { replSetInitiate: { _id: \"xnRs2\", members: [ { _id: 0.0, host: \"10.62.124.43:27018\", priority: 1.0 } ] } }",
"code" : 13,
"codeName" : "Unauthorized"
}
发现规律:
以创建一个configsvr副本集为例进行说明
rs.initiate( {
_id: "xnConfReplSet",
configsvr: true,
version: 1,
members: [
{ _id: 0, host: "10.62.124.43:27019" },
{ _id: 1, host: "10.62.124.44:27019" },
{ _id: 2, host: "10.62.124.60:27019" }
]
} )
在如上3台服务器中启动mongod实例时,如果启动配置中未做 bindIp 配置,则初始化创建副本集时不会出现以上错误,鉴于此,解决办法如下:
在如上3台服务器中启动mongod实例时,其中一台服务器(比如10.62.124.43)上启动mongod实例时,其启动配置文件中不做 bindIp 配置,另外2台服务器中mongod实例做 bindIp 配置,然后在10.62.124.43的物理机上用如下命令从一个mongo shell连接到mongod实例
mongo localhost:27019
连接完成后,使用如下命令初始化创建副本集
rs.initiate( {
_id: "xnConfReplSet",
configsvr: true,
version: 1,
members: [
{ _id: 0, host: "10.62.124.43:27019" },
{ _id: 1, host: "10.62.124.44:27019" },
{ _id: 2, host: "10.62.124.60:27019" }
]
} )
此时会看到返回初始化创建成功
退出mongo连接,将 bindIp 配置添加进服务器10.62.124.43上mongod实例对应的配置文件中,然后重启该mongod实例即可。