Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb Mongo连接器无法连接到mongos_Mongodb_Connector - Fatal编程技术网

Mongodb Mongo连接器无法连接到mongos

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

我正在使用具有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
    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({})