Mongodb Mongo连接器无法连接到mongos
我正在使用具有clusterAdmin和backup角色的用户连接到mongo,但我发现错误:Mongodb Mongo连接器无法连接到mongos,mongodb,connector,Mongodb,Connector,我正在使用具有clusterAdmin和backup角色的用户连接到mongo,但我发现错误: 2017-02-09 17:51:23,254 [ERROR] mongo_connector.util:96 - Fatal Exception Traceback (most recent call last): File "/usr/lib/python2.7/site-packages/mongo_connector/util.py", line 94, in wrapped fu
2017-02-09 17:51:23,254 [ERROR] mongo_connector.util:96 - Fatal Exception
Traceback (most recent call last):
File "/usr/lib/python2.7/site-packages/mongo_connector/util.py", line 94, in wrapped
func(*args, **kwargs)
File "/usr/lib/python2.7/site-packages/mongo_connector/connector.py", line 370, in run
'listShards')['shards']:
File "/usr/lib/python2.7/site-packages/mongo_connector/util.py", line 78, in retry_until_ok
return func(*args, **kwargs)
File "/usr/lib64/python2.7/site-packages/pymongo/database.py", line 494, in command
codec_options, **kwargs)
File "/usr/lib64/python2.7/site-packages/pymongo/database.py", line 406, in _command
parse_write_concern_error=parse_write_concern_error)
File "/usr/lib64/python2.7/site-packages/pymongo/pool.py", line 419, in command
collation=collation)
File "/usr/lib64/python2.7/site-packages/pymongo/network.py", line 116, in command
parse_write_concern_error=parse_write_concern_error)
File "/usr/lib64/python2.7/site-packages/pymongo/helpers.py", line 210, in _check_command_response
raise OperationFailure(msg % errmsg, code, response)
OperationFailure: not authorized on admin to execute command { listShards: 1 }
“必需权限”下的此页面说明运行mongo connector的最简单方法是创建具有备份角色的用户:
但我甚至无法与这样的用户连接(身份验证错误):
当我与这两个用户一起登录mongos并运行命令时
db.getSiblingDB("admin").runCommand( { listShards: 1 } )
我得到一个碎片清单没有问题
{
"shards" : [
{
"_id" : "shard001",
"host" : "shard001/timgrhlmdb01:27020,timgrhlmdb02:27020",
"state" : 1
},
{
"_id" : "shard002",
"host" : "shard002/timgrhlmdb03:27020,timgrhlmdb04:27020",
"state" : 1
}
],
"ok" : 1
}
那么这意味着什么:
操作失败:未授权管理员执行命令{listShards:1}
更新
我从头开始重新构建集群,但仍然存在相同的问题:操作失败:未授权管理员执行命令{listShards:1}
我还尝试了只使用角色“clusterManager”和“readAnyDatabase”的用户“备份”。这允许用户列出碎片,但现在mongo连接器因“身份验证失败”而失败:
{ "_id" : "admin.backup", "user" : "backup", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "pWcEU7uFqfHPgGe8z+E9Wg==", "storedKey" : "k2tapXQPtM2dHlxYnJiWVxO/rtg=", "serverKey" : "EGG8M4i27OYBy+fLYaL13+Nn4mc=" } }, "roles" : [ { "role" : "readAnyDatabase", "db" : "admin" }, { "role" : "clusterManager", "db" : "admin" } ] }
通过运行以下命令签出用户:
db.system.users.find({})
确保您创建的用户具有备份
角色,如果您可以以备份用户身份登录,并且您还可以运行这些命令,则意味着创建了备份用户,并授予其角色和权限
确保您具有执行此操作的
clusterManager
角色
提供群集上的管理和监视操作。具有
此角色可以访问中使用的配置和本地数据库
分片和复制
在整个群集上提供以下操作:
- addShard
- 附记
- 应用程序消息
- 清理孤儿
- flushRouterConfig
- 列表碎片
- removeShard 等
顺便说一句,看看这个。希望这有帮助。来自提交给mongodb实验室/mongo连接器的bug的响应: 这确实是#563中引入的一个微妙的bug。我们改变了一个发现 假设它没有 行为上的改变。不幸的是(令人烦恼的是),备份角色 具有读取config.shards中的碎片列表的权限 集合,但正如您所看到的,它没有运行 listShards命令。我会将此更改还原为修复中的问题 即将发布的2.5.1 bug修复版本 同时,您需要向mongo connector用户授予 备份和群集监控角色 文档中尚未提及的一个要点是 必须在mongos和所有碎片上创建用户。这 使mongo connector能够对整个群集进行身份验证,并 对每个碎片分别执行 现在可以了!耶
这将教会我遵循手册lol 另一方面,mongo文档包含在配置服务器上创建碎片副本集的错误。此外,除非id在引号中,否则初始化副本集也不会起作用。提交的bug我重新创建了集群,但仍然会遇到同样的错误。如果我以admin身份进行身份验证并运行db.system.users.find({}),则会显示用户“backup”,其角色为数据库“admin”上的“backup”。如果我运行db.runCommand(“listShards”),它会给出未经授权的消息。Sooo备份角色无法列出碎片???如果我将角色“root”添加到用户“backup”中,我现在可以列出碎片,但是连接器失败,身份验证失败。@stackoverflows您似乎应该使用
clusterManager
角色来执行此操作。看看
{ "_id" : "admin.backup", "user" : "backup", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "pWcEU7uFqfHPgGe8z+E9Wg==", "storedKey" : "k2tapXQPtM2dHlxYnJiWVxO/rtg=", "serverKey" : "EGG8M4i27OYBy+fLYaL13+Nn4mc=" } }, "roles" : [ { "role" : "readAnyDatabase", "db" : "admin" }, { "role" : "clusterManager", "db" : "admin" } ] }
db.system.users.find({})